diff options
author | Rob Herring <rob.herring@calxeda.com> | 2011-12-09 15:12:53 -0500 |
---|---|---|
committer | Rob Herring <rob.herring@calxeda.com> | 2012-01-04 11:10:19 -0500 |
commit | dece904d74800d109f1bb06b55758169b1bcc140 (patch) | |
tree | 7259eb75e351c26653a5160d458e1579f4d60c47 /drivers/gpio | |
parent | 5f0a6e2d503896062f641639dacfe5055c2f593b (diff) |
gpio: pl061: use chained_irq_* functions in irq handler
Use chained_irq_enter/exit helper functions instead of direct pointer
accesses. This is needed for generic irq chip conversion.
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
Cc: Linus Walleij <linus.ml.walleij@gmail.com>
Diffstat (limited to 'drivers/gpio')
-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) |