• Geert Uytterhoeven's avatar
    ARM: shmobile: sh73a0 dtsi: Add missing "gpio-ranges" to gpio node · 94bdc48d
    Geert Uytterhoeven authored
    If a GPIO driver uses gpiochip_add_pin_range() (which is usually the
    case for GPIO/PFC combos), the GPIO hogging mechanism configured from DT
    doesn't work:
    
        requesting hog GPIO led1-high (chip sh73a0_pfc, offset 20) failed
    
    The actual error code is -517 == -EPROBE_DEFER.
    
    The problem is that PFC+GPIO registration is handled in multiple steps:
      1. pinctrl_register(),
      2. gpiochip_add(),
      3. gpiochip_add_pin_range().
    
    Configuration of the hogs is handled in gpiochip_add():
    
        gpiochip_add
            of_gpiochip_add
                of_gpiochip_scan_hogs
                    gpiod_hog
                        gpiochip_request_own_desc
                            __gpiod_request
                                chip->request
                                    pinctrl_request_gpio
                                        pinctrl_get_device_gpio_range
    
    However, at this point the GPIO controller hasn't been added to
    pinctrldev_list yet, so the range can't be found, and the operation fails
    with -EPROBE_DEFER.
    
    To fix this, add a "gpio-ranges" property to the gpio device node, so
    the ranges are added by of_gpiochip_add_pin_range(), which is called by
    of_gpiochip_add() before the call to of_gpiochip_scan_hogs().
    Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Acked-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarSimon Horman <horms+renesas@verge.net.au>
    94bdc48d
sh73a0.dtsi 24.9 KB