# ALSA soundcard-configuration
config SND_TIMER
	tristate
	depends on SND

config SND_PCM
	tristate
	select SND_TIMER
	depends on SND

config SND_HWDEP
	tristate
	depends on SND

config SND_RAWMIDI
	tristate
	depends on SND

config SND_SEQUENCER
	tristate "Sequencer support"
	depends on SND
	select SND_TIMER
	help
	  Say Y or M to enable MIDI sequencer and router support.  This
	  feature allows routing and enqueueing of MIDI events.  Events
	  can be processed at a given time.

	  Many programs require this feature, so you should enable it
	  unless you know what you're doing.

config SND_SEQ_DUMMY
	tristate "Sequencer dummy client"
	depends on SND_SEQUENCER
	help
	  Say Y here to enable the dummy sequencer client.  This client
	  is a simple MIDI-through client: all normal input events are
	  redirected to the output port immediately.

	  You don't need this unless you want to connect many MIDI
	  devices or applications together.

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

config SND_OSSEMUL
	bool
	depends on SND

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

	  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
	select SND_OSSEMUL
	select SND_PCM
	help
	  To enable OSS digital audio (PCM) emulation (/dev/dsp*), say Y
	  here and read <file:Documentation/sound/alsa/OSS-Emulation.txt>.

	  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_SEQUENCER_OSS
	bool "OSS Sequencer API"
	depends on SND && SND_SEQUENCER
	select SND_OSSEMUL
	help
	  Say Y here to enable OSS sequencer emulation (both
	  /dev/sequencer and /dev/music interfaces).

	  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-seq-oss.

config SND_RTCTIMER
	tristate "RTC Timer support"
	depends on SND && RTC
	select SND_TIMER
	help
	  Say Y here to enable RTC timer support for ALSA.  ALSA uses
	  the RTC timer as a precise timing source and maps the RTC
	  timer to ALSA's timer interface.  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-rtctimer.

config SND_SEQ_RTCTIMER_DEFAULT
	bool "Use RTC as default sequencer timer"
	depends on SND_RTCTIMER && SND_SEQUENCER
	default y
	help
	  Say Y here to use the RTC timer as the default sequencer
	  timer.  This is strongly recommended because it ensures
	  precise MIDI timing even when the system timer runs at less
	  than 1000 Hz.

	  If in doubt, say Y.

config SND_DYNAMIC_MINORS
	bool "Dynamic device file minor numbers (EXPERIMENTAL)"
	depends on SND && EXPERIMENTAL
	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_SUPPORT_OLD_API
	bool "Support old ALSA API"
	depends on SND
	default y
	help
	  Say Y here to support the obsolete ALSA PCM API (ver.0.9.0 rc3
	  or older).

config SND_VERBOSE_PRINTK
	bool "Verbose printk"
	depends on SND
	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"
	depends on SND
	help
	  Say Y here to enable ALSA debug code.

config SND_DEBUG_DETECT
	bool "Debug detection"
	depends on SND_DEBUG
	help
	  Say Y here to enable extra-verbose log messages printed when
	  detecting devices.
