• Doug Berger's avatar
    gpio: brcmstb: release the bgpio lock during irq handlers · 142c168e
    Doug Berger authored
    The basic memory-mapped GPIO controller lock must be released
    before calling the registered GPIO interrupt handlers to allow
    the interrupt handlers to access the hardware.
    
    Examples of why a GPIO interrupt handler might want to access
    the GPIO hardware include an interrupt that is configured to
    trigger on rising and falling edges that needs to read the
    current level of the input to know how to respond, or an
    interrupt that causes a change in a GPIO output in the same
    bank. If the lock is not released before enterring the handler
    the hardware accesses will deadlock when they attempt to grab
    the lock.
    
    Since the lock is only needed to protect the calculation of
    unmasked pending interrupts create a dedicated function to
    perform this and hide the complexity.
    
    Fixes: 19a7b694 ("gpio: brcmstb: Add interrupt and wakeup source support")
    Signed-off-by: default avatarDoug Berger <opendmb@gmail.com>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Acked-by: default avatarGregory Fong <gregory.0xf0@gmail.com>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    142c168e
gpio-brcmstb.c 15.2 KB