summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPranav Sanwal <[email protected]>2026-08-11 16:23:14 +0530
committerTom Rini <[email protected]>2026-08-19 08:48:14 -0600
commitbb6283adea943068e4ef93f0bdc91c33a887f003 (patch)
tree453fe4bcdeb79dbceef2fabefdd0f41b2fd5ce09
parent55752c23945b47fc68afa35102108e60108fc7d9 (diff)
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 <[email protected]> Signed-off-by: Pranav Sanwal <[email protected]> Reviewed-by: Simon Glass <[email protected]>
-rw-r--r--drivers/gpio/gpio-delay.c4
1 files changed, 3 insertions, 1 deletions
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;