# SPDX-License-Identifier: GPL-2.0-only
config SND_SOC_SOF_INTEL_TOPLEVEL
	bool "SOF support for Intel audio DSPs"
	depends on X86 || COMPILE_TEST
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms.
	  Say Y if you have such a device.
	  If unsure select "N".

if SND_SOC_SOF_INTEL_TOPLEVEL

config SND_SOC_SOF_INTEL_HIFI_EP_IPC
	tristate
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.

config SND_SOC_SOF_INTEL_ATOM_HIFI_EP
	tristate
	select SND_SOC_SOF_INTEL_COMMON
	select SND_SOC_SOF_INTEL_HIFI_EP_IPC
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.

config SND_SOC_SOF_INTEL_COMMON
	tristate
	select SND_SOC_SOF
	select SND_SOC_ACPI_INTEL_MATCH
	select SND_SOC_SOF_XTENSA
	select SND_SOC_INTEL_MACH
	select SND_SOC_ACPI if ACPI
	select SND_INTEL_DSP_CONFIG
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.

if SND_SOC_SOF_ACPI

config SND_SOC_SOF_BAYTRAIL
	tristate "SOF support for Baytrail, Braswell and Cherrytrail"
	default SND_SOC_SOF_ACPI
	select SND_SOC_SOF_INTEL_COMMON
	select SND_SOC_SOF_INTEL_ATOM_HIFI_EP
	select SND_SOC_SOF_ACPI_DEV
	select IOSF_MBI if X86 && PCI
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Baytrail, Braswell or Cherrytrail processors.
	  This option can coexist in the same build with the Atom legacy
	  drivers, currently the default but which will be deprecated
	  at some point.
	  Existing firmware/topology binaries and UCM configurations
	  typically located in the root file system are already
	  compatible with both SOF or Atom/SST legacy drivers.
	  This is a recommended option for distributions.
	  Say Y if you want to enable SOF on Baytrail/Cherrytrail.
	  If unsure select "N".

config SND_SOC_SOF_BROADWELL
	tristate "SOF support for Broadwell"
	default SND_SOC_SOF_ACPI
	select SND_SOC_SOF_INTEL_COMMON
	select SND_SOC_SOF_INTEL_HIFI_EP_IPC
	select SND_SOC_SOF_ACPI_DEV
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Broadwell processors.
	  This option can coexist in the same build with the default 'catpt'
	  driver.
	  Existing firmware/topology binaries and UCM configurations typically
	  located in the root file system are already compatible with both SOF
	  or catpt drivers.
	  SOF does not fully support Broadwell and has limitations related to
	  DMA and suspend-resume, this is not a recommended option for
	  distributions.
	  Say Y if you want to enable SOF on Broadwell.
	  If unsure select "N".

endif ## SND_SOC_SOF_ACPI

if SND_SOC_SOF_PCI

config SND_SOC_SOF_MERRIFIELD
	tristate "SOF support for Tangier/Merrifield"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_PCI_DEV
	select SND_SOC_SOF_INTEL_ATOM_HIFI_EP
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Tangier/Merrifield processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_INTEL_APL
	tristate
	select SND_SOC_SOF_HDA_COMMON

config SND_SOC_SOF_APOLLOLAKE
	tristate "SOF support for Apollolake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_APL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Apollolake processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_GEMINILAKE
	tristate "SOF support for GeminiLake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_APL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Geminilake processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_INTEL_CNL
	tristate
	select SND_SOC_SOF_HDA_COMMON
	select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE

config SND_SOC_SOF_CANNONLAKE
	tristate "SOF support for Cannonlake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_CNL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Cannonlake processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_COFFEELAKE
	tristate "SOF support for CoffeeLake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_CNL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Coffeelake processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_COMETLAKE
	tristate "SOF support for CometLake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_CNL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Cometlake processors.
	  If unsure select "N".

config SND_SOC_SOF_INTEL_ICL
	tristate
	select SND_SOC_SOF_HDA_COMMON
	select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE

config SND_SOC_SOF_ICELAKE
	tristate "SOF support for Icelake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_ICL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Icelake processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_JASPERLAKE
	tristate "SOF support for JasperLake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_ICL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the JasperLake processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_INTEL_TGL
	tristate
	select SND_SOC_SOF_HDA_COMMON
	select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE

config SND_SOC_SOF_TIGERLAKE
	tristate "SOF support for Tigerlake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_TGL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Tigerlake processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_ELKHARTLAKE
	tristate "SOF support for ElkhartLake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_TGL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the ElkhartLake processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_ALDERLAKE
	tristate "SOF support for Alderlake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_TGL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Alderlake processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_HDA_COMMON
	tristate
	select SND_SOC_SOF_INTEL_COMMON
	select SND_SOC_SOF_PCI_DEV
	select SND_INTEL_DSP_CONFIG
	select SND_SOC_SOF_HDA_LINK_BASELINE
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.

if SND_SOC_SOF_HDA_COMMON

config SND_SOC_SOF_HDA_LINK
	bool "SOF support for HDA Links(HDA/HDMI)"
	depends on SND_SOC_SOF_NOCODEC=n
	select SND_SOC_SOF_PROBE_WORK_QUEUE
	help
	  This adds support for HDA links(HDA/HDMI) with Sound Open Firmware
	  for Intel(R) platforms.
	  Say Y if you want to enable HDA links with SOF.
	  If unsure select "N".

config SND_SOC_SOF_HDA_AUDIO_CODEC
	bool "SOF support for HDAudio codecs"
	depends on SND_SOC_SOF_HDA_LINK
	help
	  This adds support for HDAudio codecs with Sound Open Firmware
	  for Intel(R) platforms.
	  Say Y if you want to enable HDAudio codecs with SOF.
	  If unsure select "N".

config SND_SOC_SOF_HDA_PROBES
	bool "SOF enable probes over HDA"
	depends on SND_SOC_SOF_DEBUG_PROBES
	help
	  This option enables the data probing for Intel(R)
	  Skylake and newer platforms.
	  Say Y if you want to enable probes.
	  If unsure, select "N".

endif ## SND_SOC_SOF_HDA_COMMON

config SND_SOC_SOF_HDA_LINK_BASELINE
	tristate
	select SND_SOC_SOF_HDA if SND_SOC_SOF_HDA_LINK
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.

config SND_SOC_SOF_HDA
	tristate
	select SND_HDA_EXT_CORE if SND_SOC_SOF_HDA_LINK
	select SND_SOC_HDAC_HDA if SND_SOC_SOF_HDA_AUDIO_CODEC
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.

config SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
	tristate
	select SOUNDWIRE_INTEL if SND_SOC_SOF_INTEL_SOUNDWIRE
	select SND_INTEL_SOUNDWIRE_ACPI if SND_SOC_SOF_INTEL_SOUNDWIRE

config SND_SOC_SOF_INTEL_SOUNDWIRE
	tristate "SOF support for SoundWire"
	default SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
	depends on SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
	depends on ACPI && SOUNDWIRE
	depends on !(SOUNDWIRE=m && SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=y)
	help
	  This adds support for SoundWire with Sound Open Firmware
	  for Intel(R) platforms.
	  Say Y if you want to enable SoundWire links with SOF.
	  If unsure select "N".

endif ## SND_SOC_SOF_PCI

endif ## SND_SOC_SOF_INTEL_TOPLEVEL
