# 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
	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 IOSF_MBI if X86 && PCI
	help
	  This adds support for ACPI enumeration. This option is required
	  to enable Intel 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
	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_DEBUG_PROBES
	bool "SOF enable data probing"
	select SND_SOC_COMPRESS
	help
	  This option enables the data probing feature that can be used to
	  gather data directly from specific points of the audio pipeline.
	  Say Y if you want to enable probes.
	  If unsure, select "N".

config SND_SOC_SOF_DEVELOPER_SUPPORT
	bool "SOF developer options support"
	depends on EXPERT
	help
	  This option unlock SOF developer options for debug/performance/
	  code hardening.
	  Distributions should not select this option, only SOF development
	  teams should select it.
	  Say Y if you are involved in SOF development and need this option
	  If not, select N

if SND_SOC_SOF_DEVELOPER_SUPPORT

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
	  This option is mutually exclusive with the Intel HDaudio support,
	  selecting it may have negative impacts and prevent e.g. microphone
	  functionality from being enabled on Intel CoffeeLake and later
	  platforms.
	  Distributions should not select this option!
	  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_ENABLE_FIRMWARE_TRACE
	bool "SOF enable firmware trace"
	help
	  The firmware trace can be enabled either at build-time with
	  this option, or dynamically by setting flags in the SOF core
	  module parameter (similar to dynamic debug)
	  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".

config SND_SOC_SOF_DEBUG_RETAIN_DSP_CONTEXT
	bool "SOF retain DSP context on any FW exceptions"
	help
	  This option keeps the DSP in D0 state so that firmware debug
	  information can be retained and dumped to userspace.
	  Say Y if you want to retain DSP context for FW exceptions.
	  If unsure, select "N".

endif ## SND_SOC_SOF_DEBUG

endif ## SND_SOC_SOF_DEVELOPER_SUPPORT

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
