• Maulik Shah's avatar
    pinctrl: qcom: Move clearing pending IRQ to .irq_request_resources callback · 71266d9d
    Maulik Shah authored
    When GPIOs that are routed to PDC are used as output they can still latch
    the IRQ pending at GIC. As a result the spurious IRQ was handled when the
    client driver change the direction to input to starts using it as IRQ.
    
    Currently such erroneous latched IRQ are cleared with .irq_enable callback
    however if the driver continue to use GPIO as interrupt and invokes
    disable_irq() followed by enable_irq() then everytime during enable_irq()
    previously latched interrupt gets cleared.
    
    This can make edge IRQs not seen after enable_irq() if they had arrived
    after the driver has invoked disable_irq() and were pending at GIC.
    
    Move clearing erroneous IRQ to .irq_request_resources callback as this is
    the place where GPIO direction is changed as input and its locked as IRQ.
    
    While at this add a missing check to invoke msm_gpio_irq_clear_unmask()
    from .irq_enable callback only when GPIO is not routed to PDC.
    
    Fixes: e35a6ae0 ("pinctrl/msm: Setup GPIO chip in hierarchy")
    Signed-off-by: default avatarMaulik Shah <mkshah@codeaurora.org>
    Link: https://lore.kernel.org/r/1604561884-10166-1-git-send-email-mkshah@codeaurora.orgSigned-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    71266d9d
pinctrl-msm.c 37.5 KB