diff options
-rw-r--r-- | drivers/gpio/gpio-pl061.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c index 4102f63230fd..0f718f9bbd8c 100644 --- a/drivers/gpio/gpio-pl061.c +++ b/drivers/gpio/gpio-pl061.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/amba/bus.h> | 23 | #include <linux/amba/bus.h> |
24 | #include <linux/amba/pl061.h> | 24 | #include <linux/amba/pl061.h> |
25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
26 | #include <asm/mach/irq.h> | ||
26 | 27 | ||
27 | #define GPIODIR 0x400 | 28 | #define GPIODIR 0x400 |
28 | #define GPIOIS 0x404 | 29 | #define GPIOIS 0x404 |
@@ -211,8 +212,9 @@ static void pl061_irq_handler(unsigned irq, struct irq_desc *desc) | |||
211 | struct list_head *chip_list = irq_get_handler_data(irq); | 212 | struct list_head *chip_list = irq_get_handler_data(irq); |
212 | struct list_head *ptr; | 213 | struct list_head *ptr; |
213 | struct pl061_gpio *chip; | 214 | struct pl061_gpio *chip; |
215 | struct irq_chip *irqchip = irq_desc_get_chip(desc); | ||
214 | 216 | ||
215 | desc->irq_data.chip->irq_ack(&desc->irq_data); | 217 | chained_irq_enter(irqchip, desc); |
216 | list_for_each(ptr, chip_list) { | 218 | list_for_each(ptr, chip_list) { |
217 | unsigned long pending; | 219 | unsigned long pending; |
218 | int offset; | 220 | int offset; |
@@ -227,7 +229,7 @@ static void pl061_irq_handler(unsigned irq, struct irq_desc *desc) | |||
227 | for_each_set_bit(offset, &pending, PL061_GPIO_NR) | 229 | for_each_set_bit(offset, &pending, PL061_GPIO_NR) |
228 | generic_handle_irq(pl061_to_irq(&chip->gc, offset)); | 230 | generic_handle_irq(pl061_to_irq(&chip->gc, offset)); |
229 | } | 231 | } |
230 | desc->irq_data.chip->irq_unmask(&desc->irq_data); | 232 | chained_irq_exit(irqchip, desc); |
231 | } | 233 | } |
232 | 234 | ||
233 | static int pl061_probe(struct amba_device *dev, const struct amba_id *id) | 235 | static int pl061_probe(struct amba_device *dev, const struct amba_id *id) |