Skip to content

Commit

Permalink
[ARM] 3348/1: Disable GPIO interrupts
Browse files Browse the repository at this point in the history
Patch from Andrew Victor

disable_irq() lazily disables the interrupt, so the IRQ is only disabled
once the interrupt occurs again.  The GPIO interrupt handler therefore
must first check disable_depth to see if the IRQ needs to be disabled.

Orignal patch by Bill Gatliff.

Signed-off-by: Andrew Victor <andrew@sanpeople.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Andrew Victor authored and Russell King committed Feb 24, 2006
1 parent f52ee14 commit abbea71
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions arch/arm/mach-at91rm9200/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -274,8 +274,18 @@ static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs
gpio = &irq_desc[pin];

while (isr) {
if (isr & 1)
gpio->handle(pin, gpio, regs);
if (isr & 1) {
if (unlikely(gpio->disable_depth)) {
/*
* The core ARM interrupt handler lazily disables IRQs so
* another IRQ must be generated before it actually gets
* here to be disabled on the GPIO controller.
*/
gpio_irq_mask(pin);
}
else
gpio->handle(pin, gpio, regs);
}
pin++;
gpio++;
isr >>= 1;
Expand Down

0 comments on commit abbea71

Please sign in to comment.