gpio/omap: fix incorrect update to context.irqenable1
authorTarun Kanti DebBarma <tarun.kanti@ti.com>
Tue, 6 Mar 2012 06:38:16 +0000 (12:08 +0530)
committerTarun Kanti DebBarma <tarun.kanti@ti.com>
Wed, 21 Mar 2012 04:48:54 +0000 (10:18 +0530)
commit2a900eb74c123a21054836ab2c63d6ff46f854c6
tree1607c091f750be0704c00d7e6f0446087f8659cf
parent960edffe29dfd845ee532ee51398592cba96d701
gpio/omap: fix incorrect update to context.irqenable1

In _enable_gpio_irqbank() when bank->regs->set_irqenable is TRUE,
gpio_mask can be directly set by writing to set_irqenable register
without overwriting current value. In order to ensure the same is
stored in context.irqenable1, we must avoid overwriting it with
gpio_mask at the end of the function. Instead, update irqenable1
appropriately by OR'ing with gpio_mask.
For the case where bank->regs->set_irqenable is FALSE, irqenable1
can be directly overwritten with 'l' which holds correct computed
value.
        if (bank->regs->set_irqenable) {
                reg += bank->regs->set_irqenable;
                l = gpio_mask;
        } else {
                reg += bank->regs->irqenable;
                l = __raw_readl(reg);
                if (bank->regs->irqenable_inv)
                        l &= ~gpio_mask;
                else
                        l |= gpio_mask;
        }

Make similar change for _disable_gpio_irqbank().

Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>
Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
drivers/gpio/gpio-omap.c