linux-sg2042/sound/soc/cirrus
Alexander Sverdlin 98e1241c35
ASoC: cirrus: i2s: IRQ-based stream watchdog
I2S controller on EP93xx seems to have undocumented HW issue. According to
"EP93xx User’s Guide", controller can handle underflow and either transmit
last sample or zeroes in such case until FIFO is filled again. In reality
undeflow conditions seem to confuse internal state machine from time to
time and the whole stream gets shifted by one byte (as captured by logic
analyser on the I2S outputs). One could only hear noise instead of original
stream and this continues until the FIFO is disabled and enabled again.

Work this around by watching underflow interrupt and resetting I2S TX
channel + fill FIFO with zero samples until DMA catches up again. This is
a nasty workaround, but it works. Hence, Kconfig option to disable it in
case of problems.

Signed-off-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
2018-05-11 11:27:33 +09:00
..
Kconfig ASoC: cirrus: i2s: IRQ-based stream watchdog 2018-05-11 11:27:33 +09:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
edb93xx.c ASoC: cirrus: i2s: Fix LRCLK configuration 2018-05-02 05:55:28 +09:00
ep93xx-ac97.c ASoC: ep93xx-ac97: Fix platform_get_irq's error checking 2017-12-01 13:04:51 +00:00
ep93xx-i2s.c ASoC: cirrus: i2s: IRQ-based stream watchdog 2018-05-11 11:27:33 +09:00
ep93xx-pcm.c ASoC: dmaengine_pcm: Make FLAG_NO_RESIDUE internal 2015-04-27 19:26:07 +01:00
ep93xx-pcm.h ASoC: ep93xx: get rid of ep93xx-pcm-audio struct device 2013-12-18 18:54:00 +00:00
simone.c ASoC: cirrus: drop owner assignment from platform_drivers 2014-10-20 16:22:05 +02:00
snappercl15.c ASoC: cirrus: i2s: Fix LRCLK configuration 2018-05-02 05:55:28 +09:00