# SPDX-License-Identifier: GPL-2.0-only
menuconfig SND_SOC_INTEL_MACH
	bool "Intel Machine drivers"
	depends on SND_SOC_INTEL_SST_TOPLEVEL || SND_SOC_SOF_INTEL_TOPLEVEL
	help
	 Intel ASoC Machine Drivers. If you have a Intel machine that
	 has an audio controller with a DSP and I2S or DMIC port, then
	 enable this option by saying Y

	 Note that the answer to this question doesn't directly affect the
	 kernel: saying N will just cause the configurator to skip all
	 the questions about Intel ASoC machine drivers.

if SND_SOC_INTEL_MACH

config SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES
	bool "Use more user friendly long card names"
	help
	  Some drivers report the I/O configuration to userspace through the
	  soundcard's long card name in the control user space AP. An unfortunate
	  side effect is that this long name may also be used by the GUI,
	  confusing users with information they don't need.
	  This option prevents the long name from being modified, and the I/O
	  configuration will be provided through a different component interface.
	  Select Y if userspace like UCM (Use Case Manager) uses the component
	  interface.
	  If unsure select N.

config SND_SOC_INTEL_HDA_DSP_COMMON
	tristate

config SND_SOC_INTEL_SOF_MAXIM_COMMON
	tristate

config SND_SOC_INTEL_SOF_REALTEK_COMMON
	tristate

config SND_SOC_INTEL_SOF_CIRRUS_COMMON
	tristate

config SND_SOC_INTEL_SOF_NUVOTON_COMMON
	tristate

config SND_SOC_INTEL_SOF_BOARD_HELPERS
	tristate

if SND_SOC_INTEL_CATPT

config SND_SOC_INTEL_HASWELL_MACH
	tristate "Haswell with RT5640 I2S codec"
	depends on I2C
	depends on I2C_DESIGNWARE_PLATFORM || COMPILE_TEST
	depends on X86_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_RT5640
	help
	  This adds support for the Lynxpoint Audio DSP on Intel(R) Haswell
	  Ultrabook platforms. This is a recommended option.
	  Say Y or m if you have such a device.
	  If unsure select "N".

endif ## SND_SOC_INTEL_CATPT

if SND_SOC_INTEL_CATPT || SND_SOC_SOF_BROADWELL

config SND_SOC_INTEL_BDW_RT5650_MACH
	tristate "Broadwell with RT5650 codec"
	depends on I2C
	depends on I2C_DESIGNWARE_PLATFORM || COMPILE_TEST
	depends on X86_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_RT5645
	help
	  This adds the ASoC machine driver for Intel Broadwell platforms with
	  the RT5650 codec.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_INTEL_BDW_RT5677_MACH
	tristate "Broadwell with RT5677 codec"
	depends on I2C
	depends on I2C_DESIGNWARE_PLATFORM || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	depends on X86_INTEL_LPSS || COMPILE_TEST
	depends on SPI_MASTER
	select SPI_PXA2XX
	select SND_SOC_RT5677_SPI
	select SND_SOC_RT5677
	help
	  This adds support for Intel Broadwell platform based boards with
	  the RT5677 audio codec. This is a recommended option.
	  Say Y or m if you have such a device.
	  If unsure select "N".

config SND_SOC_INTEL_BROADWELL_MACH
	tristate "Broadwell with RT286 I2S codec"
	depends on I2C
	depends on I2C_DESIGNWARE_PLATFORM || COMPILE_TEST
	depends on X86_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_RT286
	help
	  This adds support for the Wilcatpoint Audio DSP on Intel(R) Broadwell
	  Ultrabook platforms.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".
endif ## SND_SOC_INTEL_CATPT || SND_SOC_SOF_BROADWELL

if SND_SST_ATOM_HIFI2_PLATFORM || SND_SOC_SOF_BAYTRAIL

