# SPDX-License-Identifier: GPL-2.0-only
config SND_SOC_INTEL_SST_TOPLEVEL
	bool "Intel ASoC SST drivers"
	default y
	depends on X86 || COMPILE_TEST
	select SND_SOC_INTEL_MACH
	help
	  Intel ASoC SST Platform 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 SST drivers.

if SND_SOC_INTEL_SST_TOPLEVEL

config SND_SOC_INTEL_SST
	tristate

config SND_SOC_INTEL_CATPT
	tristate "Haswell and Broadwell"
	depends on ACPI || COMPILE_TEST
	depends on DMADEVICES && SND_DMA_SGBUF
	select DW_DMAC_CORE
	select SND_SOC_ACPI_INTEL_MATCH
	help
	  Enable support for Intel(R) Haswell and Broadwell platforms
	  with I2S codec present. This is a recommended option.
	  Say Y or m if you have such device.
	  If unsure, say N.

config SND_SOC_INTEL_HASWELL
	tristate
	select SND_SOC_INTEL_CATPT

config SND_SST_ATOM_HIFI2_PLATFORM
	tristate
	select SND_SOC_COMPRESS

config SND_SST_ATOM_HIFI2_PLATFORM_PCI
	tristate "PCI HiFi2 (Merrifield) Platforms"
	depends on X86 && PCI
	select SND_SST_ATOM_HIFI2_PLATFORM
	help
	  If you have a Intel Merrifield/Edison platform, then
	  enable this option by saying Y or m. Distros will typically not
	  enable this option: while Merrifield/Edison can run a mainline
	  kernel with limited functionality it will require a firmware file
	  which is not in the standard firmware tree

config SND_SST_ATOM_HIFI2_PLATFORM_ACPI
	tristate "ACPI HiFi2 (Baytrail, Cherrytrail) Platforms"
	default ACPI
	depends on X86 && ACPI && PCI
	select SND_SST_ATOM_HIFI2_PLATFORM
	select SND_SOC_ACPI_INTEL_MATCH
	select IOSF_MBI
	help
	  If you have a Intel Baytrail or Cherrytrail platform with an I2S
	  codec, then enable this option by saying Y or m. This is a
	  recommended option
	  This option is mutually exclusive with the SOF support on
	  Baytrail/Cherrytrail. If you want to enable SOF on
	  Baytrail/Cherrytrail, you need to deselect this option first.

config SND_SOC_INTEL_SKYLAKE
	tristate "All Skylake/SST Platforms"
	depends on PCI && ACPI
	depends on COMMON_CLK
	select SND_SOC_INTEL_SKL
	select SND_SOC_INTEL_APL
	select SND_SOC_INTEL_KBL
	select SND_SOC_INTEL_GLK
	select SND_SOC_INTEL_CNL
	select SND_SOC_INTEL_CFL
	help
	  This is a backwards-compatible option to select all devices
	  supported by the Intel SST/Skylake driver. This option is no
	  longer recommended and will be deprecated when the SOF
	  driver is introduced.  Distributions should explicitly
	  select which platform uses this driver.

config SND_SOC_INTEL_SKL
	tristate "Skylake Platforms"
	depends on PCI && ACPI
	depends on COMMON_CLK
	select SND_SOC_INTEL_SKYLAKE_FAMILY
	help
	  If you have a Intel Skylake platform with the DSP enabled
	  in the BIOS then enable this option by saying Y or m.

config SND_SOC_INTEL_APL
	tristate "Broxton/ApolloLake Platforms"
	depends on PCI && ACPI
	depends on COMMON_CLK
	select SND_SOC_INTEL_SKYLAKE_FAMILY
	help
	  If you have a Intel Broxton/ApolloLake platform with the DSP
	  enabled in the BIOS then enable this option by saying Y or m.

config SND_SOC_INTEL_KBL
	tristate "Kabylake Platforms"
	depends on PCI && ACPI
	depends on COMMON_CLK
	select SND_SOC_INTEL_SKYLAKE_FAMILY
	help
	  If you have a Intel Kabylake platform with the DSP
	  enabled in the BIOS then enable this option by saying Y or m.

