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

config SND_SOC_SOF_PCI
	tristate "SOF PCI enumeration support"
	depends on PCI
	help
	  This adds support for PCI enumeration. This option is
	  required to enable Intel Skylake+ devices.
	  For backwards-compatibility with previous configurations the selection will
	  be used as default for platform-specific drivers.
	  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
	help
	  This adds support for ACPI enumeration. This option is required
	  to enable Intel Broadwell/Baytrail/Cherrytrail devices.
	  For backwards-compatibility with previous configurations the selection will
	  be used as default for platform-specific drivers.
	  Say Y if you need this option.
	  If unsure select "N".

config SND_SOC_SOF_ACPI_DEV
	tristate

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 unlocks 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 and 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 forces 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