config SND_SOC_INTEL_BYTCR_RT5640_MACH
	tristate "Baytrail and Baytrail-CR with RT5640 codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	select SND_SOC_ACPI
	select SND_SOC_RT5640
	help
	  This adds support for ASoC machine driver for Intel(R) Baytrail and Baytrail-CR
	  platforms with RT5640 audio codec.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_BYTCR_RT5651_MACH
	tristate "Baytrail and Baytrail-CR with RT5651 codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	select SND_SOC_ACPI
	select SND_SOC_RT5651
	help
	  This adds support for ASoC machine driver for Intel(R) Baytrail and Baytrail-CR
	  platforms with RT5651 audio codec.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_BYTCR_WM5102_MACH
	tristate "Baytrail and Baytrail-CR with WM5102 codec"
	depends on MFD_ARIZONA && MFD_WM5102 && SPI_MASTER && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	select SND_SOC_ACPI
	select SND_SOC_WM5102
	help
	  This adds support for ASoC machine driver for Intel(R) Baytrail and Baytrail-CR
	  platforms with WM5102 audio codec.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
	tristate "Cherrytrail & Braswell with RT5672 codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	select SND_SOC_ACPI
	select SND_SOC_RT5670
	help
	  This adds support for ASoC machine driver for Intel(R) Cherrytrail & Braswell
	  platforms with RT5672 audio codec.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_CHT_BSW_RT5645_MACH
	tristate "Cherrytrail & Braswell with RT5645/5650 codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_ACPI
	select SND_SOC_RT5645
	help
	  This adds support for ASoC machine driver for Intel(R) Cherrytrail & Braswell
	  platforms with RT5645/5650 audio codec.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH
	tristate "Cherrytrail & Braswell with MAX98090 & TI codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	select SND_SOC_MAX98090
	select SND_SOC_TS3A227E
	help
	  This adds support for ASoC machine driver for Intel(R) Cherrytrail & Braswell
	  platforms with MAX98090 audio codec it also can support TI jack chip as aux device.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_CHT_BSW_NAU8824_MACH
	tristate "Cherrytrail & Braswell with NAU88L24 codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_ACPI
	select SND_SOC_NAU8824
	help
	  This adds support for ASoC machine driver for Intel(R) Cherrytrail & Braswell
	  platforms with NAU88L24 audio codec.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_BYT_CHT_CX2072X_MACH
	tristate "Baytrail & Cherrytrail with CX2072X codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	select SND_SOC_ACPI
	select SND_SOC_CX2072X
	help
	  This adds support for ASoC machine driver for Intel(R) Baytrail &
	  Cherrytrail platforms with Conexant CX2072X audio codec.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_BYT_CHT_DA7213_MACH
	tristate "Baytrail & Cherrytrail with DA7212/7213 codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_ACPI
	select SND_SOC_DA7213
	help
	  This adds support for ASoC machine driver for Intel(R) Baytrail & CherryTrail
	  platforms with DA7212/7213 audio codec.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_BYT_CHT_ES8316_MACH
	tristate "Baytrail & Cherrytrail with ES8316 codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	select SND_SOC_ACPI
	select SND_SOC_ES8316
	select SND_SOC_ES83XX_DSM_COMMON
	help
	  This adds support for ASoC machine driver for Intel(R) Baytrail &
	  Cherrytrail platforms with ES8316 audio codec.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

endif ## SND_SST_ATOM_HIFI2_PLATFORM || SND_SOC_SOF_BAYTRAIL

if SND_SST_ATOM_HIFI2_PLATFORM

config SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH
	tristate "Baytrail & Cherrytrail platform with no codec (MinnowBoard MAX, Up)"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || COMPILE_TEST
	help
	  This adds support for ASoC machine driver for the MinnowBoard Max or
	  Up boards and provides access to I2S signals on the Low-Speed
	  connector. This is not a recommended option outside of these cases.
	  It is not intended to be enabled by distros by default.
	  Say Y or m if you have such a device.

	  If unsure select "N".

endif ## SND_SST_ATOM_HIFI2_PLATFORM

config SND_SOC_INTEL_DA7219_MAX98357A_GENERIC
	tristate
	select SND_SOC_DA7219
	select SND_SOC_MAX98357A
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON

if SND_SOC_SOF_APOLLOLAKE

config SND_SOC_INTEL_SOF_WM8804_MACH
	tristate "SOF with Wolfson/Cirrus WM8804 codec"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	select SND_SOC_WM8804_I2C
	help
	  This adds support for ASoC machine driver for Intel platforms
	  with the Wolfson/Cirrus WM8804 I2S audio codec.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

endif ## SND_SOC_SOF_APOLLOLAKE

if SND_SOC_SOF_GEMINILAKE

config SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH
	tristate "GLK with DA7219 and MAX98357A in I2S Mode"
	imply SND_SOC_INTEL_SOF_DA7219_MACH
	help
	   This adds support for ASoC machine driver for Geminilake platforms
	   with DA7219 + MAX98357A I2S audio codec. This option is deprecated
	   and please use SND_SOC_INTEL_SOF_DA7219_MACH instead.
	   Say Y or m if you have such a device. This is a recommended option.
	   If unsure select "N".

config SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH
	tristate "GLK with RT5682 and MAX98357A in I2S Mode"
	imply SND_SOC_INTEL_SOF_RT5682_MACH
	help
	   This adds support for ASoC machine driver for Geminilake platforms
	   with RT5682 + MAX98357A I2S audio codec. This option is deprecated
	   and please use SND_SOC_INTEL_SOF_RT5682_MACH instead.
	   Say Y if you have such a device.
	   If unsure select "N".

endif ## SND_SOC_SOF_GEMINILAKE

