# 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 if ACPI
	select WANT_DEV_COREDUMP
	select SND_INTEL_DSP_CONFIG
	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 SND_INTEL_DSP_CONFIG
	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.

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 ARCH_KEEMBAY || COMPILE_TEST
	depends on COMMON_CLK
	select SND_DMAENGINE_PCM
	select SND_SOC_GENERIC_DMAENGINE_PCM
	help
	  If you have a Intel Keembay platform then enable this option
	  by saying Y or m.

config SND_SOC_INTEL_AVS
	tristate "Intel AVS driver"
	depends on X86 || COMPILE_TEST
	depends on PCI
	depends on COMMON_CLK
	select ACPI_NHLT if ACPI
	select SND_SOC_ACPI if ACPI
	select SND_SOC_TOPOLOGY
	select SND_SOC_HDA
	select SND_SOC_COMPRESS if DEBUG_FS
	select SND_HDA_EXT_CORE
	select SND_HDA_DSP_LOADER
	select SND_INTEL_DSP_CONFIG
	select WANT_DEV_COREDUMP
	help
	  Enable support for Intel(R) cAVS 1.5 platforms with DSP
	  capabilities. This includes Skylake, Kabylake, Amberlake and
	  Apollolake.

# Machine board drivers
source "sound/soc/intel/avs/boards/Kconfig"

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