# 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_SST_IPC
	tristate
	# This option controls the IPC core for HiFi2 platforms

config SND_SST_IPC_PCI
	tristate
	select SND_SST_IPC
	# This option controls the PCI-based IPC for HiFi2 platforms
	#  (Medfield, Merrifield).

config SND_SST_IPC_ACPI
	tristate
	select SND_SST_IPC
	# This option controls the ACPI-based IPC for HiFi2 platforms
	# (Baytrail, Cherrytrail)

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_IPC_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_IPC_ACPI
	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"