if SND_SOC_SOF_HDA_AUDIO_CODEC

config SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH
	tristate "Skylake+ with HDA Codecs"
	depends on SND_HDA_CODEC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_BOARD_HELPERS
	select SND_SOC_DMIC
	# SND_SOC_HDAC_HDA is already selected
	help
	  This adds support for ASoC machine driver for Intel Skylake+
	  platforms with display (HDMI/DP) and HDA audio codecs, and
	  Smart Sound Technology (SST) integrated audio DSP.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

endif ## SND_SOC_SOF_HDA_AUDIO_CODEC

if SND_SOC_SOF_HDA_LINK || SND_SOC_SOF_BAYTRAIL
config SND_SOC_INTEL_SOF_RT5682_MACH
	tristate "SOF with rt5650/rt5682 codec in I2S Mode"
	depends on I2C && ACPI
	depends on ((SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC) &&\
		    (MFD_INTEL_LPSS || COMPILE_TEST)) ||\
		   (SND_SOC_SOF_BAYTRAIL && (X86_INTEL_LPSS || COMPILE_TEST))
	select SND_SOC_MAX98357A
	select SND_SOC_MAX98373_I2C
	select SND_SOC_MAX98390
	select SND_SOC_RT1011
	select SND_SOC_RT1015
	select SND_SOC_RT1015P
	select SND_SOC_RT5645
	select SND_SOC_RT5682_I2C
	select SND_SOC_RT5682S
	select SND_SOC_DMIC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_BOARD_HELPERS
	select SND_SOC_INTEL_SOF_MAXIM_COMMON
	select SND_SOC_INTEL_SOF_REALTEK_COMMON
	select SND_SOC_ACPI_INTEL_MATCH
	help
	   This adds support for ASoC machine driver for SOF platforms
	   with rt5650 or rt5682 codec.
	   Say Y if you have such a device.
	   If unsure select "N".

config SND_SOC_INTEL_SOF_CS42L42_MACH
	tristate "SOF with cs42l42 codec in I2S Mode"
	depends on I2C && ACPI
	depends on ((SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC) &&\
		    (MFD_INTEL_LPSS || COMPILE_TEST))
	select SND_SOC_CS42L42
	select SND_SOC_MAX98357A
	select SND_SOC_DMIC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_BOARD_HELPERS
	select SND_SOC_INTEL_SOF_MAXIM_COMMON
	select SND_SOC_ACPI_INTEL_MATCH
	help
	   This adds support for ASoC machine driver for SOF platforms
	   with cs42l42 codec.
	   Say Y if you have such a device.
	   If unsure select "N".

config SND_SOC_INTEL_SOF_PCM512x_MACH
	tristate "SOF with TI PCM512x codec"
	depends on I2C && ACPI
	depends on (SND_SOC_SOF_HDA_AUDIO_CODEC && (MFD_INTEL_LPSS || COMPILE_TEST)) ||\
		   (SND_SOC_SOF_BAYTRAIL && (X86_INTEL_LPSS || COMPILE_TEST))
	depends on SND_HDA_CODEC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_PCM512x_I2C
	help
	  This adds support for ASoC machine driver for SOF platforms
	  with TI PCM512x I2S audio codec.
	  Say Y or m if you have such a device.
	  If unsure select "N".

config SND_SOC_INTEL_SOF_ES8336_MACH
	tristate "SOF with ES8336 or ES8326 codec in I2S mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC
	select SND_SOC_ES8316
	select SND_SOC_ES8326
	select SND_SOC_DMIC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	help
	   This adds support for ASoC machine driver for SOF platforms
	   with es8336 codec.
	   Say Y if you have such a device.
	   If unsure select "N".

config SND_SOC_INTEL_SOF_NAU8825_MACH
	tristate "SOF with nau8825 codec in I2S Mode"
	depends on I2C && ACPI
	depends on ((SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC) &&\
		    (MFD_INTEL_LPSS || COMPILE_TEST))
	select SND_SOC_NAU8825
	select SND_SOC_RT1015P
	select SND_SOC_MAX98373_I2C
	select SND_SOC_MAX98357A
	select SND_SOC_NAU8315
	select SND_SOC_DMIC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_BOARD_HELPERS
	select SND_SOC_INTEL_SOF_MAXIM_COMMON
	select SND_SOC_INTEL_SOF_NUVOTON_COMMON
	select SND_SOC_INTEL_SOF_REALTEK_COMMON
	select SND_SOC_ACPI_INTEL_MATCH
	help
	   This adds support for ASoC machine driver for SOF platforms
	   with nau8825 codec.
	   Say Y if you have such a device.
	   If unsure select "N".

endif ## SND_SOC_SOF_HDA_LINK || SND_SOC_SOF_BAYTRAIL

