Title: [4206] branches/2008R1/arch/blackfin: Fix BUG [#3876] pfbutton test for BTN3 on bf533 don't show complete info
Revision
4206
Author
hennerich
Date
2008-02-01 03:48:37 -0600 (Fri, 01 Feb 2008)

Log Message

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  

Diffstat

 mach-bf533/boards/stamp.c   |    6 +++---
 mach-common/ints-priority.c |   22 +++++++++++++---------
 2 files changed, 16 insertions(+), 12 deletions(-)

Modified Paths

Diff

Modified: branches/2008R1/arch/blackfin/mach-bf533/boards/stamp.c (4205 => 4206)


--- branches/2008R1/arch/blackfin/mach-bf533/boards/stamp.c	2008-02-01 06:49:55 UTC (rev 4205)
+++ branches/2008R1/arch/blackfin/mach-bf533/boards/stamp.c	2008-02-01 09:48:37 UTC (rev 4206)
@@ -423,9 +423,9 @@
 #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 = {

Modified: branches/2008R1/arch/blackfin/mach-common/ints-priority.c (4205 => 4206)


--- branches/2008R1/arch/blackfin/mach-common/ints-priority.c	2008-02-01 06:49:55 UTC (rev 4205)
+++ branches/2008R1/arch/blackfin/mach-common/ints-priority.c	2008-02-01 09:48:37 UTC (rev 4206)
@@ -430,17 +430,9 @@
 		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))
 		set_gpio_both(gpionr, 1);
@@ -452,6 +444,18 @@
 	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))
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
http://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to