Browse Source

Merge master.kernel.org:/home/rmk/linux-2.6-arm

Linus Torvalds 19 năm trước cách đây
mục cha
commit
c946160e60
1 tập tin đã thay đổi với 12 bổ sung2 xóa
  1. 12 2
      arch/arm/mach-at91rm9200/gpio.c

+ 12 - 2
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;