# SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
# This file is provided under a dual BSD/GPLv2 license. When using or
# redistributing this file, you may do so under either license.
#
# Copyright(c) 2021, 2023 Advanced Micro Devices, Inc. All rights reserved.

config SND_SOC_SOF_AMD_TOPLEVEL
	tristate "SOF support for AMD audio DSPs"
	depends on SOUNDWIRE_AMD || !SOUNDWIRE_AMD
	depends on X86 || COMPILE_TEST
	help
	  This adds support for Sound Open Firmware for AMD platforms.
	  Say Y if you have such a device.
	  If unsure select "N".

if SND_SOC_SOF_AMD_TOPLEVEL

config SND_SOC_SOF_AMD_COMMON
	tristate
	select SND_SOC_SOF
	select SND_SOC_SOF_IPC3
	select SND_SOC_SOF_PCI_DEV
	select SND_AMD_ACP_CONFIG
	select SND_SOC_SOF_XTENSA
	select SND_SOC_SOF_ACP_PROBES
	select SND_SOC_ACPI_AMD_MATCH
	select SND_SOC_ACPI if ACPI
	help
	  This option is not user-selectable but automatically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_AMD_RENOIR
	tristate "SOF support for RENOIR"
	depends on SND_SOC_SOF_PCI
	select SND_SOC_SOF_AMD_COMMON
	help
	  Select this option for SOF support on AMD Renoir platform

config SND_SOC_SOF_AMD_VANGOGH
	tristate "SOF support for VANGOGH"
	depends on SND_SOC_SOF_PCI
	select SND_SOC_SOF_AMD_COMMON
	help
	  Select this option for SOF support
	  on AMD Vangogh platform.
	  Say Y if you want to enable SOF on Vangogh.
	  If unsure select "N".

config SND_SOC_SOF_AMD_REMBRANDT
	tristate "SOF support for REMBRANDT"
	depends on SND_SOC_SOF_PCI
	select SND_SOC_SOF_AMD_COMMON
	help
	  Select this option for SOF support on AMD Rembrandt platform
	  Say Y if you want to enable SOF on Rembrandt.
	  If unsure select "N".

config SND_SOC_SOF_ACP_PROBES
	tristate
	select SND_SOC_SOF_DEBUG_PROBES
	help
	  This option is not user-selectable but automatically handled by
	  'select' statements at a higher level

config SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE
	tristate
	select SND_AMD_SOUNDWIRE_ACPI if ACPI

config SND_SOC_SOF_AMD_SOUNDWIRE
	tristate "SOF support for SoundWire based AMD platforms"
	default SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE
	depends on SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE
	depends on ACPI
	depends on SOUNDWIRE_AMD
	help
	  This adds support for SoundWire with Sound Open Firmware
	  for AMD platforms.
	  Say Y if you want to enable SoundWire links with SOF.
	  If unsure select "N".

config SND_SOC_SOF_AMD_ACP63
	tristate "SOF support for ACP6.3 platform"
	depends on SND_SOC_SOF_PCI
	select SND_SOC_SOF_AMD_COMMON
	select SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE
	help
	  Select this option for SOF support on
	  AMD ACP6.3 version based platforms.
	  Say Y if you want to enable SOF on ACP6.3 based platform.
	  If unsure select "N".

config SND_SOC_SOF_AMD_ACP70
	tristate "SOF support for ACP7.0 platform"
	depends on SND_SOC_SOF_PCI
	select SND_SOC_SOF_AMD_COMMON
	help
	  Select this option for SOF support on
	  AMD ACP7.0 version based platforms.
	  Say Y if you want to enable SOF on ACP7.0 based platform.

endif
