summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-02-25 01:00:36 +0100
committerLinus Torvalds <torvalds@g5.osdl.org>2006-02-25 01:00:36 +0100
commitc946160e601c70a0ae0aa807461dd0232bcaf3a7 (patch)
tree0554732c1bb8ff38dac0ad143a6f455de11677f9
parentMerge git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6 (diff)
parent[ARM] 3348/1: Disable GPIO interrupts (diff)
downloadlinux-c946160e601c70a0ae0aa807461dd0232bcaf3a7.tar.xz
linux-c946160e601c70a0ae0aa807461dd0232bcaf3a7.zip
Merge master.kernel.org:/home/rmk/linux-2.6-arm
-rw-r--r--arch/arm/mach-at91rm9200/gpio.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/arm/mach-at91rm9200/gpio.c b/arch/arm/mach-at91rm9200/gpio.c
index a9f718bf8ba8..0e396feec468 100644
--- a/arch/arm/mach-at91rm9200/gpio.c
+++ b/arch/arm/mach-at91rm9200/gpio.c
@@ -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;