# 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_IPC3
	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_IPC3
	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_IPC3
	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_SKL
	tristate
	select SND_SOC_SOF_HDA_COMMON
	select SND_SOC_SOF_INTEL_IPC4

config SND_SOC_SOF_SKYLAKE
	tristate "SOF support for SkyLake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_SKL
	help
	  This adds support for the Intel(R) platforms using the SkyLake processors.
	  Say Y if you have such a device.
	  If unsure select "N".
	  This is intended only for developers and not a recommend option for distros.

config SND_SOC_SOF_KABYLAKE
	tristate "SOF support for KabyLake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_SKL
	help
	  This adds support for the Intel(R) platforms using the KabyLake processors.
	  Say Y if you have such a device.
	  If unsure select "N".
	  This is intended only for developers and not a recommend option for distros.

config SND_SOC_SOF_INTEL_APL
	tristate
	select SND_SOC_SOF_HDA_COMMON
	select SND_SOC_SOF_IPC3
	select SND_SOC_SOF_INTEL_IPC4

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
	select SND_SOC_SOF_IPC3
	select SND_SOC_SOF_INTEL_IPC4

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
	select SND_SOC_SOF_IPC3
	select SND_SOC_SOF_INTEL_IPC4

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
	select SND_SOC_SOF_IPC3
	select SND_SOC_SOF_INTEL_IPC4

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_INTEL_MTL
	tristate
	select SND_SOC_SOF_HDA_COMMON
	select SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
	select SND_SOC_SOF_INTEL_IPC4

config SND_SOC_SOF_METEORLAKE
	tristate "SOF support for Meteorlake"
	default SND_SOC_SOF_PCI
	select SND_SOC_SOF_INTEL_MTL
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Meteorlake 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
	select SND_SOC_SOF_HDA_PROBES
	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_SUPPORT=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".

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_HDA_PROBES
	tristate
	select SND_SOC_SOF_DEBUG_PROBES
	help
	  The option enables the data probing for Intel(R) Skylake and newer
	  (HDA) platforms.
	  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
