# 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_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_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_PROCFS
	bool "Verbose procfs contents"
	depends on SND
	default y
	help
	  Say Y here to include code for verbose procfs contents (provides
          usefull information to developers when a problem occurs). On the
          other side, it makes the ALSA subsystem larger.

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.
