mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
[ARM] 3378/1: ixp2000: fix gpio interrupt handling
Patch from Lennert Buytenhek ixp2000 used to initially mark GPIO interrupts as invalid, and not mark them valid until set_irq_type() was called, but this doesn't work if you want to use request_irq() with the SA_TRIGGER_* flags. So, just mark the GPIO interrupts valid from the beginning. We configure GPIOs as inputs when set_irq_type() is called anyway, so this shouldn't be a problem. Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
bec1b81936
commit
bd115ea007
@ -288,8 +288,6 @@ void gpio_line_config(int line, int direction)
|
||||
|
||||
local_irq_save(flags);
|
||||
if (direction == GPIO_OUT) {
|
||||
irq_desc[line + IRQ_IXP2000_GPIO0].valid = 0;
|
||||
|
||||
/* if it's an output, it ain't an interrupt anymore */
|
||||
GPIO_IRQ_falling_edge &= ~(1 << line);
|
||||
GPIO_IRQ_rising_edge &= ~(1 << line);
|
||||
@ -351,11 +349,6 @@ static int ixp2000_GPIO_irq_type(unsigned int irq, unsigned int type)
|
||||
GPIO_IRQ_level_high &= ~(1 << line);
|
||||
update_gpio_int_csrs();
|
||||
|
||||
/*
|
||||
* Finally, mark the corresponding IRQ as valid.
|
||||
*/
|
||||
irq_desc[irq].valid = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -506,14 +499,10 @@ void __init ixp2000_init_irq(void)
|
||||
}
|
||||
set_irq_chained_handler(IRQ_IXP2000_ERRSUM, ixp2000_err_irq_handler);
|
||||
|
||||
/*
|
||||
* GPIO IRQs are invalid until someone sets the interrupt mode
|
||||
* by calling set_irq_type().
|
||||
*/
|
||||
for (irq = IRQ_IXP2000_GPIO0; irq <= IRQ_IXP2000_GPIO7; irq++) {
|
||||
set_irq_chip(irq, &ixp2000_GPIO_irq_chip);
|
||||
set_irq_handler(irq, do_level_IRQ);
|
||||
set_irq_flags(irq, 0);
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
}
|
||||
set_irq_chained_handler(IRQ_IXP2000_GPIO, ixp2000_GPIO_irq_handler);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user