# SPDX-License-Identifier: GPL-2.0-only
config SND_PXA2XX_SOC
	tristate "SoC Audio for the Intel PXA2xx chip"
	depends on ARCH_PXA || COMPILE_TEST
	select SND_PXA2XX_LIB
	help
	  Say Y or M if you want to add support for codecs attached to
	  the PXA2xx AC97, I2S or SSP interface. You will also need
	  to select the audio interfaces to support below.

config SND_MMP_SOC
	bool
	select MMP_SRAM

config SND_PXA2XX_AC97
	tristate

config SND_PXA2XX_SOC_AC97
	tristate
	select AC97_BUS_NEW
	select SND_PXA2XX_LIB
	select SND_PXA2XX_LIB_AC97
	select SND_SOC_AC97_BUS_NEW

config SND_PXA2XX_SOC_I2S
	select SND_PXA2XX_LIB
	tristate

config SND_PXA_SOC_SSP
	tristate "Soc Audio via PXA2xx/PXA3xx SSP ports"
	depends on PLAT_PXA
	select PXA_SSP
	select SND_PXA2XX_LIB

config SND_MMP_SOC_SSPA
	tristate "SoC Audio via MMP SSPA ports"
	depends on ARCH_MMP
	select SND_SOC_GENERIC_DMAENGINE_PCM
	select SND_ARM
	help
	  Say Y if you want to add support for codecs attached to
	  the MMP SSPA interface.

config SND_PXA2XX_SOC_CORGI
	tristate "SoC Audio support for Sharp Zaurus SL-C7x0"
	depends on SND_PXA2XX_SOC && PXA_SHARP_C7xx && I2C
	select SND_PXA2XX_SOC_I2S
	select SND_SOC_WM8731_I2C
	help
	  Say Y if you want to add support for SoC audio on Sharp
	  Zaurus SL-C7x0 models (Corgi, Shepherd, Husky).

config SND_PXA2XX_SOC_SPITZ
	tristate "SoC Audio support for Sharp Zaurus SL-Cxx00"
	depends on SND_PXA2XX_SOC && PXA_SHARP_Cxx00 && I2C
	select SND_PXA2XX_SOC_I2S
	select SND_SOC_WM8750
	help
	  Say Y if you want to add support for SoC audio on Sharp
	  Zaurus SL-Cxx00 models (Spitz, Borzoi and Akita).

config SND_PXA2XX_SOC_Z2
	tristate "SoC Audio support for Zipit Z2"
	depends on SND_PXA2XX_SOC && MACH_ZIPIT2 && I2C
	select SND_PXA2XX_SOC_I2S
	select SND_SOC_WM8750
	help
	  Say Y if you want to add support for SoC audio on Zipit Z2.

config SND_PXA2XX_SOC_POODLE
	tristate "SoC Audio support for Poodle"
	depends on SND_PXA2XX_SOC && MACH_POODLE && I2C
	select SND_PXA2XX_SOC_I2S
	select SND_SOC_WM8731_I2C
	help
	  Say Y if you want to add support for SoC audio on Sharp
	  Zaurus SL-5600 model (Poodle).

config SND_PXA2XX_SOC_TOSA
	tristate "SoC AC97 Audio support for Tosa"
	depends on SND_PXA2XX_SOC && MACH_TOSA
	depends on MFD_TC6393XB
	depends on AC97_BUS=n
	select REGMAP
	select AC97_BUS_NEW
	select AC97_BUS_COMPAT
	select SND_PXA2XX_SOC_AC97
	select SND_SOC_WM9712
	help
	  Say Y if you want to add support for SoC audio on Sharp
	  Zaurus SL-C6000x models (Tosa).

config SND_PXA2XX_SOC_E740
	tristate "SoC AC97 Audio support for e740"
	depends on SND_PXA2XX_SOC && MACH_E740
	depends on AC97_BUS=n
	select REGMAP
	select AC97_BUS_NEW
	select AC97_BUS_COMPAT
	select SND_SOC_WM9705
	select SND_PXA2XX_SOC_AC97
	help
	  Say Y if you want to add support for SoC audio on the
	  toshiba e740 PDA

config SND_PXA2XX_SOC_E750
	tristate "SoC AC97 Audio support for e750"
	depends on SND_PXA2XX_SOC && MACH_E750
	depends on AC97_BUS=n
	select REGMAP
	select SND_SOC_WM9705
	select SND_PXA2XX_SOC_AC97
	help
	  Say Y if you want to add support for SoC audio on the
	  toshiba e750 PDA

