• Mark Brown's avatar
    Input: wm831x-ts - fix races with IRQ management · f5346668
    Mark Brown authored
    If the WM831x pen down and data IRQs run in parallel it is possible for the
    data and pen down IRQs to deadlock themselves as one is part way through
    disabling its operation while the other is part way through enabling. Fix
    this by always disabling the pen down interrupt while data is active and
    vice versa.  When a changeover is required we disable the IRQ that is to
    be stopped then schedule work that will enable the new IRQ.
    
    We need to handle the data flow in the data IRQ as the readback from the
    device needs to be ordered correctly with the IRQ for robust operation.
    
    This also fixes an issue when using the built in IRQs due to enable_irq()
    not being valid from interrupt context on an interrupt controller with bus
    operations like the built in IRQ controller - this issue may also have
    affected other interrupt controllers.  We can't rely on having the data
    and pen down IRQs available via GPIOs on the CPU on every system.
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
    f5346668
wm831x-ts.c 11.5 KB