if (SND_SOC_SOF_COMETLAKE && SND_SOC_SOF_HDA_LINK)

config SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH
	tristate "CML_LP with DA7219 and MAX98357A in I2S Mode"
	imply SND_SOC_INTEL_SOF_DA7219_MACH
	help
	   This adds support for ASoC machine driver for Cometlake platforms
	   with DA7219 + MAX98357A I2S audio codec. This option is deprecated
	   and please use SND_SOC_INTEL_SOF_DA7219_MACH instead.
	   Say Y or m if you have such a device. This is a recommended option.
	   If unsure select "N".

config SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH
	tristate "CML with RT1011 and RT5682 in I2S Mode"
	imply SND_SOC_INTEL_SOF_RT5682_MACH
	help
	  This adds support for ASoC machine driver for SOF platform with
	  RT1011 + RT5682 I2S codec. This option is deprecated and please used
	  SND_SOC_INTEL_SOF_RT5682_MACH instead.
	  Say Y if you have such a device.
	  If unsure select "N".

endif ## SND_SOC_SOF_COMETLAKE && SND_SOC_SOF_HDA_LINK

config SND_SOC_INTEL_SOF_DA7219_MACH
	tristate "SOF with DA7219 codec in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_DA7219
	select SND_SOC_MAX98357A
	select SND_SOC_MAX98373_I2C
	select SND_SOC_MAX98390
	select SND_SOC_DMIC
	select SND_SOC_INTEL_SOF_BOARD_HELPERS
	select SND_SOC_INTEL_SOF_MAXIM_COMMON
	select SND_SOC_ACPI_INTEL_MATCH
	help
	  This adds support for ASoC machine driver for SOF platforms
	  with Dialog DA7219 I2S audio codec.
	  Say Y if you have such a device.
	  If unsure select "N".

if SND_SOC_SOF_HDA_LINK

config SND_SOC_INTEL_SOF_SSP_AMP_MACH
	tristate "SOF with amplifiers in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_RT1308
	select SND_SOC_CS35L41_I2C
	select SND_SOC_DMIC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_BOARD_HELPERS
	select SND_SOC_INTEL_SOF_REALTEK_COMMON
	select SND_SOC_INTEL_SOF_CIRRUS_COMMON
	select SND_SOC_ACPI_INTEL_MATCH
	help
	   This adds support for ASoC machine driver for SOF platforms
	   with RT1308/CS35L41 I2S audio codec.
	   Say Y if you have such a device.
	   If unsure select "N".
endif ## SND_SOC_SOF_HDA_LINK

if SND_SOC_SOF_ELKHARTLAKE

config SND_SOC_INTEL_EHL_RT5660_MACH
	tristate "EHL with RT5660 in I2S mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC
	select SND_SOC_RT5660
	select SND_SOC_DMIC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	help
	  This adds support for ASoC machine driver for Elkhart Lake
	  platform with RT5660 I2S audio codec.

endif ## SND_SOC_SOF_ELKHARTLAKE

if SND_SOC_SOF_INTEL_SOUNDWIRE

config SND_SOC_INTEL_SOUNDWIRE_SOF_MACH
	tristate "SoundWire generic machine driver"
	depends on I2C && SPI_MASTER && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES || COMPILE_TEST
	depends on SOUNDWIRE
	select SND_SOC_SDW_UTILS
	select SND_SOC_MAX98363
	select SND_SOC_MAX98373_I2C
	select SND_SOC_MAX98373_SDW
	select SND_SOC_RT700_SDW
	select SND_SOC_RT711_SDW
	select SND_SOC_RT711_SDCA_SDW
	select SND_SOC_RT712_SDCA_SDW
	select SND_SOC_RT712_SDCA_DMIC_SDW
	select SND_SOC_RT715_SDW
	select SND_SOC_RT715_SDCA_SDW
	select SND_SOC_RT722_SDCA_SDW
	select SND_SOC_RT1308_SDW
	select SND_SOC_RT1308
	select SND_SOC_RT1316_SDW
	select SND_SOC_RT1318_SDW
	select SND_SOC_RT1320_SDW
	select SND_SOC_RT5682_SDW
	select SND_SOC_CS42L42_SDW
	select SND_SOC_CS42L43
	select SND_SOC_CS42L43_SDW
	select MFD_CS42L43
	select MFD_CS42L43_SDW
	select PINCTRL_CS42L43
	select SPI_CS42L43
	select SND_SOC_CS35L56_SPI
	select SND_SOC_CS35L56_SDW
	select SND_SOC_DMIC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	imply SND_SOC_SDW_MOCKUP
	help
	  Add support for Intel SoundWire-based platforms connected to
	  MAX98373, RT700, RT711, RT1308 and RT715
	  If unsure select "N".

endif

endif ## SND_SOC_INTEL_MACH
