# 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 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_ACP63
	tristate "SOF support for ACP6.3 platform"
	depends on SND_SOC_SOF_PCI
	select SND_SOC_SOF_AMD_COMMON
	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
