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

if SND_SOC_INTEL_HASWELL

config SND_SOC_INTEL_HASWELL_MACH
	tristate "Haswell Lynxpoint"
	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_HASWELL

if SND_SOC_INTEL_HASWELL || 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 Wildcatpoint"
	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_HASWELL || SND_SOC_SOF_BROADWELL

if SND_SOC_INTEL_BAYTRAIL

config SND_SOC_INTEL_BYT_MAX98090_MACH
	tristate "Baytrail with MAX98090 codec"
	depends on I2C
	depends on X86_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_MAX98090
	help
	  This adds audio driver for Intel Baytrail platform based boards
	  with the MAX98090 audio codec. This driver is deprecated, use
	  SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH instead for better
	  functionality.

config SND_SOC_INTEL_BYT_RT5640_MACH
	tristate "Baytrail with RT5640 codec"
	depends on I2C
	depends on X86_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_RT5640
	help
	  This adds audio driver for Intel Baytrail platform based boards
	  with the RT5640 audio codec. This driver is deprecated, use
	  SND_SOC_INTEL_BYTCR_RT5640_MACH instead for better functionality.

endif ## SND_SOC_INTEL_BAYTRAIL

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
	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
	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_CHT_BSW_RT5672_MACH
	tristate "Cherrytrail & Braswell with RT5672 codec"
	depends on I2C && ACPI
	depends on X86_INTEL_LPSS || 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
	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
	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
	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 && GPIOLIB
	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 && GPIOLIB
	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 && GPIOLIB
	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_DMIC
	select SND_SOC_HDAC_HDMI

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 in I2S Mode"
	depends on I2C && ACPI && GPIOLIB
	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 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 && GPIOLIB
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_RT298
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	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
	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 && GPIOLIB
	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 && GPIOLIB
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	select SND_SOC_DA7219
	select SND_SOC_MAX98927
	select SND_SOC_MAX98373
	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
	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 && GPIOLIB
	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 && GPIOLIB
	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_MAX98357A
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	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 "SKL/KBL/BXT/APL with HDA Codecs"
	depends on SND_HDA_CODEC_HDMI
	depends on GPIOLIB
	select SND_SOC_HDAC_HDMI
	select SND_SOC_DMIC
	# SND_SOC_HDAC_HDA is already selected
	help
	  This adds support for ASoC machine driver for Intel platforms
	  SKL/KBL/BXT/APL with iDisp, HDA audio codecs.
	  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 && GPIOLIB
	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
	select SND_SOC_RT1015
	select SND_SOC_RT5682_I2C
	select SND_SOC_DMIC
	select SND_SOC_HDAC_HDMI
	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_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_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".

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 && GPIOLIB
	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 && GPIOLIB
	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
	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 && GPIOLIB
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC
	select SND_SOC_DA7219
	select SND_SOC_MAX98373
	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_ELKHARTLAKE

config SND_SOC_INTEL_EHL_RT5660_MACH
	tristate "EHL with RT5660 in I2S mode"
	depends on I2C && ACPI && GPIOLIB
	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
	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 && GPIOLIB
	depends on MFD_INTEL_LPSS || COMPILE_TEST
	depends on SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES || COMPILE_TEST
	depends on SOUNDWIRE
	depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC
	select SND_SOC_RT700_SDW
	select SND_SOC_RT711_SDW
	select SND_SOC_RT1308_SDW
	select SND_SOC_RT1308
	select SND_SOC_RT715_SDW
	select SND_SOC_RT5682_SDW
	select SND_SOC_DMIC
        help
	  Add support for Intel SoundWire-based platforms connected to
	  RT700, RT711, RT1308 and RT715
	  If unsure select "N".

endif


endif ## SND_SOC_INTEL_MACH
