# SPDX-License-Identifier: GPL-2.0-only
config SND_SOC_SOF_TOPLEVEL
	bool "Sound Open Firmware Support"
	help
	  This adds support for Sound Open Firmware (SOF). SOF is a free and
	  generic open source audio DSP firmware for multiple devices.
	  Say Y if you have such a device that is supported by SOF.
	  If unsure select "N".

if SND_SOC_SOF_TOPLEVEL

config SND_SOC_SOF_PCI
	tristate "SOF PCI enumeration support"
	depends on PCI
	select SND_SOC_SOF
	select SND_SOC_ACPI if ACPI
	select SND_SOC_SOF_OPTIONS
	select SND_SOC_SOF_INTEL_PCI if SND_SOC_SOF_INTEL_TOPLEVEL
	help
	  This adds support for PCI enumeration. This option is
	  required to enable Intel Skylake+ devices
	  Say Y if you need this option
	  If unsure select "N".

config SND_SOC_SOF_ACPI
	tristate "SOF ACPI enumeration support"
	depends on ACPI || COMPILE_TEST
	select SND_SOC_SOF
	select SND_SOC_ACPI if ACPI
	select SND_SOC_SOF_OPTIONS
	select SND_SOC_SOF_INTEL_ACPI if SND_SOC_SOF_INTEL_TOPLEVEL
	select IOSF_MBI if X86 && PCI
	help
	  This adds support for ACPI enumeration. This option is required
	  to enable Intel Haswell/Broadwell/Baytrail/Cherrytrail devices
	  Say Y if you need this option
	  If unsure select "N".

config SND_SOC_SOF_OF
	tristate "SOF OF enumeration support"
	depends on OF || COMPILE_TEST
	select SND_SOC_SOF
	select SND_SOC_SOF_OPTIONS
	help
	  This adds support for Device Tree enumeration. This option is
	  required to enable i.MX8 devices.
	  Say Y if you need this option. If unsure select "N".

config SND_SOC_SOF_OPTIONS
	tristate
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level

if SND_SOC_SOF_OPTIONS

config SND_SOC_SOF_NOCODEC
	tristate

config SND_SOC_SOF_NOCODEC_SUPPORT
	bool "SOF nocodec mode support"
	help
	  This adds support for a dummy/nocodec machine driver fallback
	  option if no known codec is detected. This is typically only
	  enabled for developers or devices where the sound card is
	  controlled externally
	  Say Y if you need this nocodec fallback option
	  If unsure select "N".

config SND_SOC_SOF_STRICT_ABI_CHECKS
	bool "SOF strict ABI checks"
	help
	  This option enables strict ABI checks for firmware and topology
	  files.
	  When these files are more recent than the kernel, the kernel
	  will handle the functionality it supports and may report errors
	  during topology creation or run-time usage if new functionality
	  is invoked.
	  This option will stop topology creation and firmware load upfront.
	  It is intended for SOF CI/releases and not for users or distros.
	  Say Y if you want strict ABI checks for an SOF release
	  If you are not involved in SOF releases and CI development
	  select "N".

config SND_SOC_SOF_DEBUG
	bool "SOF debugging features"
	help
	  This option can be used to enable or disable individual SOF firmware
	  and driver debugging options.
	  Say Y if you are debugging SOF FW or drivers.
	  If unsure select "N".

if SND_SOC_SOF_DEBUG

config SND_SOC_SOF_FORCE_NOCODEC_MODE
	bool "SOF force nocodec Mode"
	depends on SND_SOC_SOF_NOCODEC_SUPPORT
	help
	  This forces SOF to use dummy/nocodec as machine driver, even
	  though there is a codec detected on the real platform. This is
	  typically only enabled for developers for debug purposes, before
	  codec/machine driver is ready, or to exclude the impact of those
	  drivers
	  Say Y if you need this force nocodec mode option
	  If unsure select "N".

config SND_SOC_SOF_DEBUG_XRUN_STOP
	bool "SOF stop on XRUN"
	help
	  This option forces PCMs to stop on any XRUN event. This is useful to
	  preserve any trace data ond pipeline status prior to the XRUN.
	  Say Y if you are debugging SOF FW pipeline XRUNs.
	  If unsure select "N".

config SND_SOC_SOF_DEBUG_VERBOSE_IPC
	bool "SOF verbose IPC logs"
	help
	  This option enables more verbose IPC logs, with command types in
	  human-readable form instead of just 32-bit hex dumps. This is useful
	  if you are trying to debug IPC with the DSP firmware.
	  If unsure select "N".

config SND_SOC_SOF_DEBUG_FORCE_IPC_POSITION
	bool "SOF force to use IPC for position update on SKL+"
	help
	  This option force to handle stream position update IPCs and run pcm
	  elapse to inform ALSA about that, on platforms (e.g. Intel SKL+) that
	  with other approach (e.g. HDAC DPIB/posbuf) to elapse PCM.
	  On platforms (e.g. Intel SKL-) where position update IPC is the only
	  one choice, this setting won't impact anything.
	  if you are trying to debug pointer update with position IPCs or where
	  DPIB/posbuf is not ready, select "Y".
	  If unsure select "N".

config SND_SOC_SOF_DEBUG_ENABLE_DEBUGFS_CACHE
	bool "SOF enable debugfs caching"
	help
	  This option enables caching of debugfs
	  memory -> DSP resource (memory, register, etc)
	  before the audio DSP is suspended. This will increase the suspend
	  latency and therefore should be used for debug purposes only.
	  Say Y if you want to enable caching the memory windows.
	  If unsure, select "N".

config SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST
	bool "SOF enable IPC flood test"
	help
	  This option enables the IPC flood test which can be used to flood
	  the DSP with test IPCs and gather stats about response times.
	  Say Y if you want to enable IPC flood test.
	  If unsure, select "N".

endif ## SND_SOC_SOF_DEBUG

endif ## SND_SOC_SOF_OPTIONS

config SND_SOC_SOF
	tristate
	select SND_SOC_TOPOLOGY
	select SND_SOC_SOF_NOCODEC if SND_SOC_SOF_NOCODEC_SUPPORT
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level
	  The selection is made at the top level and does not exactly follow
	  module dependencies but since the module or built-in type is decided
	  at the top level it doesn't matter.

config SND_SOC_SOF_PROBE_WORK_QUEUE
	bool
	help
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level
	  When selected, the probe is handled in two steps, for example to
	  avoid lockdeps if request_module is used in the probe.

source "sound/soc/sof/imx/Kconfig"
source "sound/soc/sof/intel/Kconfig"
source "sound/soc/sof/xtensa/Kconfig"

endif
