mirror of https://gitee.com/openkylin/linux.git
[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>
This commit is contained in:
parent
a8c12385c2
commit
f1bceb47b3
|
@ -423,9 +423,9 @@ static struct platform_device bfin_pata_device = {
|
|||
#include <linux/gpio_keys.h>
|
||||
|
||||
static struct gpio_keys_button bfin_gpio_keys_table[] = {
|
||||
{BTN_0, GPIO_PF5, 1, "gpio-keys: BTN0"},
|
||||
{BTN_1, GPIO_PF6, 1, "gpio-keys: BTN1"},
|
||||
{BTN_2, GPIO_PF8, 1, "gpio-keys: BTN2"},
|
||||
{BTN_0, GPIO_PF5, 0, "gpio-keys: BTN0"},
|
||||
{BTN_1, GPIO_PF6, 0, "gpio-keys: BTN1"},
|
||||
{BTN_2, GPIO_PF8, 0, "gpio-keys: BTN2"},
|
||||
};
|
||||
|
||||
static struct gpio_keys_platform_data bfin_gpio_keys_data = {
|
||||
|
|
|
@ -430,16 +430,8 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
|
|||
return 0;
|
||||
}
|
||||
|
||||
set_gpio_inen(gpionr, 0);
|
||||
set_gpio_dir(gpionr, 0);
|
||||
set_gpio_inen(gpionr, 1);
|
||||
|
||||
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr);
|
||||
set_gpio_edge(gpionr, 1);
|
||||
} else {
|
||||
set_gpio_edge(gpionr, 0);
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
|
||||
}
|
||||
|
||||
if ((type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
|
||||
== (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
|
||||
|
@ -452,6 +444,18 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
|
|||
else
|
||||
set_gpio_polar(gpionr, 0); /* high or rising edge denoted by zero */
|
||||
|
||||
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
|
||||
set_gpio_edge(gpionr, 1);
|
||||
set_gpio_inen(gpionr, 1);
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr);
|
||||
set_gpio_data(gpionr, 0);
|
||||
|
||||
} else {
|
||||
set_gpio_edge(gpionr, 0);
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
|
||||
set_gpio_inen(gpionr, 1);
|
||||
}
|
||||
|
||||
SSYNC();
|
||||
|
||||
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
|
||||
|
|
Loading…
Reference in New Issue