# 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 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".
endif
