# SPDX-License-Identifier: GPL-2.0-only
menuconfig 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
	help
	  This adds support for Device Tree enumeration. This option is
	  required to enable i.MX8 or Mediatek devices.
	  Say Y if you need this option. If unsure select "N".

config SND_SOC_SOF_OF_DEV
	tristate

config SND_SOC_SOF_COMPRESS
	bool
	select SND_SOC_COMPRESS

config SND_SOC_SOF_DEBUG_PROBES
	tristate
	select SND_SOC_SOF_CLIENT
	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.
	  This option is not user-selectable but automagically handled by
	  'select' statements at a higher level.

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

config SND_SOC_SOF_DEVELOPER_SUPPORT
	bool "SOF developer options support"
	depends on EXPERT && SND_SOC_SOF
	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_FORCE_PROBE_WORKQUEUE
	bool "SOF force probe workqueue"
	select SND_SOC_SOF_PROBE_WORK_QUEUE
	help
	  This option forces the use of a probe workqueue, which is only used
	  when HDaudio is enabled due to module dependencies. Forcing this
	  option is intended for debug only, but this should not add any
	  functional issues in nominal cases.
	  Say Y if you are involved in SOF development and need this option.
	  If not, select N.

config SND_SOC_SOF_NOCODEC
	tristate

config SND_SOC_SOF_NOCODEC_SUPPORT
	bool "SOF nocodec static 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 at build time 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_NOCODEC_DEBUG_SUPPORT
	bool "SOF nocodec debug mode support"
	depends on !SND_SOC_SOF_NOCODEC_SUPPORT
	help
	  This adds support for a dummy/nocodec machine driver fallback
	  option.
	  Unlike the SND_SOC_SOF_NOCODEC_SUPPORT, this option is NOT
	  mutually exclusive at build with the Intel HDAudio support. The
	  selection will be done depending on command line or modprobe.d settings
	  Distributions should not select this option!
	  Say Y if you need this nocodec debug fallback option.
	  If unsure select "N".

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
	tristate "SOF enable IPC flood test"
	depends on SND_SOC_SOF
	select SND_SOC_SOF_CLIENT
	help
	  This option enables a separate client device for 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_IPC_FLOOD_TEST_NUM
	int "Number of IPC flood test clients"
	range 1 32
	default 2
	depends on SND_SOC_SOF_DEBUG_IPC_FLOOD_TEST
	help
	  Select the number of IPC flood test clients to be created.

config SND_SOC_SOF_DEBUG_IPC_MSG_INJECTOR
	tristate "SOF enable IPC message injector"
	depends on SND_SOC_SOF
	select SND_SOC_SOF_CLIENT
	help
	  This option enables the IPC message injector which can be used to send
	  crafted IPC messages to the DSP to test its robustness.
	  Say Y if you want to enable the IPC message injector.
	  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
	select SND_SOC_SOF_NOCODEC if SND_SOC_SOF_NOCODEC_DEBUG_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.

# Supported IPC versions
config SND_SOC_SOF_IPC3
	bool

config SND_SOC_SOF_INTEL_IPC4
	bool

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

endif
