# 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 Advanced Micro Devices, Inc. All rights reserved.
#

config SND_SOC_AMD_ACP_COMMON
	tristate "AMD Audio ACP Common support"
	select SND_AMD_ACP_CONFIG
	depends on X86 && PCI
	help
	  This option enables common modules for Audio-Coprocessor i.e. ACP
	  IP block on AMD platforms.

if SND_SOC_AMD_ACP_COMMON

config SND_SOC_AMD_ACP_PDM
	tristate

config SND_SOC_AMD_ACP_LEGACY_COMMON
	tristate

config SND_SOC_AMD_ACP_I2S
	tristate

config SND_SOC_AMD_ACP_PCM
	tristate
	select SND_SOC_ACPI if ACPI

config SND_SOC_AMD_ACP_PCI
	tristate "AMD ACP PCI Driver Support"
	depends on X86 && PCI
	depends on ACPI
	select SND_SOC_AMD_ACP_LEGACY_COMMON
	help
	  This options enables generic PCI driver for ACP device.

config SND_AMD_ASOC_RENOIR
	tristate "AMD ACP ASOC Renoir Support"
	depends on ACPI
	select SND_SOC_AMD_ACP_PCM
	select SND_SOC_AMD_ACP_I2S
	select SND_SOC_AMD_ACP_PDM
	select SND_SOC_AMD_ACP_LEGACY_COMMON
	depends on X86 && PCI
	help
	  This option enables Renoir I2S support on AMD platform.

config SND_AMD_ASOC_REMBRANDT
	tristate "AMD ACP ASOC Rembrandt Support"
	depends on ACPI
	select SND_SOC_AMD_ACP_PCM
	select SND_SOC_AMD_ACP_I2S
	select SND_SOC_AMD_ACP_PDM
	select SND_SOC_AMD_ACP_LEGACY_COMMON
	depends on X86 && PCI
	help
	  This option enables Rembrandt I2S support on AMD platform.
	  Say Y if you want to enable AUDIO on Rembrandt
	  If unsure select "N".

config SND_AMD_ASOC_ACP63
	tristate "AMD ACP ASOC ACP6.3 Support"
	depends on X86 && PCI
	depends on ACPI
	select SND_SOC_AMD_ACP_PCM
	select SND_SOC_AMD_ACP_I2S
	select SND_SOC_AMD_ACP_PDM
	select SND_SOC_AMD_ACP_LEGACY_COMMON
	help
	  This option enables Acp6.3 I2S support on AMD platform.
	  Say Y if you want to enable AUDIO on ACP6.3
	  If unsure select "N".

config SND_AMD_ASOC_ACP70
	tristate "AMD ACP ASOC Acp7.0 Support"
	depends on X86 && PCI
	depends on ACPI
	select SND_SOC_AMD_ACP_PCM
	select SND_SOC_AMD_ACP_I2S
	select SND_SOC_AMD_ACP_PDM
	select SND_SOC_AMD_ACP_LEGACY_COMMON
	help
	This option enables Acp7.0 PDM support on AMD platform.
	Say Y if you want to enable AUDIO on ACP7.0
          If unsure select "N".

config SND_SOC_AMD_MACH_COMMON
	tristate
	depends on X86 && PCI && I2C
	select CLK_FIXED_FCH
	select SND_SOC_RT5682_I2C
	select SND_SOC_DMIC
	select SND_SOC_RT1019
	select SND_SOC_MAX98357A
	select SND_SOC_RT5682S
	select SND_SOC_NAU8825
	select SND_SOC_NAU8821
	select SND_SOC_MAX98388
	help
	  This option enables common Machine driver module for ACP.

config SND_SOC_AMD_LEGACY_MACH
	tristate "AMD Legacy Machine Driver Support"
	depends on X86 && PCI && I2C
	select SND_SOC_AMD_MACH_COMMON
	help
	  This option enables legacy sound card support for ACP audio.

config SND_SOC_AMD_SOF_MACH
	tristate "AMD SOF Machine Driver Support"
	depends on X86 && PCI && I2C
	select SND_SOC_AMD_MACH_COMMON
	help
	  This option enables SOF sound card support for ACP audio.

endif # SND_SOC_AMD_ACP_COMMON

config SND_AMD_SOUNDWIRE_ACPI
	tristate
	depends on ACPI
	help
	  This options enables ACPI helper functions for SoundWire
	  interface for AMD platforms.
