]> git.baikalelectronics.ru Git - kernel.git/commit
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 7 Jan 2023 10:11:51 +0000 (11:11 +0100)
commit21a37cdb4a711abd16f90e82d9a304fba89af4fe
treec52f1546181e7042a7d04c68bcb39ffd007c101e
parentd5e5d237baa1b2da55572fe3fd0b75c66f7056c0
ASoC: jz4740-i2s: Handle independent FIFO flush bits

commit f5ac4a9ff875e9d3a8ebfd6326f7f375fab44a3a upstream.

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: 7578a80b9640 ("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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
sound/soc/jz4740/jz4740-i2s.c