config SND_PXA2XX_SOC_E800
	tristate "SoC AC97 Audio support for e800"
	depends on SND_PXA2XX_SOC && MACH_E800
	depends on AC97_BUS=n
	select REGMAP
	select SND_SOC_WM9712
	select AC97_BUS_NEW
	select AC97_BUS_COMPAT
	select SND_PXA2XX_SOC_AC97
	help
	  Say Y if you want to add support for SoC audio on the
	  Toshiba e800 PDA

config SND_PXA2XX_SOC_EM_X270
	tristate "SoC Audio support for CompuLab CM-X300"
	depends on SND_PXA2XX_SOC && MACH_CM_X300
	depends on AC97_BUS=n
	select REGMAP
	select AC97_BUS_NEW
	select AC97_BUS_COMPAT
	select SND_PXA2XX_SOC_AC97
	select SND_SOC_WM9712
	help
	  Say Y if you want to add support for SoC audio on
	  CompuLab EM-x270, eXeda and CM-X300 machines.

config SND_PXA2XX_SOC_PALM27X
	bool "SoC Audio support for Palm T|X, T5, E2 and LifeDrive"
	depends on SND_PXA2XX_SOC && (MACH_PALMLD || MACH_PALMTX || \
			MACH_PALMT5 || MACH_PALMTE2)
	depends on AC97_BUS=n
	select REGMAP
	select AC97_BUS_NEW
	select AC97_BUS_COMPAT
	select SND_PXA2XX_SOC_AC97
	select SND_SOC_WM9712
	help
	  Say Y if you want to add support for SoC audio on
	  Palm T|X, T5, E2 or LifeDrive handheld computer.

config SND_PXA910_SOC
	tristate "SoC Audio for Marvell PXA910 chip"
	depends on ARCH_MMP && SND
	select SND_PCM
	help
	  Say Y if you want to add support for SoC audio on the
	  Marvell PXA910 reference platform.

config SND_SOC_TTC_DKB
	tristate "SoC Audio support for TTC DKB"
	depends on SND_PXA910_SOC && MACH_TTC_DKB && I2C=y
	select PXA_SSP
	select SND_PXA_SOC_SSP
	select SND_MMP_SOC
	select MFD_88PM860X
	select SND_SOC_88PM860X
	help
	  Say Y if you want to add support for SoC audio on TTC DKB


config SND_SOC_ZYLONITE
	tristate "SoC Audio support for Marvell Zylonite"
	depends on SND_PXA2XX_SOC && MACH_ZYLONITE
	depends on AC97_BUS=n
	select AC97_BUS_NEW
	select AC97_BUS_COMPAT
	select SND_PXA2XX_SOC_AC97
	select REGMAP
	select SND_PXA_SOC_SSP
	select SND_SOC_WM9713
	help
	  Say Y if you want to add support for SoC audio on the
	  Marvell Zylonite reference platform.

config SND_PXA2XX_SOC_HX4700
	tristate "SoC Audio support for HP iPAQ hx4700"
	depends on SND_PXA2XX_SOC && MACH_H4700 && I2C
	select SND_PXA2XX_SOC_I2S
	select SND_SOC_AK4641
	help
	  Say Y if you want to add support for SoC audio on the
	  HP iPAQ hx4700.

config SND_PXA2XX_SOC_MAGICIAN
	tristate "SoC Audio support for HTC Magician"
	depends on SND_PXA2XX_SOC && MACH_MAGICIAN && I2C
	select SND_PXA2XX_SOC_I2S
	select SND_PXA_SOC_SSP
	select SND_SOC_UDA1380
	help
	  Say Y if you want to add support for SoC audio on the
	  HTC Magician.

config SND_PXA2XX_SOC_MIOA701
	tristate "SoC Audio support for MIO A701"
	depends on SND_PXA2XX_SOC && MACH_MIOA701
	depends on AC97_BUS=n
	select REGMAP
	select AC97_BUS_NEW
	select AC97_BUS_COMPAT
	select SND_PXA2XX_SOC_AC97
	select SND_SOC_WM9713
	help
	  Say Y if you want to add support for SoC audio on the
	  MIO A701.

config SND_MMP_SOC_BROWNSTONE
	tristate "SoC Audio support for Marvell Brownstone"
	depends on SND_MMP_SOC_SSPA && MACH_BROWNSTONE && I2C
	select SND_MMP_SOC
	select MFD_WM8994
	select SND_SOC_WM8994
	help
	  Say Y if you want to add support for SoC audio on the
	  Marvell Brownstone reference platform.
