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