summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2014-01-02 19:01:08 +0100
committerRalf Baechle <ralf@linux-mips.org>2014-01-24 22:39:52 +0100
commit978e55d2d83b6006fe0801877526ae240d41fd36 (patch)
tree01d030d1ecbd47c632d6c572d6ca99fc6c75e99b
parent17d97bad1ab966f1f39b10c48cd3f858a29b3659 (diff)
downloadlinux-978e55d2d83b6006fe0801877526ae240d41fd36.tar.gz
linux-978e55d2d83b6006fe0801877526ae240d41fd36.tar.bz2
linux-978e55d2d83b6006fe0801877526ae240d41fd36.zip
bcma: prevent irq handler from firing when registered
With this patch we prevent the irq from being fired when it is registered. The Hardware fires an IRQ when input signal XOR polarity AND gpio mask is 1. Now we are setting polarity to a vlaue so that is is 0 when we register it. In addition we also set the irq mask register to 0 when the irq handler is initialized, so all gpio irqs are masked and there will be no unexpected irq. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Tested-by: Rafał Miłecki <zajec5@gmail.com> Signed-off-by: John Crispin <blogic@openwrt.org> Patchwork: http://patchwork.linux-mips.org/patch/6304/
-rw-r--r--drivers/bcma/driver_gpio.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/bcma/driver_gpio.c b/drivers/bcma/driver_gpio.c
index 9d87b97341a3..040241979fcb 100644
--- a/drivers/bcma/driver_gpio.c
+++ b/drivers/bcma/driver_gpio.c
@@ -91,7 +91,9 @@ static void bcma_gpio_irq_unmask(struct irq_data *d)
{
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(struct bcma_drv_cc *cc)
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;