mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
[ARM] 3348/1: Disable GPIO interrupts
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>
This commit is contained in:
parent
f52ee1410d
commit
abbea71872
1 changed files with 12 additions and 2 deletions
|
@ -274,8 +274,18 @@ static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs
|
||||||
gpio = &irq_desc[pin];
|
gpio = &irq_desc[pin];
|
||||||
|
|
||||||
while (isr) {
|
while (isr) {
|
||||||
if (isr & 1)
|
if (isr & 1) {
|
||||||
gpio->handle(pin, gpio, regs);
|
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++;
|
pin++;
|
||||||
gpio++;
|
gpio++;
|
||||||
isr >>= 1;
|
isr >>= 1;
|
||||||
|
|
Loading…
Reference in a new issue