diff options
| author | Marek Szyprowski <m.szyprowski@samsung.com> | 2011-08-12 23:55:36 -0400 |
|---|---|---|
| committer | Kukjin Kim <kgene.kim@samsung.com> | 2011-08-19 07:57:38 -0400 |
| commit | 3f6065dd9d2c947c8d68336f07bd721d3909a30d (patch) | |
| tree | 248a3ccfa6f785cc08f1c4cf5ab9fcc891f0c125 | |
| parent | 70b0e82bc7d03d33de5bceea92d419a9be4340ee (diff) | |
ARM: S5P: add required chained_irq_enter/exit to gpio-int code
This patch adds chained IRQ enter/exit functions to gpio interrupt
handler in order to function correctly on primary controllers with
different methods of flow control.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
| -rw-r--r-- | arch/arm/plat-s5p/irq-gpioint.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm/plat-s5p/irq-gpioint.c b/arch/arm/plat-s5p/irq-gpioint.c index 327ab9f662e8..f71078ef6bb5 100644 --- a/arch/arm/plat-s5p/irq-gpioint.c +++ b/arch/arm/plat-s5p/irq-gpioint.c | |||
| @@ -23,6 +23,8 @@ | |||
| 23 | #include <plat/gpio-core.h> | 23 | #include <plat/gpio-core.h> |
| 24 | #include <plat/gpio-cfg.h> | 24 | #include <plat/gpio-cfg.h> |
| 25 | 25 | ||
| 26 | #include <asm/mach/irq.h> | ||
| 27 | |||
| 26 | #define GPIO_BASE(chip) (((unsigned long)(chip)->base) & 0xFFFFF000u) | 28 | #define GPIO_BASE(chip) (((unsigned long)(chip)->base) & 0xFFFFF000u) |
| 27 | 29 | ||
| 28 | #define CON_OFFSET 0x700 | 30 | #define CON_OFFSET 0x700 |
| @@ -81,6 +83,9 @@ static void s5p_gpioint_handler(unsigned int irq, struct irq_desc *desc) | |||
| 81 | int group, pend_offset, mask_offset; | 83 | int group, pend_offset, mask_offset; |
| 82 | unsigned int pend, mask; | 84 | unsigned int pend, mask; |
| 83 | 85 | ||
| 86 | struct irq_chip *chip = irq_get_chip(irq); | ||
| 87 | chained_irq_enter(chip, desc); | ||
| 88 | |||
| 84 | for (group = 0; group < bank->nr_groups; group++) { | 89 | for (group = 0; group < bank->nr_groups; group++) { |
| 85 | struct s3c_gpio_chip *chip = bank->chips[group]; | 90 | struct s3c_gpio_chip *chip = bank->chips[group]; |
| 86 | if (!chip) | 91 | if (!chip) |
| @@ -102,6 +107,7 @@ static void s5p_gpioint_handler(unsigned int irq, struct irq_desc *desc) | |||
| 102 | pend &= ~BIT(offset); | 107 | pend &= ~BIT(offset); |
| 103 | } | 108 | } |
| 104 | } | 109 | } |
| 110 | chained_irq_exit(chip, desc); | ||
| 105 | } | 111 | } |
| 106 | 112 | ||
| 107 | static __init int s5p_gpioint_add(struct s3c_gpio_chip *chip) | 113 | static __init int s5p_gpioint_add(struct s3c_gpio_chip *chip) |
