# 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_ACPI
	tristate
	# This option controls ACPI-based probing on
	# Haswell/Broadwell/Baytrail legacy and will be set
	# when these platforms are enabled

config SND_SOC_INTEL_SST
	tristate

config SND_SOC_INTEL_SST_FIRMWARE
	tristate
	select DW_DMAC_CORE
	# This option controls firmware download on
	# Haswell/Broadwell/Baytrail legacy and will be set
	# when these platforms are enabled

config SND_SOC_INTEL_HASWELL
	tristate "Haswell/Broadwell Platforms"
	depends on SND_DMA_SGBUF
	depends on DMADEVICES && ACPI
	select SND_SOC_INTEL_SST
	select SND_SOC_INTEL_SST_ACPI
	select SND_SOC_INTEL_SST_FIRMWARE
	select SND_SOC_ACPI_INTEL_MATCH
	help
	  If you have a Intel Haswell or Broadwell platform connected to
	  an I2S codec, then enable this option by saying Y or m. This is
	  typically used for Chromebooks. This is a recommended option.

config SND_SOC_INTEL_BAYTRAIL
	tristate "Baytrail (legacy) Platforms"
	depends on DMADEVICES && ACPI && SND_SST_ATOM_HIFI2_PLATFORM=n
	select SND_SOC_INTEL_SST
	select SND_SOC_INTEL_SST_ACPI
	select SND_SOC_INTEL_SST_FIRMWARE
	select SND_SOC_ACPI_INTEL_MATCH
	help
	  If you have a Intel Baytrail platform connected to an I2S codec,
	  then enable this option by saying Y or m. This was typically used
	  for Baytrail Chromebooks but this option is now deprecated and is
	  not recommended, use SND_SST_ATOM_HIFI2_PLATFORM instead.

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

config SND_SOC_INTEL_SKYLAKE
	tristate "All Skylake/SST Platforms"
	depends on PCI && ACPI
	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
	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
	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
	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
	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
	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
	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_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 a Intel Skylake/Broxton/ApolloLake/KabyLake/
	  GeminiLake or CannonLake platform with an HDaudio codec
	  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
	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


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