• Lars-Peter Clausen's avatar
    gpio: zynq: Clear pending interrupt when enabling a IRQ · 190dc2e6
    Lars-Peter Clausen authored
    The Zynq GPIO controller does not disable the interrupt detection when the
    interrupt is masked and only disables the propagation of the interrupt. This
    means when the controller detects an interrupt condition while the interrupt is
    logically disabled (and masked) it will propagate the recorded interrupt event
    once the interrupt is enabled. This will cause the interrupt consumer to see
    spurious interrupts to prevent this first make sure that the interrupt is not
    asserted and then enable it.
    
    E.g. when a interrupt is requested with request_irq() it will be configured
    according to the requested type (edge/level triggered, etc.) after that it will
    be enabled. But the detection circuit might have already registered a false
    interrupt before the interrupt type was correctly configured and once the
    interrupt is unmasked this false interrupt will be propagated and the interrupt
    handler for the just request interrupt will called.
    Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    190dc2e6
gpio-zynq.c 20.5 KB