# SPDX-License-Identifier: GPL-2.0-only
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.
