# 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

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
	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

if SND_SOC_INTEL_SKL

config SND_SOC_INTEL_SKL_RT286_MACH
	tristate "SKL with RT286 I2S mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_RT286
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	help
	   This adds support for ASoC machine driver for Skylake platforms
	   with RT286 I2S audio codec.
	   Say Y or m if you have such a device.
	   If unsure select "N".

config SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH
	tristate "SKL with NAU88L25 and SSM4567 in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_NAU8825
	select SND_SOC_SSM4567
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	help
	  This adds support for ASoC Onboard Codec I2S machine driver. This will
	  create an alsa sound card for NAU88L25 + SSM4567.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH
	tristate "SKL with NAU88L25 and MAX98357A in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_NAU8825
	select SND_SOC_MAX98357A
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	help
	  This adds support for ASoC Onboard Codec I2S machine driver. This will
	  create an alsa sound card for NAU88L25 + MAX98357A.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

endif ## SND_SOC_INTEL_SKL

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

config SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON
	tristate
	select SND_SOC_INTEL_DA7219_MAX98357A_GENERIC

if SND_SOC_INTEL_APL

config SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH
	tristate "Broxton with DA7219 and MAX98357A/MAX98390 in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on SND_HDA_CODEC_HDMI
	select SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON
	help
	   This adds support for ASoC machine driver for Broxton-P platforms
	   with DA7219 + MAX98357A/MAX98390 I2S 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_BXT_RT298_MACH
	tristate "Broxton with RT298 I2S mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_RT298
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	help
	   This adds support for ASoC machine driver for Broxton platforms
	   with RT286 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_INTEL_APL

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_INTEL_KBL

config SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH
	tristate "KBL with RT5663 and MAX98927 in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_RT5663
	select SND_SOC_MAX98927
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	select SND_SOC_INTEL_SKYLAKE_SSP_CLK
	help
	  This adds support for ASoC Onboard Codec I2S machine driver. This will
	  create an alsa sound card for RT5663 + MAX98927.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH
	tristate "KBL with RT5663, RT5514 and MAX98927 in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on SPI
	select SND_SOC_RT5663
	select SND_SOC_RT5514
	select SND_SOC_RT5514_SPI
	select SND_SOC_MAX98927
	select SND_SOC_HDAC_HDMI
	select SND_SOC_INTEL_SKYLAKE_SSP_CLK
	help
	  This adds support for ASoC Onboard Codec I2S machine driver. This will
	  create an alsa sound card for RT5663 + RT5514 + MAX98927.
	  Say Y or m if you have such a device. This is a recommended option.
	  If unsure select "N".

config SND_SOC_INTEL_KBL_DA7219_MAX98357A_MACH
	tristate "KBL with DA7219 and MAX98357A in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_INTEL_DA7219_MAX98357A_GENERIC
	help
	  This adds support for ASoC Onboard Codec I2S machine driver. This will
	  create an alsa sound card for DA7219 + MAX98357A I2S audio codec.
	  Say Y if you have such a device.

config SND_SOC_INTEL_KBL_DA7219_MAX98927_MACH
	tristate "KBL with DA7219 and MAX98927 in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_DA7219
	select SND_SOC_MAX98927
	select SND_SOC_MAX98373_I2C
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	help
	  This adds support for ASoC Onboard Codec I2S machine driver. This will
	  create an alsa sound card for DA7219 + MAX98927 I2S audio codec.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_INTEL_KBL_RT5660_MACH
	tristate "KBL with RT5660 in I2S Mode"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on GPIOLIB || COMPILE_TEST
	select SND_SOC_RT5660
	select SND_SOC_HDAC_HDMI
	help
	  This adds support for ASoC Onboard Codec I2S machine driver. This will
	  create an alsa sound card for RT5660 I2S audio codec.
	  Say Y if you have such a device.

endif ## SND_SOC_INTEL_KBL

if SND_SOC_SOF_GEMINILAKE

config SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH
	tristate "GLK with DA7219 and MAX98357A 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_BXT_DA7219_MAX98357A_COMMON
	help
	   This adds support for ASoC machine driver for Geminilake platforms
	   with DA7219 + MAX98357A I2S 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_GLK_RT5682_MAX98357A_MACH
	tristate "GLK with RT5682 and MAX98357A 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_RT5682_I2C
	select SND_SOC_RT5682S
	select SND_SOC_MAX98357A
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	help
	   This adds support for ASoC machine driver for Geminilake platforms
	   with RT5682 + MAX98357A I2S audio codec.
	   Say Y if you have such a device.
	   If unsure select "N".

endif ## SND_SOC_SOF_GEMINILAKE

if SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC || 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_HDAC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	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_INTEL_SKYLAKE_HDAUDIO_CODEC || 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 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_MAX98373_I2C
	select SND_SOC_MAX98390
	select SND_SOC_RT1011
	select SND_SOC_RT1015
	select SND_SOC_RT1015P
	select SND_SOC_RT5682_I2C
	select SND_SOC_RT5682S
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_MAXIM_COMMON
	select SND_SOC_INTEL_SOF_REALTEK_COMMON
	help
	   This adds support for ASoC machine driver for SOF platforms
	   with 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_HDAC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_MAXIM_COMMON
	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_DMIC
	select SND_SOC_HDAC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_MAXIM_COMMON
	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"
	depends on I2C && ACPI
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON
	help
	   This adds support for ASoC machine driver for Cometlake platforms
	   with DA7219 + MAX98357A I2S 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_SOF_CML_RT1011_RT5682_MACH
	tristate "CML with RT1011 and RT5682 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_RT1011
	select SND_SOC_RT5682_I2C
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	help
	  This adds support for ASoC machine driver for SOF platform with
	  RT1011 + RT5682 I2S codec.
	  Say Y if you have such a device.
	  If unsure select "N".

endif ## SND_SOC_SOF_COMETLAKE && SND_SOC_SOF_HDA_LINK

if SND_SOC_SOF_JASPERLAKE

config SND_SOC_INTEL_SOF_DA7219_MAX98373_MACH
	tristate "SOF with DA7219 and MAX98373/MAX98360A 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_MAX98373_I2C
	select SND_SOC_DMIC
	help
	  This adds support for ASoC machine driver for SOF platforms
	  with DA7219 + MAX98373/MAX98360A I2S audio codec.
	  Say Y if you have such a device.
	  If unsure select "N".

endif ## SND_SOC_SOF_JASPERLAKE

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_HDAC_HDMI
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_REALTEK_COMMON
	select SND_SOC_INTEL_SOF_CIRRUS_COMMON
	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 && 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_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_RT1308_SDW
	select SND_SOC_RT1308
	select SND_SOC_RT1316_SDW
	select SND_SOC_RT715_SDW
	select SND_SOC_RT715_SDCA_SDW
	select SND_SOC_RT5682_SDW
	select SND_SOC_DMIC
	select SND_SOC_INTEL_HDA_DSP_COMMON
	select SND_SOC_INTEL_SOF_MAXIM_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
