Commit 978e55d2 authored by Hauke Mehrtens's avatar Hauke Mehrtens Committed by Ralf Baechle

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: default avatarHauke Mehrtens <hauke@hauke-m.de>
Tested-by: default avatarRafał Miłecki <zajec5@gmail.com>
Signed-off-by: default avatarJohn Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/6304/
parent 17d97bad
...@@ -91,7 +91,9 @@ static void bcma_gpio_irq_unmask(struct irq_data *d) ...@@ -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); struct bcma_drv_cc *cc = irq_data_get_irq_chip_data(d);
int gpio = irqd_to_hwirq(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)); 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) ...@@ -156,6 +158,7 @@ static int bcma_gpio_irq_domain_init(struct bcma_drv_cc *cc)
if (err) if (err)
goto err_req_irq; goto err_req_irq;
bcma_chipco_gpio_intmask(cc, ~0, 0);
bcma_cc_set32(cc, BCMA_CC_IRQMASK, BCMA_CC_IRQ_GPIO); bcma_cc_set32(cc, BCMA_CC_IRQMASK, BCMA_CC_IRQ_GPIO);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment