# 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
	  incorrectlly.

	  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_VMASTER
	bool

config SND_DMA_SGBUF
	def_bool y
	depends on X86

source "sound/core/seq/Kconfig"
