diff options
author | Geert Uytterhoeven <geert+renesas@glider.be> | 2016-02-19 05:00:50 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2016-02-25 04:04:25 -0500 |
commit | 40c8eabac43db862810367edb2fe9ec7f69e814e (patch) | |
tree | 60c535a4724dd17d41aea2d330dc26d6e79715c2 | |
parent | bb91d345b49f9ca8ccf3ed9cc3346decdd9c4c3f (diff) |
gpio: Propagate all errors in devm_get_gpiod_from_child()
devm_get_gpiod_from_child() tries several property suffixes to find a
GPIO descriptor. If all suffixes fail and no probe deferral has been
detected, it returns the error of the last try.
However, if any but the last try fails with a real error (e.g. -EBUSY),
this error is not propagated, and -ENOENT will be returned.
This confuses drivers that e.g. want to detect if a GPIO is already in
use.
To fix this, change the loop logic to continue on -ENOENT, which
indicates the property was not found and the next suffix should be
tried, and propagate all other detected errors.
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r-- | drivers/gpio/devres.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpio/devres.c b/drivers/gpio/devres.c index 903fcf4d04a0..b760cbbb41d8 100644 --- a/drivers/gpio/devres.c +++ b/drivers/gpio/devres.c | |||
@@ -155,7 +155,7 @@ struct gpio_desc *devm_get_gpiod_from_child(struct device *dev, | |||
155 | suffixes[i]); | 155 | suffixes[i]); |
156 | 156 | ||
157 | desc = fwnode_get_named_gpiod(child, prop_name); | 157 | desc = fwnode_get_named_gpiod(child, prop_name); |
158 | if (!IS_ERR(desc) || (PTR_ERR(desc) == -EPROBE_DEFER)) | 158 | if (!IS_ERR(desc) || (PTR_ERR(desc) != -ENOENT)) |
159 | break; | 159 | break; |
160 | } | 160 | } |
161 | if (IS_ERR(desc)) { | 161 | if (IS_ERR(desc)) { |