From bb6283adea943068e4ef93f0bdc91c33a887f003 Mon Sep 17 00:00:00 2001 From: Pranav Sanwal Date: Tue, 11 Aug 2026 16:23:14 +0530 Subject: gpio: delay: free already-requested GPIOs on probe failure gpio_delay_probe() requests each wrapped real GPIO in a loop and returns immediately if gpio_request_by_name_nodev() fails partway through, without freeing the GPIOs it already successfully requested. gpio_delay_remove() does not cover this either, since .remove is only called for devices that finished probing. Free what was already requested via the same gpio_delay_free_wrapped() helper gpio_delay_remove() uses, bounded by the number of GPIOs actually requested so far rather than the full gpio_count. Fixes: b86fa3fd24cb ("gpio: Add GPIO delay driver") Suggested-by: Simon Glass Signed-off-by: Pranav Sanwal Reviewed-by: Simon Glass --- drivers/gpio/gpio-delay.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/gpio-delay.c b/drivers/gpio/gpio-delay.c index 27fc59b5ee4..747c520fb46 100644 --- a/drivers/gpio/gpio-delay.c +++ b/drivers/gpio/gpio-delay.c @@ -150,8 +150,10 @@ static int gpio_delay_probe(struct udevice *dev) d = &priv->descs[i]; ret = gpio_request_by_name_nodev(node, "gpios", i, &d->real_gpio, 0); - if (ret) + if (ret) { + gpio_delay_free_wrapped(dev, i); return ret; + } } return 0; -- cgit v1.3.1