gpio: fix deferred probe detection for legacy API
authorAlexandre Courbot <acourbot@nvidia.com>
Tue, 2 Dec 2014 14:15:05 +0000 (23:15 +0900)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 2 Dec 2014 14:46:36 +0000 (15:46 +0100)
commit0e9a5edf5d01356fa4a561772a25d97b3fd13de6
treefc38446b2de4c5edd95f69df5d770cd48779a2d6
parent834296a3c66257616d14aef245dbe86111b5ef6b
gpio: fix deferred probe detection for legacy API

Commit 14e85c0e69d5 ("gpio: remove gpio_descs global array") changed
gpio_to_desc()'s behavior to return NULL not only for GPIOs numbers
not in the valid range, but also for all GPIOs whose controller has not
been probed yet. Although this behavior is more correct (nothing hints
that these GPIO numbers will be populated later), this affects
gpio_request() and gpio_request_one() which call gpiod_request() with a
NULL descriptor, causing it to return -EINVAL instead of the expected
-EPROBE_DEFER for a non-probed GPIO.

gpiod_request() is only called with a descriptor obtained from
gpio_to_desc() from these two functions, so address the issue there.

Other ways to obtain GPIOs rely on well-defined mappings and can thus
return -EPROBE_DEFER only for relevant GPIOs, and are thus not affected
by this issue.

Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib-legacy.c
drivers/gpio/gpiolib.c