[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>

authored by Michael Hennerich and committed by Bryan Wu f1bceb47 a8c12385

+16 -12
+3 -3
arch/blackfin/mach-bf533/boards/stamp.c
··· 423 423 #include <linux/gpio_keys.h> 424 424 425 425 static struct gpio_keys_button bfin_gpio_keys_table[] = { 426 - {BTN_0, GPIO_PF5, 1, "gpio-keys: BTN0"}, 427 - {BTN_1, GPIO_PF6, 1, "gpio-keys: BTN1"}, 428 - {BTN_2, GPIO_PF8, 1, "gpio-keys: BTN2"}, 426 + {BTN_0, GPIO_PF5, 0, "gpio-keys: BTN0"}, 427 + {BTN_1, GPIO_PF6, 0, "gpio-keys: BTN1"}, 428 + {BTN_2, GPIO_PF8, 0, "gpio-keys: BTN2"}, 429 429 }; 430 430 431 431 static struct gpio_keys_platform_data bfin_gpio_keys_data = {
+13 -9
arch/blackfin/mach-common/ints-priority.c
··· 430 430 return 0; 431 431 } 432 432 433 + set_gpio_inen(gpionr, 0); 433 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 436 if ((type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) 445 437 == (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) ··· 443 451 set_gpio_polar(gpionr, 1); /* low or falling edge denoted by one */ 444 452 else 445 453 set_gpio_polar(gpionr, 0); /* high or rising edge denoted by zero */ 454 + 455 + if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { 456 + set_gpio_edge(gpionr, 1); 457 + set_gpio_inen(gpionr, 1); 458 + gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr); 459 + set_gpio_data(gpionr, 0); 460 + 461 + } else { 462 + set_gpio_edge(gpionr, 0); 463 + gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr); 464 + set_gpio_inen(gpionr, 1); 465 + } 446 466 447 467 SSYNC(); 448 468