# 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_ACPI
	tristate
	select SND_SOC_SOF_BAYTRAIL  if SND_SOC_SOF_BAYTRAIL_SUPPORT
	select SND_SOC_SOF_BROADWELL if SND_SOC_SOF_BROADWELL_SUPPORT
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_INTEL_PCI
	tristate
	select SND_SOC_SOF_MERRIFIELD  if SND_SOC_SOF_MERRIFIELD_SUPPORT
	select SND_SOC_SOF_APOLLOLAKE  if SND_SOC_SOF_APOLLOLAKE_SUPPORT
	select SND_SOC_SOF_GEMINILAKE  if SND_SOC_SOF_GEMINILAKE_SUPPORT
	select SND_SOC_SOF_CANNONLAKE  if SND_SOC_SOF_CANNONLAKE_SUPPORT
	select SND_SOC_SOF_COFFEELAKE  if SND_SOC_SOF_COFFEELAKE_SUPPORT
	select SND_SOC_SOF_ICELAKE     if SND_SOC_SOF_ICELAKE_SUPPORT
	select SND_SOC_SOF_COMETLAKE_LP if SND_SOC_SOF_COMETLAKE_LP_SUPPORT
	select SND_SOC_SOF_COMETLAKE_H if SND_SOC_SOF_COMETLAKE_H_SUPPORT
	select SND_SOC_SOF_TIGERLAKE   if SND_SOC_SOF_TIGERLAKE_SUPPORT
	select SND_SOC_SOF_ELKHARTLAKE if SND_SOC_SOF_ELKHARTLAKE_SUPPORT
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

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_ACPI_INTEL_MATCH
	select SND_SOC_SOF_XTENSA
	select SND_SOC_INTEL_MACH
	select SND_SOC_ACPI if ACPI
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

if SND_SOC_SOF_INTEL_ACPI

config SND_SOC_SOF_BAYTRAIL_SUPPORT
	bool "SOF support for Baytrail, Braswell and Cherrytrail"
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Baytrail, Braswell or Cherrytrail processors.
	  Say Y if you have such a device.
	  If unsure select "N".

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

config SND_SOC_SOF_BROADWELL_SUPPORT
	bool "SOF support for Broadwell"
	depends on SND_SOC_INTEL_HASWELL=n
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Broadwell processors.
	  This option is mutually exclusive with the Haswell/Broadwell legacy
	  driver. If you want to enable SOF on Broadwell you need to deselect
	  the legacy driver first.
	  SOF does fully support Broadwell yet, so this option is not
	  recommended for distros. At some point all legacy drivers will be
	  deprecated but not before all userspace firmware/topology/UCM files
	  are made available to downstream distros.
	  Say Y if you want to enable SOF on Broadwell
	  If unsure select "N".

config SND_SOC_SOF_BROADWELL
	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

endif ## SND_SOC_SOF_INTEL_ACPI

if SND_SOC_SOF_INTEL_PCI

config SND_SOC_SOF_MERRIFIELD_SUPPORT
	bool "SOF support for Tangier/Merrifield"
	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_MERRIFIELD
	tristate
	select SND_SOC_SOF_INTEL_ATOM_HIFI_EP
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_APOLLOLAKE_SUPPORT
	bool "SOF support for Apollolake"
	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_APOLLOLAKE
	tristate
	select SND_SOC_SOF_HDA_COMMON
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_GEMINILAKE_SUPPORT
	bool "SOF support for GeminiLake"
	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_GEMINILAKE
	tristate
	select SND_SOC_SOF_HDA_COMMON
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_CANNONLAKE_SUPPORT
	bool "SOF support for Cannonlake"
	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_CANNONLAKE
	tristate
	select SND_SOC_SOF_HDA_COMMON
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_COFFEELAKE_SUPPORT
	bool "SOF support for CoffeeLake"
	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_COFFEELAKE
	tristate
	select SND_SOC_SOF_HDA_COMMON
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_ICELAKE_SUPPORT
	bool "SOF support for Icelake"
	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_ICELAKE
	tristate
	select SND_SOC_SOF_HDA_COMMON
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

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

config SND_SOC_SOF_COMETLAKE_LP_SUPPORT
	bool "SOF support for CometLake-LP"
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Cometlake-LP processors.
	  Say Y if you have such a device.
	  If unsure select "N".

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

config SND_SOC_SOF_COMETLAKE_H_SUPPORT
	bool "SOF support for CometLake-H"
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Cometlake-H processors.
	  Say Y if you have such a device.
	  If unsure select "N".

config SND_SOC_SOF_TIGERLAKE_SUPPORT
	bool "SOF support for Tigerlake"
	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_TIGERLAKE
	tristate
	select SND_SOC_SOF_HDA_COMMON
	help
          This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_ELKHARTLAKE_SUPPORT
	bool "SOF support for ElkhartLake"
	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_ELKHARTLAKE
	tristate
	select SND_SOC_SOF_HDA_COMMON
	help
          This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_HDA_COMMON
	tristate
	select SND_SOC_SOF_INTEL_COMMON
	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_ALWAYS_ENABLE_DMI_L1
	bool "SOF enable DMI Link L1"
	help
	  This option enables DMI L1 for both playback and capture
	  and disables known workarounds for specific HDaudio platforms.
	  Only use to look into power optimizations on platforms not
	  affected by DMI L1 issues. This option is not recommended.
	  Say Y if you want to enable DMI Link L1
	  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
	select SND_INTEL_NHLT if ACPI
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

endif ## SND_SOC_SOF_INTEL_PCI

endif ## SND_SOC_SOF_INTEL_TOPLEVEL
