# SPDX-License-Identifier: GPL-2.0-only
#
# SoundWire subsystem configuration
#

menuconfig SOUNDWIRE
	tristate "SoundWire support"
	depends on ACPI || OF
	depends on SND_SOC_SDCA_OPTIONAL
	help
	  SoundWire is a 2-Pin interface with data and clock line ratified
	  by the MIPI Alliance. SoundWire is used for transporting data
	  typically related to audio functions. SoundWire interface is
	  optimized to integrate audio devices in mobile or mobile inspired
	  systems. Say Y to enable this subsystem, N if you do not have such
	  a device

if SOUNDWIRE

comment "SoundWire Devices"

config SOUNDWIRE_AMD
	tristate "AMD SoundWire Manager driver"
	select SOUNDWIRE_GENERIC_ALLOCATION
	depends on ACPI && SND_SOC
	help
	  SoundWire AMD Manager driver.
	  If you have an AMD platform which has a SoundWire Manager then
	  enable this config option to get the SoundWire support for that
	  device.

config SOUNDWIRE_CADENCE
	tristate
	select CRC8

config SOUNDWIRE_INTEL
	tristate "Intel SoundWire Master driver"
	select SOUNDWIRE_CADENCE
	select SOUNDWIRE_GENERIC_ALLOCATION
	select AUXILIARY_BUS
	depends on ACPI && SND_SOC
	depends on SND_SOC_SOF_HDA_MLINK || !SND_SOC_SOF_HDA_MLINK
	depends on SND_HDA_CORE || !SND_HDA_ALIGNED_MMIO
	help
	  SoundWire Intel Master driver.
	  If you have an Intel platform which has a SoundWire Master then
	  enable this config option to get the SoundWire support for that
	  device.

config SOUNDWIRE_QCOM
	tristate "Qualcomm SoundWire Master driver"
	imply SLIMBUS
	depends on SND_SOC
	help
	  SoundWire Qualcomm Master driver.
	  If you have an Qualcomm platform which has a SoundWire Master then
	  enable this config option to get the SoundWire support for that
	  device

config SOUNDWIRE_GENERIC_ALLOCATION
	tristate

endif
