• Jerome Brunet's avatar
    ASoC: meson: axg-fifo: use threaded irq to check periods · b11d2666
    Jerome Brunet authored
    With the AXG audio subsystem, there is a possible random channel shift on
    TDM capture, when the slot number per lane is more than 2, and there is
    more than one lane used.
    
    The problem has been there since the introduction of the axg audio support
    but such scenario is pretty uncommon. This is why there is no loud
    complains about the problem.
    
    Solving the problem require to make the links non-atomic and use the
    trigger() callback to start FEs and BEs in the appropriate order.
    
    This was tried in the past and reverted because it caused the block irq to
    sleep while atomic. However, instead of reverting, the solution is to call
    snd_pcm_period_elapsed() in a non atomic context.
    
    Use the bottom half of a threaded IRQ to do so.
    
    Fixes: 6dc4fa17 ("ASoC: meson: add axg fifo base driver")
    Signed-off-by: default avatarJerome Brunet <jbrunet@baylibre.com>
    Link: https://lore.kernel.org/r/20240426152946.3078805-2-jbrunet@baylibre.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    b11d2666
axg-fifo.c 10.2 KB