# SPDX-License-Identifier: GPL-2.0-only
# ALSA soundcard-configuration
config SND_TIMER
	tristate

config SND_PCM
	tristate
	select SND_TIMER if SND_PCM_TIMER

config SND_PCM_ELD
	bool

config SND_PCM_IEC958
	bool

config SND_DMAENGINE_PCM
	tristate

config SND_HWDEP
	tristate

config SND_SEQ_DEVICE
	tristate

config SND_RAWMIDI
	tristate
	select SND_SEQ_DEVICE if SND_SEQUENCER != n

config SND_UMP
	tristate
	select SND_RAWMIDI

config SND_UMP_LEGACY_RAWMIDI
	bool "Legacy raw MIDI support for UMP streams"
	depends on SND_UMP
	help
	  This option enables the legacy raw MIDI support for UMP streams.
	  When this option is set, an additional rawmidi device for the
	  legacy MIDI 1.0 byte streams is created for each UMP Endpoint.
	  The device contains 16 substreams corresponding to UMP groups.

config SND_COMPRESS_OFFLOAD
	tristate

config SND_JACK
	bool

# enable input device support in jack layer
config SND_JACK_INPUT_DEV
	bool
	depends on SND_JACK
	default y if INPUT=y || INPUT=SND

config SND_OSSEMUL
	bool "Enable OSS Emulation"
	select SOUND_OSS_CORE
	help
	  This option enables the build of OSS emulation layer.

config SND_MIXER_OSS
	tristate "OSS Mixer API"
	depends on SND_OSSEMUL
	help
	  To enable OSS mixer API emulation (/dev/mixer*), say Y here
	  and read <file:Documentation/sound/designs/oss-emulation.rst>.

	  Many programs still use the OSS API, so say Y.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-mixer-oss.

config SND_PCM_OSS
	tristate "OSS PCM (digital audio) API"
	depends on SND_OSSEMUL
	select SND_PCM
	help
	  To enable OSS digital audio (PCM) emulation (/dev/dsp*), say Y
	  here and read <file:Documentation/sound/designs/oss-emulation.rst>.

	  Many programs still use the OSS API, so say Y.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-pcm-oss.

config SND_PCM_OSS_PLUGINS
	bool "OSS PCM (digital audio) API - Include plugin system"
	depends on SND_PCM_OSS
	default y
	help
	  If you disable this option, the ALSA's OSS PCM API will not
	  support conversion of channels, formats and rates. It will
	  behave like most of new OSS/Free drivers in 2.4/2.6 kernels.

config SND_PCM_TIMER
	bool "PCM timer interface" if EXPERT
	default y
	help
	  If you disable this option, pcm timer will be unavailable, so
	  those stubs that use pcm timer (e.g. dmix, dsnoop & co) may work
	  incorrectly.

	  For some embedded devices, we may disable it to reduce memory
	  footprint, about 20KB on x86_64 platform.

config SND_HRTIMER
	tristate "HR-timer backend support"
	depends on HIGH_RES_TIMERS
	select SND_TIMER
	help
	  Say Y here to enable HR-timer backend for ALSA timer.  ALSA uses
	  the hrtimer as a precise timing source. The ALSA sequencer code
	  also can use this timing source.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-hrtimer.

config SND_DYNAMIC_MINORS
	bool "Dynamic device file minor numbers"
	help
	  If you say Y here, the minor numbers of ALSA device files in
	  /dev/snd/ are allocated dynamically.  This allows you to have
	  more than 8 sound cards, but requires a dynamic device file
	  system like udev.

	  If you are unsure about this, say N here.

config SND_MAX_CARDS
	int "Max number of sound cards"
	range 4 256
	default 32
	depends on SND_DYNAMIC_MINORS
	help
	  Specify the max number of sound cards that can be assigned
	  on a single machine.

config SND_SUPPORT_OLD_API
	bool "Support old ALSA API"
	default y
	help
	  Say Y here to support the obsolete ALSA PCM API (ver.0.9.0 rc3
	  or older).

config SND_PROC_FS
	bool "Sound Proc FS Support" if EXPERT
	depends on PROC_FS
	default y
	help
	  Say 'N' to disable Sound proc FS, which may reduce code size about
	  9KB on x86_64 platform.
	  If unsure say Y.

config SND_VERBOSE_PROCFS
	bool "Verbose procfs contents"
	depends on SND_PROC_FS
	default y
	help
	  Say Y here to include code for verbose procfs contents (provides
	  useful information to developers when a problem occurs).  On the
	  other side, it makes the ALSA subsystem larger.

config SND_VERBOSE_PRINTK
	bool "Verbose printk"
	help
	  Say Y here to enable verbose log messages.  These messages
	  will help to identify source file and position containing
	  printed messages.

	  You don't need this unless you're debugging ALSA.

config SND_CTL_FAST_LOOKUP
	bool "Fast lookup of control elements" if EXPERT
	default y
	select XARRAY_MULTI
	help
	  This option enables the faster lookup of control elements.
	  It will consume more memory because of the additional Xarray.
	  If you want to choose the memory footprint over the performance
	  inevitably, turn this off.

config SND_DEBUG
	bool "Debug"
	help
	  Say Y here to enable ALSA debug code.

config SND_DEBUG_VERBOSE
	bool "More verbose debug"
	depends on SND_DEBUG
	help
	  Say Y here to enable extra-verbose debugging messages.

	  Let me repeat: it enables EXTRA-VERBOSE DEBUGGING messages.
	  So, say Y only if you are ready to be annoyed.

config SND_PCM_XRUN_DEBUG
	bool "Enable PCM ring buffer overrun/underrun debugging"
	default n
	depends on SND_DEBUG && SND_VERBOSE_PROCFS
	help
	  Say Y to enable the PCM ring buffer overrun/underrun debugging.
	  It is usually not required, but if you have trouble with
	  sound clicking when system is loaded, it may help to determine
	  the process or driver which causes the scheduling gaps.

config SND_CTL_INPUT_VALIDATION
	bool "Validate input data to control API"
	help
	  Say Y to enable the additional validation for the input data to
	  each control element, including the value range checks.
	  An error is returned from ALSA core for invalid inputs without
	  passing to the driver.  This is a kind of hardening for drivers
	  that have no proper error checks, at the cost of a slight
	  performance overhead.

config SND_CTL_DEBUG
	bool "Enable debugging feature for control API"
	depends on SND_DEBUG
	help
	  Say Y to enable the debugging feature for ALSA control API.
	  It performs the additional sanity-checks for each control element
	  read access, such as whether the values returned from the driver
	  are in the proper ranges or the check of the invalid access at
	  out-of-array areas.  The error is printed when the driver gives
	  such unexpected values.
	  When you develop a driver that deals with control elements, it's
	  strongly recommended to try this one once and verify whether you see
	  any relevant errors or not.

config SND_JACK_INJECTION_DEBUG
	bool "Sound jack injection interface via debugfs"
	depends on SND_JACK && SND_DEBUG && DEBUG_FS
	help
	  This option can be used to enable or disable sound jack
	  software injection.
	  Say Y if you are debugging via jack injection interface.
	  If unsure select "N".

config SND_VMASTER
	bool

config SND_DMA_SGBUF
	def_bool y
	depends on X86

config SND_CTL_LED
	tristate
	select NEW_LEDS if SND_CTL_LED
	select LEDS_TRIGGERS if SND_CTL_LED
	select LEDS_TRIGGER_AUDIO if SND_CTL_LED

source "sound/core/seq/Kconfig"
