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