gpiolib: let gpiod_request() return -EPROBE_DEFER
Patch be1a4b brought some improvements to the GPIO error handling code, but also changed the return value of gpiod_request() when called on a not yet initialized GPIO descriptor: it now returns -EINVAL instead of -EPROBE_DEFER, and this affects some drivers. This patch restores the original behavior for gpiod_request(). It is safe to do so now that desc_to_gpio() does not rely on the GPIO descriptor to be initialized. Other functions changed by patch be1a4b do not see their return value affected, so these are not reverted. Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> Reported-by: Dr. H. Nikolaus Schaller <hns@goldelico.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
committed by
Linus Walleij
parent
8c0fca8153
commit
0204df470d
@@ -1398,7 +1398,7 @@ static int gpiod_request(struct gpio_desc *desc, const char *label)
|
|||||||
int status = -EPROBE_DEFER;
|
int status = -EPROBE_DEFER;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
if (!desc || !desc->chip) {
|
if (!desc) {
|
||||||
pr_warn("%s: invalid GPIO\n", __func__);
|
pr_warn("%s: invalid GPIO\n", __func__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@@ -1406,6 +1406,8 @@ static int gpiod_request(struct gpio_desc *desc, const char *label)
|
|||||||
spin_lock_irqsave(&gpio_lock, flags);
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
|
||||||
chip = desc->chip;
|
chip = desc->chip;
|
||||||
|
if (chip == NULL)
|
||||||
|
goto done;
|
||||||
|
|
||||||
if (!try_module_get(chip->owner))
|
if (!try_module_get(chip->owner))
|
||||||
goto done;
|
goto done;
|
||||||
|
Reference in New Issue
Block a user