# 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_CORE_TEST
	tristate "Sound core KUnit test"
	depends on KUNIT
	select SND_PCM
	default KUNIT_ALL_TESTS
	help
	  This options enables the sound core functions KUnit test.

	  KUnit tests run during boot and output the results to the debug
	  log in TAP format (https://testanything.org/). Only useful for
	  kernel devs running KUnit test harness and are not for inclusion
	  into a production build.

	  For more information on KUnit and unit tests in general, refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.


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_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_UTIMER
	bool "Enable support for userspace-controlled virtual timers"
	depends on SND_TIMER
	help
	  Say Y to enable the support of userspace-controlled timers. These
	  timers are purely virtual, and they are supposed to be triggered
	  from userspace. They could be quite useful when synchronizing the
	  sound timing with userspace applications (for instance, when sending
	  data through snd-aloop).

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

source "sound/core/seq/Kconfig"
