• Douglas Anderson's avatar
    pinctrl: qcom: Handle broken/missing PDC dual edge IRQs on sc7180 · c3c0c2e1
    Douglas Anderson authored
    Depending on how you look at it, you can either say that:
    a) There is a PDC hardware issue (with the specific IP rev that exists
       on sc7180) that causes the PDC not to work properly when configured
       to handle dual edges.
    b) The dual edge feature of the PDC hardware was only added in later
       HW revisions and thus isn't in all hardware.
    
    Regardless of how you look at it, let's work around the lack of dual
    edge support by only ever letting our parent see requests for single
    edge interrupts on affected hardware.
    
    NOTE: it's possible that a driver requesting a dual edge interrupt
    might get several edges coalesced into a single IRQ.  For instance if
    a line starts low and then goes high and low again, the driver that
    requested the IRQ is not guaranteed to be called twice.  However, it
    is guaranteed that once the driver's interrupt handler starts running
    its first instruction that any new edges coming in will cause the
    interrupt to fire again.  This is relatively commonplace for dual-edge
    gpio interrupts (many gpio controllers require software to emulate
    dual edge with single edge) so client drivers should be setup to
    handle it.
    
    Fixes: e35a6ae0 ("pinctrl/msm: Setup GPIO chip in hierarchy")
    Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20200714080254.v3.1.Ie0d730120b232a86a4eac1e2909bcbec844d1766@changeidSigned-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    c3c0c2e1
pinctrl-msm.h 5.28 KB