diff options
author | Alexandre Courbot <acourbot@nvidia.com> | 2013-10-04 10:59:58 -0700 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2013-10-11 16:31:54 +0200 |
commit | 0204df470d6db830f0f2f5654ec582be84d81588 (patch) | |
tree | 22bbd2debb7534f143143e6648a2acd4911306dd /drivers/gpio/gpiolib.c | |
parent | 8c0fca8153224822121c85a64d6401903b9e4690 (diff) | |
download | linux-stable-0204df470d6db830f0f2f5654ec582be84d81588.tar.gz linux-stable-0204df470d6db830f0f2f5654ec582be84d81588.tar.bz2 linux-stable-0204df470d6db830f0f2f5654ec582be84d81588.zip |
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>
Diffstat (limited to 'drivers/gpio/gpiolib.c')
-rw-r--r-- | drivers/gpio/gpiolib.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index f33063114d56..0dee0e0c247a 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1398,7 +1398,7 @@ static int gpiod_request(struct gpio_desc *desc, const char *label) int status = -EPROBE_DEFER; unsigned long flags; - if (!desc || !desc->chip) { + if (!desc) { pr_warn("%s: invalid GPIO\n", __func__); return -EINVAL; } @@ -1406,6 +1406,8 @@ static int gpiod_request(struct gpio_desc *desc, const char *label) spin_lock_irqsave(&gpio_lock, flags); chip = desc->chip; + if (chip == NULL) + goto done; if (!try_module_get(chip->owner)) goto done; |