ramips: Fix for gpio falling interrupt mask
[openwrt/svn-archive/archive.git] / target / linux / ramips / patches-3.14 / 999-gpi_irq.patch
1 --- a/drivers/gpio/gpio-ralink.c
2 +++ b/drivers/gpio/gpio-ralink.c
3 @@ -148,14 +148,15 @@
4 {
5 struct ralink_gpio_chip *rg;
6 unsigned long flags;
7 - u32 val;
8 + u32 rise, fall;
9
10 rg = (struct ralink_gpio_chip *) d->domain->host_data;
11 - val = rt_gpio_r32(rg, GPIO_REG_RENA);
12 + rise = rt_gpio_r32(rg, GPIO_REG_RENA);
13 + fall = rt_gpio_r32(rg, GPIO_REG_FENA);
14
15 spin_lock_irqsave(&rg->lock, flags);
16 - rt_gpio_w32(rg, GPIO_REG_RENA, val | (BIT(d->hwirq) & rg->rising));
17 - rt_gpio_w32(rg, GPIO_REG_FENA, val | (BIT(d->hwirq) & rg->falling));
18 + rt_gpio_w32(rg, GPIO_REG_RENA, rise | (BIT(d->hwirq) & rg->rising));
19 + rt_gpio_w32(rg, GPIO_REG_FENA, fall | (BIT(d->hwirq) & rg->falling));
20 spin_unlock_irqrestore(&rg->lock, flags);
21 }
22
23 @@ -163,14 +164,15 @@
24 {
25 struct ralink_gpio_chip *rg;
26 unsigned long flags;
27 - u32 val;
28 + u32 rise, fall;
29
30 rg = (struct ralink_gpio_chip *) d->domain->host_data;
31 - val = rt_gpio_r32(rg, GPIO_REG_RENA);
32 + rise = rt_gpio_r32(rg, GPIO_REG_RENA);
33 + fall = rt_gpio_r32(rg, GPIO_REG_FENA);
34
35 spin_lock_irqsave(&rg->lock, flags);
36 - rt_gpio_w32(rg, GPIO_REG_FENA, val & ~BIT(d->hwirq));
37 - rt_gpio_w32(rg, GPIO_REG_RENA, val & ~BIT(d->hwirq));
38 + rt_gpio_w32(rg, GPIO_REG_FENA, fall & ~BIT(d->hwirq));
39 + rt_gpio_w32(rg, GPIO_REG_RENA, rise & ~BIT(d->hwirq));
40 spin_unlock_irqrestore(&rg->lock, flags);
41 }
42