• Tarun Kanti DebBarma's avatar
    gpio/omap: fix incorrect update to context.irqenable1 · 2a900eb7
    Tarun Kanti DebBarma authored
    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: default avatarTarun Kanti DebBarma <tarun.kanti@ti.com>
    Reviewed-by: default avatarSantosh Shilimkar <santosh.shilimkar@ti.com>
    Reviewed-by: default avatarKevin Hilman <khilman@ti.com>
    Signed-off-by: default avatarKevin Hilman <khilman@ti.com>
    2a900eb7
gpio-omap.c 40.2 KB