# 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_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_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_VALIDATION
	bool "Perform sanity-checks for each control element access"
	depends on SND_DEBUG
	help
	  Say Y to enable the additional validation of each control element
	  access, including sanity-checks like whether the values returned
	  from the driver are in the proper ranges or the check of the invalid
	  access at out-of-array areas.

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"
