• Alexandre Courbot's avatar
    gpio: fix deferred probe detection for legacy API · 0e9a5edf
    Alexandre Courbot authored
    Commit 14e85c0e ("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: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
    Tested-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    0e9a5edf
gpiolib.c 55.5 KB