• G
    pinctrl: sh-pfc: Convert to platform_get_*() · c7977ec4
    Geert Uytterhoeven 提交于
    If the pin function controller (which can be a GPIO controller) is
    instantiated before the interrupt controllers, due to the ordering in
    the DTS, the irq domains for the interrupt controllers referenced by its
    "interrupts-extended" property cannot be found yet:
    
        irq: no irq domain found for /interrupt-controller@e61c0000 !
    
    As the sh-pfc driver accesses the platform device's resources directly,
    it cannot find the (optional) IRQ resources, and thinks no interrupts
    are available. This may lead to failures later, when GPIOs are used as
    interupts:
    
        gpio-keys keyboard: Unable to claim irq 0; error -22
        gpio-keys: probe of keyboard failed with error -22
    
    To fix this, add support for deferred probing to sh-pfc, by converting
    the driver from direct platform device resource access to using the
    platform_get_resource() and platform_get_irq() helpers.
    
    Note that while this fixes the root cause worked around by commit
    e4ba0a9b ("ARM: shmobile: r8a73a4: Move pfc node to work around
    probe ordering bug"), I strongly recommend against reverting the
    workaround now, as this would lead to lots of probe deferrals in drivers
    relying on pinctrl. This may be reconsidered once the DT code starts
    taking into account phandle dependencies during device instantation.
    Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
    Acked-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
    c7977ec4
core.c 14.7 KB