aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.10/101-bcma-gpio-fix-irq-handling.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm47xx/patches-3.10/101-bcma-gpio-fix-irq-handling.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.10/101-bcma-gpio-fix-irq-handling.patch20
1 files changed, 20 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.10/101-bcma-gpio-fix-irq-handling.patch b/target/linux/brcm47xx/patches-3.10/101-bcma-gpio-fix-irq-handling.patch
new file mode 100644
index 0000000000..388eefa1f8
--- /dev/null
+++ b/target/linux/brcm47xx/patches-3.10/101-bcma-gpio-fix-irq-handling.patch
@@ -0,0 +1,20 @@
+--- a/drivers/bcma/driver_gpio.c
++++ b/drivers/bcma/driver_gpio.c
+@@ -91,7 +91,9 @@ static void bcma_gpio_irq_unmask(struct
+ {
+ struct bcma_drv_cc *cc = irq_data_get_irq_chip_data(d);
+ int gpio = irqd_to_hwirq(d);
++ u32 val = bcma_chipco_gpio_in(cc, BIT(gpio));
+
++ bcma_chipco_gpio_polarity(cc, BIT(gpio), val);
+ bcma_chipco_gpio_intmask(cc, BIT(gpio), BIT(gpio));
+ }
+
+@@ -156,6 +158,7 @@ static int bcma_gpio_irq_domain_init(str
+ if (err)
+ goto err_req_irq;
+
++ bcma_chipco_gpio_intmask(cc, ~0, 0);
+ bcma_cc_set32(cc, BCMA_CC_IRQMASK, BCMA_CC_IRQ_GPIO);
+
+ return 0;