• Linus Walleij's avatar
    gpio: stmpe: fix interrupt handling bug · 1516c635
    Linus Walleij authored
    commit 43db289d ("gpio: stmpe: Rework registers access")
    reworked the STMPE register access so as to use
    [STMPE_IDX_*_LSB + i] to access the 8bit register for a
    certain bank, assuming the CSB and MSB will follow after
    the enumerator. For this to work the index needs to go from
    (size-1) to 0 not 0 to (size-1).
    
    However for the GPIO IRQ handler, the status registers we read
    register MSB + 3 bytes ahead for the 24 bit GPIOs and index
    registers from MSB upwards and run an index i over the
    registers UNLESS we are STMPE1600.
    
    This is not working when we get to clearing the interrupt
    EDGE status register STMPE_IDX_GPEDR_[LCM]SB: it is indexed
    like all other registers [STMPE_IDX_*_LSB + i] but in this
    loop we index from 0 to get the right bank index for the
    calculations, and we need to just add i to the MSB.
    
    Before this, interrupts on the STMPE2401 were broken, this
    patch fixes it so it works again.
    
    Cc: stable@vger.kernel.org
    Cc: Patrice Chotard <patrice.chotard@st.com>
    Fixes: 43db289d ("gpio: stmpe: Rework registers access")
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    1516c635
gpio-stmpe.c 13.6 KB