aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/mach-common/ints-priority.c
diff options
context:
space:
mode:
authorMichael Hennerich <michael.hennerich@analog.com>2008-02-02 03:17:52 -0500
committerBryan Wu <bryan.wu@analog.com>2008-02-02 03:17:52 -0500
commitf1bceb47b3f385d765acac7fe582cb11034dd759 (patch)
tree90f5cb1400acd3913830e98dc04ed96191384eb9 /arch/blackfin/mach-common/ints-priority.c
parenta8c12385c203ca7fa1cd5af25f910c41f6e4a2b5 (diff)
[Blackfin] arch:Fix BUG [#3876] pfbutton test for BTN3 on bf533 don't show complete info
- Buttons on the BF533-STAMP board are not inverted - Fix spurious GPIO Interrupt caused during set irq_type for edge triggered interrupts Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Diffstat (limited to 'arch/blackfin/mach-common/ints-priority.c')
-rw-r--r--arch/blackfin/mach-common/ints-priority.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c
index 81d00183ae91..880595afe98d 100644
--- a/arch/blackfin/mach-common/ints-priority.c
+++ b/arch/blackfin/mach-common/ints-priority.c
@@ -430,16 +430,8 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
430 return 0; 430 return 0;
431 } 431 }
432 432
433 set_gpio_inen(gpionr, 0);
433 set_gpio_dir(gpionr, 0); 434 set_gpio_dir(gpionr, 0);
434 set_gpio_inen(gpionr, 1);
435
436 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
437 gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr);
438 set_gpio_edge(gpionr, 1);
439 } else {
440 set_gpio_edge(gpionr, 0);
441 gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
442 }
443 435
444 if ((type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) 436 if ((type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
445 == (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) 437 == (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
@@ -452,6 +444,18 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
452 else 444 else
453 set_gpio_polar(gpionr, 0); /* high or rising edge denoted by zero */ 445 set_gpio_polar(gpionr, 0); /* high or rising edge denoted by zero */
454 446
447 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
448 set_gpio_edge(gpionr, 1);
449 set_gpio_inen(gpionr, 1);
450 gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr);
451 set_gpio_data(gpionr, 0);
452
453 } else {
454 set_gpio_edge(gpionr, 0);
455 gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
456 set_gpio_inen(gpionr, 1);
457 }
458
455 SSYNC(); 459 SSYNC();
456 460
457 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) 461 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))