# 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"
	help
	  This adds support for Sound Open Firmware for Intel(R) platforms
	  using the Broadwell processors.
	  Say Y if you have such a device.
	  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".

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
