diff options
author | Michael Hennerich <michael.hennerich@analog.com> | 2008-02-02 03:17:52 -0500 |
---|---|---|
committer | Bryan Wu <bryan.wu@analog.com> | 2008-02-02 03:17:52 -0500 |
commit | f1bceb47b3f385d765acac7fe582cb11034dd759 (patch) | |
tree | 90f5cb1400acd3913830e98dc04ed96191384eb9 /arch/blackfin/mach-common/ints-priority.c | |
parent | a8c12385c203ca7fa1cd5af25f910c41f6e4a2b5 (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.c | 22 |
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)) |