diff options
Diffstat (limited to 'drivers/gpio/gpiolib-of.c')
-rw-r--r-- | drivers/gpio/gpiolib-of.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index 564bb7a31da4..84e5a9df2344 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c | |||
@@ -241,6 +241,19 @@ struct gpio_desc *of_find_gpio(struct device *dev, const char *con_id, | |||
241 | 241 | ||
242 | desc = of_get_named_gpiod_flags(dev->of_node, prop_name, idx, | 242 | desc = of_get_named_gpiod_flags(dev->of_node, prop_name, idx, |
243 | &of_flags); | 243 | &of_flags); |
244 | /* | ||
245 | * -EPROBE_DEFER in our case means that we found a | ||
246 | * valid GPIO property, but no controller has been | ||
247 | * registered so far. | ||
248 | * | ||
249 | * This means we don't need to look any further for | ||
250 | * alternate name conventions, and we should really | ||
251 | * preserve the return code for our user to be able to | ||
252 | * retry probing later. | ||
253 | */ | ||
254 | if (IS_ERR(desc) && PTR_ERR(desc) == -EPROBE_DEFER) | ||
255 | return desc; | ||
256 | |||
244 | if (!IS_ERR(desc) || (PTR_ERR(desc) != -ENOENT)) | 257 | if (!IS_ERR(desc) || (PTR_ERR(desc) != -ENOENT)) |
245 | break; | 258 | break; |
246 | } | 259 | } |
@@ -250,7 +263,7 @@ struct gpio_desc *of_find_gpio(struct device *dev, const char *con_id, | |||
250 | desc = of_find_spi_gpio(dev, con_id, &of_flags); | 263 | desc = of_find_spi_gpio(dev, con_id, &of_flags); |
251 | 264 | ||
252 | /* Special handling for regulator GPIOs if used */ | 265 | /* Special handling for regulator GPIOs if used */ |
253 | if (IS_ERR(desc)) | 266 | if (IS_ERR(desc) && PTR_ERR(desc) != -EPROBE_DEFER) |
254 | desc = of_find_regulator_gpio(dev, con_id, &of_flags); | 267 | desc = of_find_regulator_gpio(dev, con_id, &of_flags); |
255 | 268 | ||
256 | if (IS_ERR(desc)) | 269 | if (IS_ERR(desc)) |