• Oswald Buddenhagen's avatar
    ALSA: emu10k1: move the whole GPIO event handling to the workqueue · f848337c
    Oswald Buddenhagen authored
    The actual event processing was already done by workqueue items. We can
    move the event dispatching there as well, rather than doing it already
    in the interrupt handler callback.
    
    This change has a rather profound "side effect" on the reliability of
    the FPGA programming: once we enter programming mode, we must not issue
    any snd_emu1010_fpga_{read,write}() calls until we're done, as these
    would badly mess up the programming protocol. But exactly that would
    happen when trying to program the dock, as that triggers GPIO interrupts
    as a side effect. This is mitigated by deferring the actual interrupt
    handling, as workqueue items are not re-entrant.
    
    To avoid scheduling the dispatcher on non-events, we now explicitly
    ignore GPIO IRQs triggered by "uninteresting" pins, which happens a lot
    as a side effect of calling snd_emu1010_fpga_{read,write}().
    
    Fixes: fbb64eed ("ALSA: emu10k1: make E-MU dock monitoring interrupt-driven")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=218584Signed-off-by: default avatarOswald Buddenhagen <oswald.buddenhagen@gmx.de>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Message-ID: <20240428093716.3198666-4-oswald.buddenhagen@gmx.de>
    f848337c
emu10k1.c 6.68 KB