forked from Minki/linux
98e1241c35
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>
61 lines
2.0 KiB
Plaintext
61 lines
2.0 KiB
Plaintext
config SND_EP93XX_SOC
|
|
tristate "SoC Audio support for the Cirrus Logic EP93xx series"
|
|
depends on ARCH_EP93XX || COMPILE_TEST
|
|
select SND_SOC_GENERIC_DMAENGINE_PCM
|
|
help
|
|
Say Y or M if you want to add support for codecs attached to
|
|
the EP93xx I2S or AC97 interfaces.
|
|
|
|
config SND_EP93XX_SOC_I2S
|
|
tristate
|
|
|
|
if SND_EP93XX_SOC_I2S
|
|
|
|
config SND_EP93XX_SOC_I2S_WATCHDOG
|
|
bool "IRQ based underflow watchdog workaround"
|
|
default y
|
|
help
|
|
I2S controller on EP93xx seems to have undocumented HW issue.
|
|
Underflow of internal I2S controller FIFO could confuse the
|
|
state machine and the whole stream can be shifted by one byte
|
|
until I2S is disabled. This option enables IRQ based watchdog
|
|
which disables and re-enables I2S in case of underflow and
|
|
fills FIFO with zeroes.
|
|
|
|
If you are unsure how to answer this question, answer Y.
|
|
|
|
endif # if SND_EP93XX_SOC_I2S
|
|
|
|
config SND_EP93XX_SOC_AC97
|
|
tristate
|
|
select AC97_BUS
|
|
select SND_SOC_AC97_BUS
|
|
|
|
config SND_EP93XX_SOC_SNAPPERCL15
|
|
tristate "SoC Audio support for Bluewater Systems Snapper CL15 module"
|
|
depends on SND_EP93XX_SOC && MACH_SNAPPER_CL15 && I2C
|
|
select SND_EP93XX_SOC_I2S
|
|
select SND_SOC_TLV320AIC23_I2C
|
|
help
|
|
Say Y or M here if you want to add support for I2S audio on the
|
|
Bluewater Systems Snapper CL15 module.
|
|
|
|
config SND_EP93XX_SOC_SIMONE
|
|
tristate "SoC Audio support for Simplemachines Sim.One board"
|
|
depends on SND_EP93XX_SOC && MACH_SIM_ONE
|
|
select SND_EP93XX_SOC_AC97
|
|
select SND_SOC_AC97_CODEC
|
|
help
|
|
Say Y or M here if you want to add support for AC97 audio on the
|
|
Simplemachines Sim.One board.
|
|
|
|
config SND_EP93XX_SOC_EDB93XX
|
|
tristate "SoC Audio support for Cirrus Logic EDB93xx boards"
|
|
depends on SND_EP93XX_SOC && (MACH_EDB9301 || MACH_EDB9302 || MACH_EDB9302A || MACH_EDB9307A || MACH_EDB9315A)
|
|
select SND_EP93XX_SOC_I2S
|
|
select SND_SOC_CS4271_I2C if I2C
|
|
select SND_SOC_CS4271_SPI if SPI_MASTER
|
|
help
|
|
Say Y or M here if you want to add support for I2S audio on the
|
|
Cirrus Logic EDB93xx boards.
|