--- a/drivers/gpio/gpio-ralink.c +++ b/drivers/gpio/gpio-ralink.c @@ -148,14 +148,15 @@ { 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 @@ { 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); }