diff options
| author | Pranav Sanwal <[email protected]> | 2026-08-11 16:23:14 +0530 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2026-08-19 08:48:14 -0600 |
| commit | bb6283adea943068e4ef93f0bdc91c33a887f003 (patch) | |
| tree | 453fe4bcdeb79dbceef2fabefdd0f41b2fd5ce09 | |
| parent | 55752c23945b47fc68afa35102108e60108fc7d9 (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.c | 4 |
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; |
