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