config SND_SOC_INTEL_GLK
	tristate "GeminiLake Platforms"
	depends on PCI && ACPI
	depends on COMMON_CLK
	select SND_SOC_INTEL_SKYLAKE_FAMILY
	help
	  If you have a Intel GeminiLake platform with the DSP
	  enabled in the BIOS then enable this option by saying Y or m.

config SND_SOC_INTEL_CNL
	tristate "CannonLake/WhiskyLake Platforms"
	depends on PCI && ACPI
	depends on COMMON_CLK
	select SND_SOC_INTEL_SKYLAKE_FAMILY
	help
	  If you have a Intel CNL/WHL platform with the DSP
	  enabled in the BIOS then enable this option by saying Y or m.

config SND_SOC_INTEL_CFL
	tristate "CoffeeLake Platforms"
	depends on PCI && ACPI
	depends on COMMON_CLK
	select SND_SOC_INTEL_SKYLAKE_FAMILY
	help
	  If you have a Intel CoffeeLake platform with the DSP
	  enabled in the BIOS then enable this option by saying Y or m.

config SND_SOC_INTEL_CML_H
	tristate "CometLake-H Platforms"
	depends on PCI && ACPI
	depends on COMMON_CLK
	select SND_SOC_INTEL_SKYLAKE_FAMILY
	help
	  If you have a Intel CometLake-H platform with the DSP
	  enabled in the BIOS then enable this option by saying Y or m.

config SND_SOC_INTEL_CML_LP
	tristate "CometLake-LP Platforms"
	depends on PCI && ACPI
	depends on COMMON_CLK
	select SND_SOC_INTEL_SKYLAKE_FAMILY
	help
	  If you have a Intel CometLake-LP platform with the DSP
	  enabled in the BIOS then enable this option by saying Y or m.

config SND_SOC_INTEL_SKYLAKE_FAMILY
	tristate
	select SND_SOC_INTEL_SKYLAKE_COMMON

if SND_SOC_INTEL_SKYLAKE_FAMILY

config SND_SOC_INTEL_SKYLAKE_SSP_CLK
	tristate

config SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC
	bool "HDAudio codec support"
	help
	  If you have Intel Skylake or Kabylake with HDAudio codec
	  and DMIC present then enable this option by saying Y.

config SND_SOC_INTEL_SKYLAKE_COMMON
	tristate
	select SND_HDA_EXT_CORE
	select SND_HDA_DSP_LOADER
	select SND_SOC_TOPOLOGY
	select SND_SOC_INTEL_SST
	select SND_SOC_HDAC_HDA if SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC
	select SND_SOC_ACPI_INTEL_MATCH
	select SND_INTEL_DSP_CONFIG
	help
	  If you have a Intel Skylake/Broxton/ApolloLake/KabyLake/
	  GeminiLake or CannonLake platform with the DSP enabled in the BIOS
	  then enable this option by saying Y or m.

endif ## SND_SOC_INTEL_SKYLAKE_FAMILY

endif ## SND_SOC_INTEL_SST_TOPLEVEL

if SND_SOC_INTEL_SST_TOPLEVEL || SND_SOC_SOF_INTEL_TOPLEVEL

config SND_SOC_ACPI_INTEL_MATCH
	tristate
	select SND_SOC_ACPI if ACPI
	# this option controls the compilation of ACPI matching tables and
	# helpers and is not meant to be selected by the user.

endif ## SND_SOC_INTEL_SST_TOPLEVEL || SND_SOC_SOF_INTEL_TOPLEVEL

config SND_SOC_INTEL_KEEMBAY
	tristate "Keembay Platforms"
	depends on ARM64 || COMPILE_TEST
	depends on COMMON_CLK
	help
	  If you have a Intel Keembay platform then enable this option
	  by saying Y or m.

# ASoC codec drivers
source "sound/soc/intel/boards/Kconfig"
