aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-davinci
diff options
context:
space:
mode:
authorKevin Hilman <khilman@deeprootsystems.com>2009-05-11 14:04:53 -0400
committerKevin Hilman <khilman@deeprootsystems.com>2009-05-26 10:17:54 -0400
commitdc75602628472d7fbc4cb43f010bf0257e95ab71 (patch)
tree05632b60b16e7e3334ea5000620c8e8ece844a3c /arch/arm/mach-davinci
parentdf4aab46a8256ac0f0c2701b3fe23b7dd05e6b48 (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')
-rw-r--r--arch/arm/mach-davinci/gpio.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/arm/mach-davinci/gpio.c b/arch/arm/mach-davinci/gpio.c
index 34ba4ceda34..40327b557d7 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
48static 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}
162pure_initcall(davinci_gpio_setup); 164pure_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}
336arch_initcall(davinci_gpio_irq_setup);