diff options
author | Kevin Hilman <khilman@deeprootsystems.com> | 2009-05-11 14:04:53 -0400 |
---|---|---|
committer | Kevin Hilman <khilman@deeprootsystems.com> | 2009-05-26 10:17:54 -0400 |
commit | dc75602628472d7fbc4cb43f010bf0257e95ab71 (patch) | |
tree | 05632b60b16e7e3334ea5000620c8e8ece844a3c /arch/arm/mach-davinci/gpio.c | |
parent | df4aab46a8256ac0f0c2701b3fe23b7dd05e6b48 (diff) |
davinci: fixups for banked GPIO interrupt handling
This patch seems to get me much more reliable performance using the
GPIO banked interrupts on dm355 for the dm9000 driver.
Changes include:
- init GPIO handling along with normal GPIO init
- mask the level-sensitive bank IRQ during handling
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-davinci/gpio.c')
-rw-r--r-- | arch/arm/mach-davinci/gpio.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/arm/mach-davinci/gpio.c b/arch/arm/mach-davinci/gpio.c index 34ba4ceda347..40327b557d79 100644 --- a/arch/arm/mach-davinci/gpio.c +++ b/arch/arm/mach-davinci/gpio.c | |||
@@ -45,6 +45,7 @@ static struct gpio_controller __iomem * __init gpio2controller(unsigned gpio) | |||
45 | return __gpio_to_controller(gpio); | 45 | return __gpio_to_controller(gpio); |
46 | } | 46 | } |
47 | 47 | ||
48 | static int __init davinci_gpio_irq_setup(void); | ||
48 | 49 | ||
49 | /*--------------------------------------------------------------------------*/ | 50 | /*--------------------------------------------------------------------------*/ |
50 | 51 | ||
@@ -157,6 +158,7 @@ static int __init davinci_gpio_setup(void) | |||
157 | gpiochip_add(&chips[i].chip); | 158 | gpiochip_add(&chips[i].chip); |
158 | } | 159 | } |
159 | 160 | ||
161 | davinci_gpio_irq_setup(); | ||
160 | return 0; | 162 | return 0; |
161 | } | 163 | } |
162 | pure_initcall(davinci_gpio_setup); | 164 | pure_initcall(davinci_gpio_setup); |
@@ -238,6 +240,7 @@ gpio_irq_handler(unsigned irq, struct irq_desc *desc) | |||
238 | mask <<= 16; | 240 | mask <<= 16; |
239 | 241 | ||
240 | /* temporarily mask (level sensitive) parent IRQ */ | 242 | /* temporarily mask (level sensitive) parent IRQ */ |
243 | desc->chip->mask(irq); | ||
241 | desc->chip->ack(irq); | 244 | desc->chip->ack(irq); |
242 | while (1) { | 245 | while (1) { |
243 | u32 status; | 246 | u32 status; |
@@ -333,4 +336,3 @@ static int __init davinci_gpio_irq_setup(void) | |||
333 | 336 | ||
334 | return 0; | 337 | return 0; |
335 | } | 338 | } |
336 | arch_initcall(davinci_gpio_irq_setup); | ||