diff options
author | Florian Fainelli <florian@openwrt.org> | 2009-05-21 13:49:47 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2009-06-17 06:06:27 -0400 |
commit | d36773e53f4919627d43b1010df096c5d518a1f5 (patch) | |
tree | 11d46cd95681f7e7a04340ec7c966da86e9f0e6b /arch/mips | |
parent | 1c99dac8bf0dd5bd1a7600e81d1e5691f7338250 (diff) |
MIPS: RB532: Check irq number when handling GPIO interrupts
This patch makes sure that we are not going to clear
or change the interrupt status of a GPIO interrupt
superior to 13 as this is the maximum number of GPIO
interrupt source (p.232 of the RC32434 reference manual).
Signed-off-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/rb532/irq.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/mips/rb532/irq.c b/arch/mips/rb532/irq.c index 53eeb5e7bc5b..f07882029a90 100644 --- a/arch/mips/rb532/irq.c +++ b/arch/mips/rb532/irq.c | |||
@@ -151,7 +151,8 @@ static void rb532_disable_irq(unsigned int irq_nr) | |||
151 | mask |= intr_bit; | 151 | mask |= intr_bit; |
152 | WRITE_MASK(addr, mask); | 152 | WRITE_MASK(addr, mask); |
153 | 153 | ||
154 | if (group == GPIO_MAPPED_IRQ_GROUP) | 154 | /* There is a maximum of 14 GPIO interrupts */ |
155 | if (group == GPIO_MAPPED_IRQ_GROUP && irq_nr <= (GROUP4_IRQ_BASE + 13)) | ||
155 | rb532_gpio_set_istat(0, irq_nr - GPIO_MAPPED_IRQ_BASE); | 156 | rb532_gpio_set_istat(0, irq_nr - GPIO_MAPPED_IRQ_BASE); |
156 | 157 | ||
157 | /* | 158 | /* |
@@ -174,7 +175,7 @@ static int rb532_set_type(unsigned int irq_nr, unsigned type) | |||
174 | int gpio = irq_nr - GPIO_MAPPED_IRQ_BASE; | 175 | int gpio = irq_nr - GPIO_MAPPED_IRQ_BASE; |
175 | int group = irq_to_group(irq_nr); | 176 | int group = irq_to_group(irq_nr); |
176 | 177 | ||
177 | if (group != GPIO_MAPPED_IRQ_GROUP) | 178 | if (group != GPIO_MAPPED_IRQ_GROUP || irq_nr > (GROUP4_IRQ_BASE + 13)) |
178 | return (type == IRQ_TYPE_LEVEL_HIGH) ? 0 : -EINVAL; | 179 | return (type == IRQ_TYPE_LEVEL_HIGH) ? 0 : -EINVAL; |
179 | 180 | ||
180 | switch (type) { | 181 | switch (type) { |