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

config SND_SOC_ACPI_AMD_MATCH
	tristate
	select SND_SOC_ACPI if ACPI

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.

config SND_SOC_AMD_SOF_SDW_MACH
	tristate "AMD SOF Soundwire Machine Driver Support"
	depends on X86 && PCI && ACPI
	depends on SOUNDWIRE
	select SND_SOC_SDW_UTILS
	select SND_SOC_DMIC
	select SND_SOC_RT711_SDW
	select SND_SOC_RT711_SDCA_SDW
	select SND_SOC_RT1316_SDW
	select SND_SOC_RT715_SDW
	select SND_SOC_RT715_SDCA_SDW
	help
	  This option enables SOF sound card support for SoundWire enabled
	  AMD platforms along with ACP PDM controller.
	  Say Y if you want to enable SoundWire based machine driver support
	  on AMD platform.
	  If unsure select "N".

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.
