ASoC: jz4740-i2s: Handle independent FIFO flush bits
authorAidan MacDonald <aidanmacdonald.0x0@gmail.com>
Sun, 23 Oct 2022 14:33:20 +0000 (15:33 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 26 Oct 2022 13:18:13 +0000 (14:18 +0100)
commit8b3a9ad86239f80ed569e23c3954a311f66481d6
treea95f1ddb4389b0a0639ba6e1ccb512be9094d851
parent2cfcc1085d3b7b7c893be41034853d4c63a41092
ASoC: jz4740-i2s: Handle independent FIFO flush bits

On the JZ4740, there is a single bit that flushes (empties) both
the transmit and receive FIFO. Later SoCs have independent flush
bits for each FIFO.

Independent FIFOs can be flushed before the snd_soc_dai_active()
check because it won't disturb other active streams. This ensures
that the FIFO we're about to use is always flushed before starting
up. With shared FIFOs we can't do that because if another substream
is active, flushing its FIFO would cause underrun errors.

This also fixes a bug: since we were only setting the JZ4740's
flush bit, which corresponds to the TX FIFO flush bit on other
SoCs, other SoCs were not having their RX FIFO flushed at all.

Fixes: 967beb2e8777 ("ASoC: jz4740: Add jz4780 support")
Reviewed-by: Paul Cercueil <paul@crapouillou.net>
Cc: stable@vger.kernel.org
Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@gmail.com>
Link: https://lore.kernel.org/r/20221023143328.160866-2-aidanmacdonald.0x0@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/jz4740/jz4740-i2s.c