• Linus Walleij's avatar
    gpio: pl061: assign the apropriate handler for irqs · 26ba9cd4
    Linus Walleij authored
    The PL061 can handle level IRQs and edge IRQs, however it is
    just utilizing handle_simple_irq() for all IRQs. Inspired by
    Stefan Agners patch to vf610, this assigns the right handler
    depending on what type is set up, and after this
    handle_bad_irq() is only used as default and if the type is
    not specified, as is done in the OMAP driver: defining the
    IRQ type is really not optional for this driver.
    
    The interrupt handler was just writing the interrupt clearing
    register for all lines that were high when entering the handling
    loop, this is wrong: that register is only supposed to be
    written (on a per-line basis) for edge IRQs, so this ACK
    was moved to the .irq_ack() callback as is proper.
    
    Tested with PL061 on the ARM RealView PB11MPCore and the
    MMC/SC card detect GPIO.
    
    Cc: Jonas Gorski <jogo@openwrt.org>
    Cc: Stefan Agner <stefan@agner.ch>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    26ba9cd4
gpio-pl061.c 11.6 KB