
		Advanced Linux Sound Architecture - Driver
		==========================================
			    Configuration guide


Kernel Configuration
====================

To enable ALSA support you need at least to build the kernel with
primary sound card support (CONFIG_SOUND).  Since ALSA can emulate OSS,
you don't have to choose any of the OSS modules.

Enable "OSS API emulation" (CONFIG_SND_OSSEMUL) and both OSS mixer and
PCM supports if you want to run OSS applications with ALSA.

If you want to support the WaveTable functionality on cards such as
SB Live! then you need to enable "Sequencer support"
(CONFIG_SND_SEQUENCER).

To make ALSA debug messages more verbose, enable the "Verbose printk"
and "Debug" options.  To check for memory leaks, turn on "Debug memory"
too.  "Debug detection" will add checks for the detection of cards.

Please note that all the ALSA ISA drivers support the Linux isapnp API
(if the card supports ISA PnP).  You don't need to configure the cards
using isapnptools.


Creating ALSA devices
=====================

This depends on your distribution, but normally you use the /dev/MAKEDEV
script to create the necessary device nodes.  On some systems you use a
script named 'snddevices'.


Module parameters
=================

The user can load modules with options. If the module supports more than
one card and you have more than one card of the same type then you can
specify multiple values for the option separated by commas.

Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.

  Module snd
  ----------

    The core ALSA module.  It is used by all ALSA card drivers.
    It takes the following options which have global effects.

    major	- major number for sound driver
		- Default: 116
    cards_limit
		- limiting card index for auto-loading (1-8)
		- Default: 1
		- For auto-loading more than one card, specify this
		  option together with snd-card-X aliases.
    slots	- Reserve the slot index for the given driver.
		  This option takes multiple strings.		
		  See "Module Autoloading Support" section for details.
    debug	- Specifies the debug message level
		  (0 = disable debug prints, 1 = normal debug messages,
		   2 = verbose debug messages)
		  This option appears only when CONFIG_SND_DEBUG=y.
		  This option can be dynamically changed via sysfs
		  /sys/modules/snd/parameters/debug file.
  
  Module snd-pcm-oss
  ------------------

    The PCM OSS emulation module.
    This module takes options which change the mapping of devices.

    dsp_map	- PCM device number maps assigned to the 1st OSS device.
		- Default: 0
    adsp_map	- PCM device number maps assigned to the 2st OSS device.
		- Default: 1
    nonblock_open
		- Don't block opening busy PCM devices.  Default: 1

    For example, when dsp_map=2, /dev/dsp will be mapped to PCM #2 of
    the card #0.  Similarly, when adsp_map=0, /dev/adsp will be mapped
    to PCM #0 of the card #0.
    For changing the second or later card, specify the option with
    commas, such like "dsp_map=0,1".

    nonblock_open option is used to change the behavior of the PCM
    regarding opening the device.  When this option is non-zero,
    opening a busy OSS PCM device won't be blocked but return
    immediately with EAGAIN (just like O_NONBLOCK flag).
    
  Module snd-rawmidi
  ------------------

    This module takes options which change the mapping of devices.
    similar to those of the snd-pcm-oss module.

    midi_map	- MIDI device number maps assigned to the 1st OSS device.
		- Default: 0
    amidi_map	- MIDI device number maps assigned to the 2st OSS device.
		- Default: 1

  Common parameters for top sound card modules
  --------------------------------------------

    Each of top level sound card module takes the following options.

    index	- index (slot #) of sound card
		- Values: 0 through 31 or negative
		- If nonnegative, assign that index number
                - if negative, interpret as a bitmask of permissible
		  indices; the first free permitted index is assigned
		- Default: -1
    id		- card ID (identifier or name)
		- Can be up to 15 characters long
		- Default: the card type
		- A directory by this name is created under /proc/asound/
		  containing information about the card
		- This ID can be used instead of the index number in
		  identifying the card
    enable  	- enable card
		- Default: enabled, for PCI and ISA PnP cards

  Module snd-adlib
  ----------------

    Module for AdLib FM cards.

    port	- port # for OPL chip

    This module supports multiple cards. It does not support autoprobe, so
    the port must be specified. For actual AdLib FM cards it will be 0x388.
    Note that this card does not have PCM support and no mixer; only FM
    synthesis.

    Make sure you have "sbiload" from the alsa-tools package available and,
    after loading the module, find out the assigned ALSA sequencer port
    number through "sbiload -l". Example output:

      Port     Client name                       Port name
      64:0     OPL2 FM synth                     OPL2 FM Port

    Load the std.sb and drums.sb patches also supplied by sbiload:

      sbiload -p 64:0 std.sb drums.sb

    If you use this driver to drive an OPL3, you can use std.o3 and drums.o3
    instead. To have the card produce sound, use aplaymidi from alsa-utils:

      aplaymidi -p 64:0 foo.mid

  Module snd-ad1816a
  ------------------

    Module for sound cards based on Analog Devices AD1816A/AD1815 ISA chips.

    clockfreq   - Clock frequency for AD1816A chip (default = 0, 33000Hz)
    
    This module supports multiple cards, autoprobe and PnP.
    
  Module snd-ad1848
  -----------------

    Module for sound cards based on AD1848/AD1847/CS4248 ISA chips.

    port	- port # for AD1848 chip
    irq		- IRQ # for AD1848  chip
    dma1	- DMA # for AD1848 chip (0,1,3)
    
    This module supports multiple cards.  It does not support autoprobe
    thus main port must be specified!!! Other ports are optional.
    
    The power-management is supported.

  Module snd-ad1889
  -----------------

    Module for Analog Devices AD1889 chips.

    ac97_quirk  - AC'97 workaround for strange hardware
                  See the description of intel8x0 module for details.

    This module supports multiple cards.

  Module snd-ali5451
  ------------------

    Module for ALi M5451 PCI chip.

    pcm_channels    - Number of hardware channels assigned for PCM
    spdif           - Support SPDIF I/O
    		    - Default: disabled

    This module supports one chip and autoprobe.

    The power-management is supported.

  Module snd-als100
  -----------------

    Module for sound cards based on Avance Logic ALS100/ALS120 ISA chips.

    This module supports multiple cards, autoprobe and PnP.

    The power-management is supported.

  Module snd-als300
  -----------------

    Module for  Avance Logic ALS300 and ALS300+

    This module supports multiple cards.

    The power-management is supported.

  Module snd-als4000
  ------------------

    Module for sound cards based on Avance Logic ALS4000 PCI chip.

    joystick_port - port # for legacy joystick support.
                    0 = disabled (default), 1 = auto-detect
    
    This module supports multiple cards, autoprobe and PnP.

    The power-management is supported.

  Module snd-atiixp
  -----------------

    Module for ATI IXP 150/200/250/400 AC97 controllers.

    ac97_clock		- AC'97 clock (default = 48000)
    ac97_quirk		- AC'97 workaround for strange hardware
			  See "AC97 Quirk Option" section below.
    ac97_codec		- Workaround to specify which AC'97 codec 
			  instead of probing.  If this works for you
			  file a bug with your `lspci -vn` output.
			  -2  -- Force probing.
			  -1  -- Default behavior.
			  0-2 -- Use the specified codec.
    spdif_aclink	- S/PDIF transfer over AC-link (default = 1)

    This module supports one card and autoprobe.

    ATI IXP has two different methods to control SPDIF output.  One is
    over AC-link and another is over the "direct" SPDIF output.  The
    implementation depends on the motherboard, and you'll need to
    choose the correct one via spdif_aclink module option.

    The power-management is supported.

  Module snd-atiixp-modem
  -----------------------

    Module for ATI IXP 150/200/250 AC97 modem controllers.

    This module supports one card and autoprobe.

    Note: The default index value of this module is -2, i.e. the first
          slot is excluded.

    The power-management is supported.

  Module snd-au8810, snd-au8820, snd-au8830
  -----------------------------------------

    Module for Aureal Vortex, Vortex2 and Advantage device.

    pcifix	- Control PCI workarounds
		  0 = Disable all workarounds
		  1 = Force the PCI latency of the Aureal card to 0xff
		  2 = Force the Extend PCI#2 Internal Master for Efficient
		      Handling of Dummy Requests on the VIA KT133 AGP Bridge
		  3 = Force both settings
		  255 = Autodetect what is required (default)

    This module supports all ADB PCM channels, ac97 mixer, SPDIF, hardware
    EQ, mpu401, gameport. A3D and wavetable support are still in development.
    Development and reverse engineering work is being coordinated at
    http://savannah.nongnu.org/projects/openvortex/
    SPDIF output has a copy of the AC97 codec output, unless you use the
    "spdif" pcm device, which allows raw data passthru.
    The hardware EQ hardware and SPDIF is only present in the Vortex2 and 
    Advantage.

    Note: Some ALSA mixer applications don't handle the SPDIF sample rate 
           control correctly. If you have problems regarding this, try
           another ALSA compliant mixer (alsamixer works).

  Module snd-aw2
  --------------

    Module for Audiowerk2 sound card

    This module supports multiple cards.

  Module snd-azt2320
  ------------------

    Module for sound cards based on Aztech System AZT2320 ISA chip (PnP only).

    This module supports multiple cards, PnP and autoprobe.
    
    The power-management is supported.

  Module snd-azt3328
  ------------------

    Module for sound cards based on Aztech AZF3328 PCI chip.

    joystick	- Enable joystick (default off)

    This module supports multiple cards.

  Module snd-bt87x
  ----------------

    Module for video cards based on Bt87x chips.

    digital_rate - Override the default digital rate (Hz)
    load_all	- Load the driver even if the card model isn't known

    This module supports multiple cards.

    Note: The default index value of this module is -2, i.e. the first
          slot is excluded.

  Module snd-ca0106
  -----------------

    Module for Creative Audigy LS and SB Live 24bit

    This module supports multiple cards.


  Module snd-cmi8330
  ------------------

    Module for sound cards based on C-Media CMI8330 ISA chips.

    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    wssport	- port # for CMI8330 chip (WSS)
    wssirq	- IRQ # for CMI8330 chip (WSS)
    wssdma	- first DMA # for CMI8330 chip (WSS)
    sbport	- port # for CMI8330 chip (SB16)
    sbirq	- IRQ # for CMI8330 chip (SB16)
    sbdma8	- 8bit DMA # for CMI8330 chip (SB16)
    sbdma16	- 16bit DMA # for CMI8330 chip (SB16)
    fmport	- (optional) OPL3 I/O port
    mpuport	- (optional) MPU401 I/O port
    mpuirq	- (optional) MPU401 irq #

    This module supports multiple cards and autoprobe.

    The power-management is supported.

  Module snd-cmipci
  -----------------

    Module for C-Media CMI8338/8738/8768/8770 PCI sound cards.

    mpu_port    - port address of MIDI interface (8338 only):
		  0x300,0x310,0x320,0x330 = legacy port,
		  0 = disable (default)
    fm_port     - port address of OPL-3 FM synthesizer (8x38 only):
		  0x388 = legacy port,
		  1 = integrated PCI port (default on 8738),
		  0 = disable
    soft_ac3    - Software-conversion of raw SPDIF packets (model 033 only)
                  (default = 1)
    joystick_port - Joystick port address (0 = disable, 1 = auto-detect)

    This module supports autoprobe and multiple cards.
    
    The power-management is supported.

  Module snd-cs4231
  -----------------

    Module for sound cards based on CS4231 ISA chips.

    port	- port # for CS4231 chip
    mpu_port	- port # for MPU-401 UART (optional), -1 = disable
    irq		- IRQ # for CS4231 chip
    mpu_irq	- IRQ # for MPU-401 UART
    dma1	- first DMA # for CS4231 chip
    dma2	- second DMA # for CS4231 chip
    
    This module supports multiple cards. This module does not support autoprobe
    thus main port must be specified!!! Other ports are optional.

    The power-management is supported.
    
  Module snd-cs4236
  -----------------

    Module for sound cards based on CS4232/CS4232A,
    	       	     	   	   CS4235/CS4236/CS4236B/CS4237B/
                                   CS4238B/CS4239 ISA chips.

    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    port	- port # for CS4236 chip (PnP setup - 0x534)
    cport	- control port # for CS4236 chip (PnP setup - 0x120,0x210,0xf00)
    mpu_port	- port # for MPU-401 UART (PnP setup - 0x300), -1 = disable
    fm_port	- FM port # for CS4236 chip (PnP setup - 0x388), -1 = disable
    irq		- IRQ # for CS4236 chip (5,7,9,11,12,15)
    mpu_irq	- IRQ # for MPU-401 UART (9,11,12,15)
    dma1	- first DMA # for CS4236 chip (0,1,3)
    dma2	- second DMA # for CS4236 chip (0,1,3), -1 = disable
    
    This module supports multiple cards. This module does not support autoprobe
    (if ISA PnP is not used) thus main port and control port must be
    specified!!! Other ports are optional.

    The power-management is supported.

    This module is aliased as snd-cs4232 since it provides the old
    snd-cs4232 functionality, too.

  Module snd-cs4281
  -----------------

    Module for Cirrus Logic CS4281 soundchip.

    dual_codec	- Secondary codec ID (0 = disable, default)

    This module supports multiple cards.

    The power-management is supported.

  Module snd-cs46xx
  -----------------

    Module for PCI sound cards based on CS4610/CS4612/CS4614/CS4615/CS4622/
				       CS4624/CS4630/CS4280 PCI chips.

    external_amp     - Force to enable external amplifier.
    thinkpad         - Force to enable Thinkpad's CLKRUN control.
    mmap_valid       - Support OSS mmap mode (default = 0).

    This module supports multiple cards and autoprobe.
    Usually external amp and CLKRUN controls are detected automatically
    from PCI sub vendor/device ids.  If they don't work, give the options
    above explicitly.

    The power-management is supported.

  Module snd-cs5530
  _________________

    Module for Cyrix/NatSemi Geode 5530 chip. 
  
  Module snd-cs5535audio
  ----------------------

    Module for multifunction CS5535 companion PCI device

    The power-management is supported.

  Module snd-ctxfi
  ----------------

    Module for Creative Sound Blaster X-Fi boards (20k1 / 20k2 chips)
	* Creative Sound Blaster X-Fi Titanium Fatal1ty Champion Series
	* Creative Sound Blaster X-Fi Titanium Fatal1ty Professional Series
	* Creative Sound Blaster X-Fi Titanium Professional Audio
	* Creative Sound Blaster X-Fi Titanium
	* Creative Sound Blaster X-Fi Elite Pro
	* Creative Sound Blaster X-Fi Platinum
	* Creative Sound Blaster X-Fi Fatal1ty
	* Creative Sound Blaster X-Fi XtremeGamer
	* Creative Sound Blaster X-Fi XtremeMusic

    reference_rate	- reference sample rate, 44100 or 48000 (default)
    multiple		- multiple to ref. sample rate, 1 or 2 (default)

    This module supports multiple cards.

  Module snd-darla20
  ------------------

    Module for Echoaudio Darla20

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-darla24
  ------------------

    Module for Echoaudio Darla24

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-dt019x
  -----------------

    Module for Diamond Technologies DT-019X / Avance Logic ALS-007 (PnP
    only)

    This module supports multiple cards.  This module is enabled only with
    ISA PnP support.

    The power-management is supported.

  Module snd-dummy
  ----------------

    Module for the dummy sound card. This "card" doesn't do any output
    or input, but you may use this module for any application which
    requires a sound card (like RealPlayer).

    pcm_devs       - Number of PCM devices assigned to each card
                     (default = 1, up to 4)
    pcm_substreams - Number of PCM substreams assigned to each PCM
                     (default = 8, up to 16)
    hrtimer        - Use hrtimer (=1, default) or system timer (=0)
    fake_buffer    - Fake buffer allocations (default = 1)

    When multiple PCM devices are created, snd-dummy gives different
    behavior to each PCM device:
      0 = interleaved with mmap support
      1 = non-interleaved with mmap support
      2 = interleaved without mmap 
      3 = non-interleaved without mmap

    As default, snd-dummy drivers doesn't allocate the real buffers
    but either ignores read/write or mmap a single dummy page to all
    buffer pages, in order to save the resouces.  If your apps need
    the read/ written buffer data to be consistent, pass fake_buffer=0
    option.

    The power-management is supported.

  Module snd-echo3g
  -----------------

    Module for Echoaudio 3G cards (Gina3G/Layla3G)

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-emu10k1
  ------------------

    Module for EMU10K1/EMU10k2 based PCI sound cards.
			* Sound Blaster Live!
			* Sound Blaster PCI 512
			* Emu APS (partially supported)
			* Sound Blaster Audigy

    extin   - bitmap of available external inputs for FX8010 (see bellow)
    extout  - bitmap of available external outputs for FX8010 (see bellow)
    seq_ports - allocated sequencer ports (4 by default)
    max_synth_voices - limit of voices used for wavetable (64 by default)
    max_buffer_size  - specifies the maximum size of wavetable/pcm buffers
                       given in MB unit.  Default value is 128.
    enable_ir - enable IR

    This module supports multiple cards and autoprobe.

    Input & Output configurations 			[extin/extout]
	* Creative Card wo/Digital out			[0x0003/0x1f03]
	* Creative Card w/Digital out			[0x0003/0x1f0f]
	* Creative Card w/Digital CD in			[0x000f/0x1f0f]
	* Creative Card wo/Digital out + LiveDrive	[0x3fc3/0x1fc3]
	* Creative Card w/Digital out + LiveDrive	[0x3fc3/0x1fcf]
	* Creative Card w/Digital CD in + LiveDrive	[0x3fcf/0x1fcf]
	* Creative Card wo/Digital out + Digital I/O 2  [0x0fc3/0x1f0f]
	* Creative Card w/Digital out + Digital I/O 2	[0x0fc3/0x1f0f]
	* Creative Card w/Digital CD in + Digital I/O 2	[0x0fcf/0x1f0f]
        * Creative Card 5.1/w Digital out + LiveDrive	[0x3fc3/0x1fff]
	* Creative Card 5.1 (c) 2003			[0x3fc3/0x7cff]
        * Creative Card all ins and outs		[0x3fff/0x7fff]
    
    The power-management is supported.

  Module snd-emu10k1x
  -------------------

    Module for Creative Emu10k1X (SB Live Dell OEM version)

    This module supports multiple cards.

  Module snd-ens1370
  ------------------

    Module for Ensoniq AudioPCI ES1370 PCI sound cards.
			* SoundBlaster PCI 64
			* SoundBlaster PCI 128

    joystick		- Enable joystick (default off)

    This module supports multiple cards and autoprobe.
    
    The power-management is supported.

  Module snd-ens1371
  ------------------

    Module for Ensoniq AudioPCI ES1371 PCI sound cards.
			* SoundBlaster PCI 64
			* SoundBlaster PCI 128
			* SoundBlaster Vibra PCI

    joystick_port	- port # for joystick (0x200,0x208,0x210,0x218),
			  0 = disable (default), 1 = auto-detect

    This module supports multiple cards and autoprobe.
    
    The power-management is supported.

  Module snd-es968
  ----------------

    Module for sound cards based on ESS ES968 chip (PnP only).

    This module supports multiple cards, PnP and autoprobe.
    
    The power-management is supported.

  Module snd-es1688
  -----------------

    Module for ESS AudioDrive ES-1688 and ES-688 sound cards.

    port	- port # for ES-1688 chip (0x220,0x240,0x260)
    fm_port	- port # for OPL3 (option; share the same port as default)
    mpu_port	- port # for MPU-401 port (0x300,0x310,0x320,0x330), -1 = disable (default)
    irq		- IRQ # for ES-1688 chip (5,7,9,10)
    mpu_irq	- IRQ # for MPU-401 port (5,7,9,10)
    dma8	- DMA # for ES-1688 chip (0,1,3)

    This module supports multiple cards and autoprobe (without MPU-401 port).

  Module snd-es18xx
  -----------------

    Module for ESS AudioDrive ES-18xx sound cards.

    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    port	- port # for ES-18xx chip (0x220,0x240,0x260)
    mpu_port	- port # for MPU-401 port (0x300,0x310,0x320,0x330), -1 = disable (default)
    fm_port	- port # for FM (optional, not used)
    irq		- IRQ # for ES-18xx chip (5,7,9,10)
    dma1	- first DMA # for ES-18xx chip (0,1,3)
    dma2	- first DMA # for ES-18xx chip (0,1,3)

    This module supports multiple cards, ISA PnP and autoprobe (without MPU-401
    port if native ISA PnP routines are not used).
    When dma2 is equal with dma1, the driver works as half-duplex.

    The power-management is supported.

  Module snd-es1938
  -----------------

    Module for sound cards based on ESS Solo-1 (ES1938,ES1946) chips.

    This module supports multiple cards and autoprobe.

    The power-management is supported.

  Module snd-es1968
  -----------------

    Module for sound cards based on ESS Maestro-1/2/2E (ES1968/ES1978) chips.

    total_bufsize	- total buffer size in kB (1-4096kB)
    pcm_substreams_p	- playback channels (1-8, default=2)
    pcm_substreams_c	- capture channels (1-8, default=0)
    clock		- clock (0 = auto-detection)
    use_pm		- support the power-management (0 = off, 1 = on,
			  2 = auto (default))
    enable_mpu		- enable MPU401 (0 = off, 1 = on, 2 = auto (default))
    joystick		- enable joystick (default off)       

    This module supports multiple cards and autoprobe.

    The power-management is supported.

  Module snd-fm801
  ----------------

    Module for ForteMedia FM801 based PCI sound cards.

    tea575x_tuner       - Enable TEA575x tuner
                          - 1 = MediaForte 256-PCS
                          - 2 = MediaForte 256-PCPR
                          - 3 = MediaForte 64-PCR  
                          - High 16-bits are video (radio) device number + 1
                          - example: 0x10002 (MediaForte 256-PCPR, device 1)

    This module supports multiple cards and autoprobe.
    
    The power-management is supported.

  Module snd-gina20
  -----------------

    Module for Echoaudio Gina20

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-gina24
  -----------------

    Module for Echoaudio Gina24

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-gusclassic
  ---------------------

    Module for Gravis UltraSound Classic sound card.

    port	- port # for GF1 chip (0x220,0x230,0x240,0x250,0x260)
    irq		- IRQ # for GF1 chip (3,5,9,11,12,15)
    dma1	- DMA # for GF1 chip (1,3,5,6,7)
    dma2	- DMA # for GF1 chip (1,3,5,6,7,-1=disable)
    joystick_dac - 0 to 31, (0.59V-4.52V or 0.389V-2.98V)
    voices	- GF1 voices limit (14-32)
    pcm_voices	- reserved PCM voices

    This module supports multiple cards and autoprobe.

  Module snd-gusextreme
  ---------------------

    Module for Gravis UltraSound Extreme (Synergy ViperMax) sound card.

    port	- port # for ES-1688 chip (0x220,0x230,0x240,0x250,0x260)
    gf1_port	- port # for GF1 chip (0x210,0x220,0x230,0x240,0x250,0x260,0x270)
    mpu_port	- port # for MPU-401 port (0x300,0x310,0x320,0x330), -1 = disable
    irq		- IRQ # for ES-1688 chip (5,7,9,10)
    gf1_irq	- IRQ # for GF1 chip (3,5,9,11,12,15)
    mpu_irq	- IRQ # for MPU-401 port (5,7,9,10)
    dma8	- DMA # for ES-1688 chip (0,1,3)
    dma1	- DMA # for GF1 chip (1,3,5,6,7)
    joystick_dac - 0 to 31, (0.59V-4.52V or 0.389V-2.98V)
    voices	- GF1 voices limit (14-32)
    pcm_voices	- reserved PCM voices

    This module supports multiple cards and autoprobe (without MPU-401 port).

  Module snd-gusmax
  -----------------

    Module for Gravis UltraSound MAX sound card.

    port	- port # for GF1 chip (0x220,0x230,0x240,0x250,0x260)
    irq		- IRQ # for GF1 chip (3,5,9,11,12,15)
    dma1	- DMA # for GF1 chip (1,3,5,6,7)
    dma2	- DMA # for GF1 chip (1,3,5,6,7,-1=disable)
    joystick_dac - 0 to 31, (0.59V-4.52V or 0.389V-2.98V)
    voices	- GF1 voices limit (14-32)
    pcm_voices	- reserved PCM voices

    This module supports multiple cards and autoprobe.
    
  Module snd-hda-intel
  --------------------

    Module for Intel HD Audio (ICH6, ICH6M, ESB2, ICH7, ICH8, ICH9, ICH10,
			PCH, SCH),
		ATI SB450, SB600, R600, RS600, RS690, RS780, RV610, RV620,
			RV630, RV635, RV670, RV770,
		VIA VT8251/VT8237A,
		SIS966, ULI M5461

    [Multiple options for each card instance]
    model	- force the model name
    position_fix - Fix DMA pointer (0 = auto, 1 = use LPIB, 2 = POSBUF)
    probe_mask  - Bitmask to probe codecs (default = -1, meaning all slots)
    		  When the bit 8 (0x100) is set, the lower 8 bits are used
		  as the "fixed" codec slots; i.e. the driver probes the
		  slots regardless what hardware reports back
    probe_only	- Only probing and no codec initialization (default=off);
		  Useful to check the initial codec status for debugging
    bdl_pos_adj	- Specifies the DMA IRQ timing delay in samples.
		Passing -1 will make the driver to choose the appropriate
		value based on the controller chip.
    patch	- Specifies the early "patch" files to modify the HD-audio
    		setup before initializing the codecs.  This option is
		available only when CONFIG_SND_HDA_PATCH_LOADER=y is set.
		See HD-Audio.txt for details.
    
    [Single (global) options]
    single_cmd  - Use single immediate commands to communicate with
		codecs (for debugging only)
    enable_msi	- Enable Message Signaled Interrupt (MSI) (default = off)
    power_save	- Automatic power-saving timeout (in second, 0 =
		disable)
    power_save_controller - Reset HD-audio controller in power-saving mode
		(default = on)

    This module supports multiple cards and autoprobe.
    
    See Documentation/sound/alsa/HD-Audio.txt for more details about
    HD-audio driver.

    Each codec may have a model table for different configurations.
    If your machine isn't listed there, the default (usually minimal)
    configuration is set up.  You can pass "model=<name>" option to
    specify a certain model in such a case.  There are different
    models depending on the codec chip.  The list of available models
    is found in HD-Audio-Models.txt

    The model name "genric" is treated as a special case.  When this
    model is given, the driver uses the generic codec parser without
    "codec-patch".  It's sometimes good for testing and debugging.

    If the default configuration doesn't work and one of the above
    matches with your device, report it together with alsa-info.sh
    output (with --no-upload option) to kernel bugzilla or alsa-devel
    ML (see the section "Links and Addresses").

    power_save and power_save_controller options are for power-saving
    mode.  See powersave.txt for details.

    Note 2: If you get click noises on output, try the module option
	    position_fix=1 or 2.  position_fix=1 will use the SD_LPIB
	    register value without FIFO size correction as the current
	    DMA pointer.  position_fix=2 will make the driver to use
	    the position buffer instead of reading SD_LPIB register.
	    (Usually SD_LPIB register is more accurate than the
	    position buffer.)

    NB: If you get many "azx_get_response timeout" messages at
    loading, it's likely a problem of interrupts (e.g. ACPI irq
    routing).  Try to boot with options like "pci=noacpi".  Also, you
    can try "single_cmd=1" module option.  This will switch the
    communication method between HDA controller and codecs to the
    single immediate commands instead of CORB/RIRB.  Basically, the
    single command mode is provided only for BIOS, and you won't get
    unsolicited events, too.  But, at least, this works independently
    from the irq.  Remember this is a last resort, and should be
    avoided as much as possible...
    
    MORE NOTES ON "azx_get_response timeout" PROBLEMS:
    On some hardwares, you may need to add a proper probe_mask option
    to avoid the "azx_get_response timeout" problem above, instead.
    This occurs when the access to non-existing or non-working codec slot
    (likely a modem one) causes a stall of the communication via HD-audio
    bus.  You can see which codec slots are probed by enabling
    CONFIG_SND_DEBUG_VERBOSE, or simply from the file name of the codec
    proc files.  Then limit the slots to probe by probe_mask option.
    For example, probe_mask=1 means to probe only the first slot, and
    probe_mask=4 means only the third slot.

    The power-management is supported.

  Module snd-hdsp
  ---------------

    Module for RME Hammerfall DSP audio interface(s)

    This module supports multiple cards.

    Note: The firmware data can be automatically loaded via hotplug
          when CONFIG_FW_LOADER is set.  Otherwise, you need to load
          the firmware via hdsploader utility included in alsa-tools
          package.
          The firmware data is found in alsa-firmware package.

    Note: snd-page-alloc module does the job which snd-hammerfall-mem
          module did formerly.  It will allocate the buffers in advance
          when any HDSP cards are found.  To make the buffer
          allocation sure, load snd-page-alloc module in the early
          stage of boot sequence.  See "Early Buffer Allocation"
	  section.

  Module snd-hdspm
  ----------------

    Module for RME HDSP MADI board.

    precise_ptr		- Enable precise pointer, or disable.
    line_outs_monitor	- Send playback streams to analog outs by default.
    enable_monitor	- Enable Analog Out on Channel 63/64 by default.

    See hdspm.txt for details.

  Module snd-hifier
  -----------------

    Module for the MediaTek/TempoTec HiFier Fantasia sound card.

    This module supports autoprobe and multiple cards.

  Module snd-ice1712
  ------------------

    Module for Envy24 (ICE1712) based PCI sound cards.
			* MidiMan M Audio Delta 1010
			* MidiMan M Audio Delta 1010LT
			* MidiMan M Audio Delta DiO 2496
			* MidiMan M Audio Delta 66
			* MidiMan M Audio Delta 44
			* MidiMan M Audio Delta 410
			* MidiMan M Audio Audiophile 2496
                        * TerraTec EWS 88MT
                        * TerraTec EWS 88D
                        * TerraTec EWX 24/96
                        * TerraTec DMX 6Fire
			* TerraTec Phase 88
                        * Hoontech SoundTrack DSP 24
                        * Hoontech SoundTrack DSP 24 Value
                        * Hoontech SoundTrack DSP 24 Media 7.1
			* Event Electronics, EZ8
                        * Digigram VX442
			* Lionstracs, Mediastaton
			* Terrasoniq TS 88

    model       - Use the given board model, one of the following:
		  delta1010, dio2496, delta66, delta44, audiophile, delta410,
		  delta1010lt, vx442, ewx2496, ews88mt, ews88mt_new, ews88d,
		  dmx6fire, dsp24, dsp24_value, dsp24_71, ez8,
		  phase88, mediastation
    omni	- Omni I/O support for MidiMan M-Audio Delta44/66
    cs8427_timeout - reset timeout for the CS8427 chip (S/PDIF transceiver)
                     in msec resolution, default value is 500 (0.5 sec)

    This module supports multiple cards and autoprobe. Note: The consumer part
    is not used with all Envy24 based cards (for example in the MidiMan Delta
    serie).

    Note: The supported board is detected by reading EEPROM or PCI
	  SSID (if EEPROM isn't available).  You can override the
	  model by passing "model" module option in case that the
	  driver isn't configured properly or you want to try another
	  type for testing.

  Module snd-ice1724
  ------------------

    Module for Envy24HT (VT/ICE1724), Envy24PT (VT1720) based PCI sound cards.
			* MidiMan M Audio Revolution 5.1
			* MidiMan M Audio Revolution 7.1
			* MidiMan M Audio Audiophile 192
			* AMP Ltd AUDIO2000
			* TerraTec Aureon 5.1 Sky
			* TerraTec Aureon 7.1 Space
			* TerraTec Aureon 7.1 Universe
			* TerraTec Phase 22
			* TerraTec Phase 28
			* AudioTrak Prodigy 7.1
			* AudioTrak Prodigy 7.1 LT
			* AudioTrak Prodigy 7.1 XT
			* AudioTrak Prodigy 7.1 HIFI
			* AudioTrak Prodigy 7.1 HD2
			* AudioTrak Prodigy 192
			* Pontis MS300
			* Albatron K8X800 Pro II 
			* Chaintech ZNF3-150
			* Chaintech ZNF3-250
			* Chaintech 9CJS
			* Chaintech AV-710
			* Shuttle SN25P
			* Onkyo SE-90PCI
			* Onkyo SE-200PCI
			* ESI Juli@
			* ESI Maya44
			* Hercules Fortissimo IV
			* EGO-SYS WaveTerminal 192M

    model       - Use the given board model, one of the following:
		  revo51, revo71, amp2000, prodigy71, prodigy71lt,
		  prodigy71xt, prodigy71hifi, prodigyhd2, prodigy192,
		  juli, aureon51, aureon71, universe, ap192, k8x800,
		  phase22, phase28, ms300, av710, se200pci, se90pci,
		  fortissimo4, sn25p, WT192M, maya44

    This module supports multiple cards and autoprobe.

    Note: The supported board is detected by reading EEPROM or PCI
	  SSID (if EEPROM isn't available).  You can override the
	  model by passing "model" module option in case that the
	  driver isn't configured properly or you want to try another
	  type for testing.

  Module snd-indigo
  -----------------

    Module for Echoaudio Indigo

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-indigodj
  -------------------

    Module for Echoaudio Indigo DJ

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-indigoio
  -------------------

    Module for Echoaudio Indigo IO

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-intel8x0
  -------------------

    Module for AC'97 motherboards from Intel and compatibles.
			* Intel i810/810E, i815, i820, i830, i84x, MX440
				ICH5, ICH6, ICH7, 6300ESB, ESB2
			* SiS 7012 (SiS 735)
			* NVidia NForce, NForce2, NForce3, MCP04, CK804
				 CK8, CK8S, MCP501
			* AMD AMD768, AMD8111
			* ALi m5455

    ac97_clock	  - AC'97 codec clock base (0 = auto-detect)
    ac97_quirk    - AC'97 workaround for strange hardware
		    See "AC97 Quirk Option" section below.
    buggy_irq     - Enable workaround for buggy interrupts on some
                    motherboards (default yes on nForce chips,
		    otherwise off)
    buggy_semaphore - Enable workaround for hardwares with buggy
		    semaphores (e.g. on some ASUS laptops)
		    (default off)
    spdif_aclink  - Use S/PDIF over AC-link instead of direct connection
		    from the controller chip
		    (0 = off, 1 = on, -1 = default)

    This module supports one chip and autoprobe.

    Note: the latest driver supports auto-detection of chip clock.
    if you still encounter too fast playback, specify the clock
    explicitly via the module option "ac97_clock=41194".

    Joystick/MIDI ports are not supported by this driver.  If your
    motherboard has these devices, use the ns558 or snd-mpu401
    modules, respectively.

    The power-management is supported.
    
  Module snd-intel8x0m
  --------------------

    Module for Intel ICH (i8x0) chipset MC97 modems.
			* Intel i810/810E, i815, i820, i830, i84x, MX440
				ICH5, ICH6, ICH7
			* SiS 7013 (SiS 735)
			* NVidia NForce, NForce2, NForce2s, NForce3
			* AMD AMD8111
			* ALi m5455

    ac97_clock	  - AC'97 codec clock base (0 = auto-detect)

    This module supports one card and autoprobe.

    Note: The default index value of this module is -2, i.e. the first
          slot is excluded.

    The power-management is supported.

  Module snd-interwave
  --------------------

    Module for Gravis UltraSound PnP, Dynasonic 3-D/Pro, STB Sound Rage 32
    and other sound cards based on AMD InterWave (tm) chip.
  
    joystick_dac - 0 to 31, (0.59V-4.52V or 0.389V-2.98V)
    midi	- 1 = MIDI UART enable, 0 = MIDI UART disable (default)
    pcm_voices	- reserved PCM voices for the synthesizer (default 2)
    effect	- 1 = InterWave effects enable (default 0);
                  requires 8 voices
    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    port	- port # for InterWave chip (0x210,0x220,0x230,0x240,0x250,0x260)
    irq		- IRQ # for InterWave chip (3,5,9,11,12,15)
    dma1	- DMA # for InterWave chip (0,1,3,5,6,7)
    dma2	- DMA # for InterWave chip (0,1,3,5,6,7,-1=disable)

    This module supports multiple cards, autoprobe and ISA PnP.

  Module snd-interwave-stb
  ------------------------

    Module for UltraSound 32-Pro (sound card from STB used by Compaq)
    and other sound cards based on AMD InterWave (tm) chip with TEA6330T
    circuit for extended control of bass, treble and master volume.
  
    joystick_dac - 0 to 31, (0.59V-4.52V or 0.389V-2.98V)
    midi	- 1 = MIDI UART enable, 0 = MIDI UART disable (default)
    pcm_voices	- reserved PCM voices for the synthesizer (default 2)
    effect	- 1 = InterWave effects enable (default 0);
                  requires 8 voices
    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    port	- port # for InterWave chip (0x210,0x220,0x230,0x240,0x250,0x260)
    port_tc	- tone control (i2c bus) port # for TEA6330T chip (0x350,0x360,0x370,0x380)
    irq		- IRQ # for InterWave chip (3,5,9,11,12,15)
    dma1	- DMA # for InterWave chip (0,1,3,5,6,7)
    dma2	- DMA # for InterWave chip (0,1,3,5,6,7,-1=disable)

    This module supports multiple cards, autoprobe and ISA PnP.

  Module snd-korg1212
  -------------------

    Module for Korg 1212 IO PCI card

    This module supports multiple cards.

  Module snd-layla20
  ------------------

    Module for Echoaudio Layla20

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-layla24
  ------------------

    Module for Echoaudio Layla24

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-lx6464es
  -------------------

    Module for Digigram LX6464ES boards

    This module supports multiple cards.

  Module snd-maestro3
  -------------------

    Module for Allegro/Maestro3 chips

    external_amp     - enable external amp (enabled by default)
    amp_gpio         - GPIO pin number for external amp (0-15) or
                       -1 for default pin (8 for allegro, 1 for
                       others) 

    This module supports autoprobe and multiple chips.

    Note: the binding of amplifier is dependent on hardware.
    If there is no sound even though all channels are unmuted, try to
    specify other gpio connection via amp_gpio option. 
    For example, a Panasonic notebook might need "amp_gpio=0x0d"
    option.

    The power-management is supported.

  Module snd-mia
  ---------------

    Module for Echoaudio Mia

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-miro
  ---------------

    Module for Miro soundcards: miroSOUND PCM 1 pro, 
				miroSOUND PCM 12,
				miroSOUND PCM 20 Radio.

    port	- Port # (0x530,0x604,0xe80,0xf40)
    irq		- IRQ # (5,7,9,10,11)
    dma1	- 1st dma # (0,1,3)
    dma2	- 2nd dma # (0,1)
    mpu_port	- MPU-401 port # (0x300,0x310,0x320,0x330)
    mpu_irq	- MPU-401 irq # (5,7,9,10)
    fm_port	- FM Port # (0x388)
    wss		- enable WSS mode
    ide		- enable onboard ide support

  Module snd-mixart
  -----------------

    Module for Digigram miXart8 sound cards.

    This module supports multiple cards.
    Note: One miXart8 board will be represented as 4 alsa cards.
          See MIXART.txt for details.

    When the driver is compiled as a module and the hotplug firmware
    is supported, the firmware data is loaded via hotplug automatically.
    Install the necessary firmware files in alsa-firmware package.
    When no hotplug fw loader is available, you need to load the
    firmware via mixartloader utility in alsa-tools package.

  Module snd-mona
  ---------------

    Module for Echoaudio Mona

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.

  Module snd-mpu401
  -----------------

    Module for MPU-401 UART devices.

    port	- port number or -1 (disable)
    irq		- IRQ number or -1 (disable)
    pnp		- PnP detection - 0 = disable, 1 = enable (default)

    This module supports multiple devices and PnP.
    
  Module snd-msnd-classic
  -----------------------

    Module for Turtle Beach MultiSound Classic, Tahiti or Monterey
    soundcards.

    io		- Port # for msnd-classic card
    irq		- IRQ # for msnd-classic card
    mem		- Memory address (0xb0000, 0xc8000, 0xd0000, 0xd8000,
		  0xe0000 or 0xe8000)
    write_ndelay - enable write ndelay (default = 1)
    calibrate_signal - calibrate signal (default = 0)
    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)
    digital	- Digital daughterboard present (default = 0)
    cfg		- Config port (0x250, 0x260 or 0x270) default = PnP
    reset	- Reset all devices
    mpu_io	- MPU401 I/O port
    mpu_irq	- MPU401 irq#
    ide_io0	- IDE port #0
    ide_io1	- IDE port #1
    ide_irq	- IDE irq#
    joystick_io	- Joystick I/O port

    The driver requires firmware files "turtlebeach/msndinit.bin" and
    "turtlebeach/msndperm.bin" in the proper firmware directory.

    See Documentation/sound/oss/MultiSound for important information
    about this driver.  Note that it has been discontinued, but the 
    Voyetra Turtle Beach knowledge base entry for it is still available
    at
	http://www.turtlebeach.com/site/kb_ftp/790.asp

  Module snd-msnd-pinnacle
  ------------------------

    Module for Turtle Beach MultiSound Pinnacle/Fiji soundcards.

    io		- Port # for pinnacle/fiji card
    irq		- IRQ # for pinnalce/fiji card
    mem		- Memory address (0xb0000, 0xc8000, 0xd0000, 0xd8000,
		  0xe0000 or 0xe8000)
    write_ndelay - enable write ndelay (default = 1)
    calibrate_signal - calibrate signal (default = 0)
    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)

    The driver requires firmware files "turtlebeach/pndspini.bin" and
    "turtlebeach/pndsperm.bin" in the proper firmware directory.

  Module snd-mtpav
  ----------------

    Module for MOTU MidiTimePiece AV multiport MIDI (on the parallel
    port).

    port	- I/O port # for MTPAV (0x378,0x278, default=0x378)
    irq		- IRQ # for MTPAV (7,5, default=7)
    hwports	- number of supported hardware ports, default=8.
    
    Module supports only 1 card.  This module has no enable option.

  Module snd-mts64
  ----------------

    Module for Ego Systems (ESI) Miditerminal 4140

    This module supports multiple devices.
    Requires parport (CONFIG_PARPORT).

  Module snd-nm256
  ----------------

    Module for NeoMagic NM256AV/ZX chips

    playback_bufsize - max playback frame size in kB (4-128kB)
    capture_bufsize  - max capture frame size in kB (4-128kB)
    force_ac97       - 0 or 1 (disabled by default)
    buffer_top       - specify buffer top address
    use_cache        - 0 or 1 (disabled by default)
    vaio_hack        - alias buffer_top=0x25a800
    reset_workaround - enable AC97 RESET workaround for some laptops
    reset_workaround2 - enable extended AC97 RESET workaround for some
		      other laptops

    This module supports one chip and autoprobe.

    The power-management is supported.

    Note: on some notebooks the buffer address cannot be detected
    automatically, or causes hang-up during initialization.
    In such a case, specify the buffer top address explicitly via
    the buffer_top option.
    For example,
      Sony F250: buffer_top=0x25a800
      Sony F270: buffer_top=0x272800
    The driver supports only ac97 codec.  It's possible to force
    to initialize/use ac97 although it's not detected.  In such a
    case, use force_ac97=1 option - but *NO* guarantee whether it
    works!

    Note: The NM256 chip can be linked internally with non-AC97
    codecs.  This driver supports only the AC97 codec, and won't work
    with machines with other (most likely CS423x or OPL3SAx) chips,
    even though the device is detected in lspci.  In such a case, try
    other drivers, e.g. snd-cs4232 or snd-opl3sa2.  Some has ISA-PnP
    but some doesn't have ISA PnP.  You'll need to specify isapnp=0
    and proper hardware parameters in the case without ISA PnP.

    Note: some laptops need a workaround for AC97 RESET.  For the
    known hardware like Dell Latitude LS and Sony PCG-F305, this
    workaround is enabled automatically.  For other laptops with a
    hard freeze, you can try reset_workaround=1 option.

    Note: Dell Latitude CSx laptops have another problem regarding
    AC97 RESET.  On these laptops, reset_workaround2 option is
    turned on as default.  This option is worth to try if the
    previous reset_workaround option doesn't help.

    Note: This driver is really crappy.  It's a porting from the
    OSS driver, which is a result of black-magic reverse engineering.
    The detection of codec will fail if the driver is loaded *after*
    X-server as described above.  You might be able to force to load
    the module, but it may result in hang-up.   Hence, make sure that
    you load this module *before* X if you encounter this kind of
    problem.

  Module snd-opl3sa2
  ------------------

    Module for Yamaha OPL3-SA2/SA3 sound cards.

    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    port	- control port # for OPL3-SA chip (0x370)
    sb_port	- SB port # for OPL3-SA chip (0x220,0x240)
    wss_port	- WSS port # for OPL3-SA chip (0x530,0xe80,0xf40,0x604)
    midi_port	- port # for MPU-401 UART (0x300,0x330), -1 = disable
    fm_port	- FM port # for OPL3-SA chip (0x388), -1 = disable
    irq		- IRQ # for OPL3-SA chip (5,7,9,10)
    dma1	- first DMA # for Yamaha OPL3-SA chip (0,1,3)
    dma2	- second DMA # for Yamaha OPL3-SA chip (0,1,3), -1 = disable
    
    This module supports multiple cards and ISA PnP.  It does not support
    autoprobe (if ISA PnP is not used) thus all ports must be specified!!!
    
    The power-management is supported.

  Module snd-opti92x-ad1848
  -------------------------

    Module for sound cards based on OPTi 82c92x and Analog Devices AD1848 chips.
    Module works with OAK Mozart cards as well.
    
    isapnp    - ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    port      - port # for WSS chip (0x530,0xe80,0xf40,0x604)
    mpu_port  - port # for MPU-401 UART (0x300,0x310,0x320,0x330)
    fm_port   - port # for OPL3 device (0x388)
    irq       - IRQ # for WSS chip (5,7,9,10,11)
    mpu_irq   - IRQ # for MPU-401 UART (5,7,9,10)
    dma1      - first DMA # for WSS chip (0,1,3)

    This module supports only one card, autoprobe and PnP.

  Module snd-opti92x-cs4231
  -------------------------

    Module for sound cards based on OPTi 82c92x and Crystal CS4231 chips.
    
    isapnp    - ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    port      - port # for WSS chip (0x530,0xe80,0xf40,0x604)
    mpu_port  - port # for MPU-401 UART (0x300,0x310,0x320,0x330)
    fm_port   - port # for OPL3 device (0x388)
    irq       - IRQ # for WSS chip (5,7,9,10,11)
    mpu_irq   - IRQ # for MPU-401 UART (5,7,9,10)
    dma1      - first DMA # for WSS chip (0,1,3)
    dma2      - second DMA # for WSS chip (0,1,3)

    This module supports only one card, autoprobe and PnP.

  Module snd-opti93x
  ------------------

    Module for sound cards based on OPTi 82c93x chips.
    
    isapnp    - ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    port      - port # for WSS chip (0x530,0xe80,0xf40,0x604)
    mpu_port  - port # for MPU-401 UART (0x300,0x310,0x320,0x330)
    fm_port   - port # for OPL3 device (0x388)
    irq       - IRQ # for WSS chip (5,7,9,10,11)
    mpu_irq   - IRQ # for MPU-401 UART (5,7,9,10)
    dma1      - first DMA # for WSS chip (0,1,3)
    dma2      - second DMA # for WSS chip (0,1,3)

    This module supports only one card, autoprobe and PnP.

  Module snd-oxygen
  -----------------

    Module for sound cards based on the C-Media CMI8788 chip:
    * Asound A-8788
    * AuzenTech X-Meridian
    * Bgears b-Enspirer
    * Club3D Theatron DTS
    * HT-Omega Claro (plus)
    * HT-Omega Claro halo (XT)
    * Razer Barracuda AC-1
    * Sondigo Inferno

    This module supports autoprobe and multiple cards.

  Module snd-pcsp
  -----------------

    Module for internal PC-Speaker.

    nopcm	- Disable PC-Speaker PCM sound. Only beeps remain.
    nforce_wa	- enable NForce chipset workaround. Expect bad sound.

    This module supports system beeps, some kind of PCM playback and
    even a few mixer controls.

  Module snd-pcxhr
  ----------------

    Module for Digigram PCXHR boards

    This module supports multiple cards.

  Module snd-portman2x4
  ---------------------

    Module for Midiman Portman 2x4 parallel port MIDI interface

    This module supports multiple cards.

  Module snd-powermac (on ppc only)
  ---------------------------------

    Module for PowerMac, iMac and iBook on-board soundchips

    enable_beep     - enable beep using PCM (enabled as default)

    Module supports autoprobe a chip.

    Note: the driver may have problems regarding endianess.

    The power-management is supported.

  Module snd-pxa2xx-ac97 (on arm only)
  ------------------------------------

    Module for AC97 driver for the Intel PXA2xx chip

    For ARM architecture only.

    The power-management is supported.

  Module snd-riptide
  ------------------

    Module for Conexant Riptide chip

      joystick_port	- Joystick port # (default: 0x200)
      mpu_port		- MPU401 port # (default: 0x330)
      opl3_port		- OPL3 port # (default: 0x388)

    This module supports multiple cards.
    The driver requires the firmware loader support on kernel.
    You need to install the firmware file "riptide.hex" to the standard
    firmware path (e.g. /lib/firmware).

  Module snd-rme32
  ----------------

    Module for RME Digi32, Digi32 Pro and Digi32/8 (Sek'd Prodif32, 
    Prodif96 and Prodif Gold) sound cards.

    This module supports multiple cards.

  Module snd-rme96
  ----------------

    Module for RME Digi96, Digi96/8 and Digi96/8 PRO/PAD/PST sound cards.

    This module supports multiple cards.

  Module snd-rme9652
  ------------------

    Module for RME Digi9652 (Hammerfall, Hammerfall-Light) sound cards.

    precise_ptr	- Enable precise pointer (doesn't work reliably).
		  (default = 0)

    This module supports multiple cards.

    Note: snd-page-alloc module does the job which snd-hammerfall-mem
          module did formerly.  It will allocate the buffers in advance
          when any RME9652 cards are found.  To make the buffer
          allocation sure, load snd-page-alloc module in the early
          stage of boot sequence.  See "Early Buffer Allocation"
	  section.

  Module snd-sa11xx-uda1341 (on arm only)
  ---------------------------------------

    Module for Philips UDA1341TS on Compaq iPAQ H3600 sound card.

    Module supports only one card.
    Module has no enable and index options.

    The power-management is supported.

  Module snd-sb8
  --------------

    Module for 8-bit SoundBlaster cards: SoundBlaster 1.0,
					 SoundBlaster 2.0,
					 SoundBlaster Pro

    port	- port # for SB DSP chip (0x220,0x240,0x260)
    irq		- IRQ # for SB DSP chip (5,7,9,10)
    dma8	- DMA # for SB DSP chip (1,3)

    This module supports multiple cards and autoprobe.
    
    The power-management is supported.

  Module snd-sb16 and snd-sbawe
  -----------------------------

    Module for 16-bit SoundBlaster cards: SoundBlaster 16 (PnP),
					  SoundBlaster AWE 32 (PnP),
					  SoundBlaster AWE 64 PnP

    mic_agc	- Mic Auto-Gain-Control - 0 = disable, 1 = enable (default)
    csp		- ASP/CSP chip support - 0 = disable (default), 1 = enable
    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    port	- port # for SB DSP 4.x chip (0x220,0x240,0x260)
    mpu_port	- port # for MPU-401 UART (0x300,0x330), -1 = disable
    awe_port	- base port # for EMU8000 synthesizer (0x620,0x640,0x660)
                   (snd-sbawe module only)
    irq		- IRQ # for SB DSP 4.x chip (5,7,9,10)
    dma8	- 8-bit DMA # for SB DSP 4.x chip (0,1,3)
    dma16	- 16-bit DMA # for SB DSP 4.x chip (5,6,7)
    
    This module supports multiple cards, autoprobe and ISA PnP.

    Note: To use Vibra16X cards in 16-bit half duplex mode, you must
          disable 16bit DMA with dma16 = -1 module parameter.
          Also, all Sound Blaster 16 type cards can operate in 16-bit
          half duplex mode through 8-bit DMA channel by disabling their
          16-bit DMA channel.
    
    The power-management is supported.

  Module snd-sc6000
  -----------------

    Module for Gallant SC-6000 soundcard and later models: SC-6600
    and SC-7000.

    port	- Port # (0x220 or 0x240)
    mss_port	- MSS Port # (0x530 or 0xe80)
    irq		- IRQ # (5,7,9,10,11)
    mpu_irq	- MPU-401 IRQ # (5,7,9,10) ,0 - no MPU-401 irq
    dma		- DMA # (1,3,0)
    joystick	- Enable gameport - 0 = disable (default), 1 = enable

    This module supports multiple cards.

    This card is also known as Audio Excel DSP 16 or Zoltrix AV302.

  Module snd-sgalaxy
  ------------------

    Module for Aztech Sound Galaxy sound card.

    sbport	- Port # for SB16 interface (0x220,0x240)
    wssport	- Port # for WSS interface (0x530,0xe80,0xf40,0x604)
    irq		- IRQ # (7,9,10,11)
    dma1	- DMA #

    This module supports multiple cards.

    The power-management is supported.

  Module snd-sscape
  -----------------

    Module for ENSONIQ SoundScape cards.

    port	- Port # (PnP setup)
    wss_port	- WSS Port # (PnP setup)
    irq		- IRQ # (PnP setup)
    mpu_irq	- MPU-401 IRQ # (PnP setup)
    dma		- DMA # (PnP setup)
    dma2	- 2nd DMA # (PnP setup, -1 to disable)
    joystick	- Enable gameport - 0 = disable (default), 1 = enable

    This module supports multiple cards.

    The driver requires the firmware loader support on kernel.

  Module snd-sun-amd7930 (on sparc only)
  --------------------------------------

    Module for AMD7930 sound chips found on Sparcs.

    This module supports multiple cards.

  Module snd-sun-cs4231 (on sparc only)
  -------------------------------------

    Module for CS4231 sound chips found on Sparcs.

    This module supports multiple cards.

  Module snd-sun-dbri (on sparc only)
  -----------------------------------

    Module for DBRI sound chips found on Sparcs.

    This module supports multiple cards.

  Module snd-wavefront
  --------------------

    Module for Turtle Beach Maui, Tropez and Tropez+ sound cards.

    use_cs4232_midi - Use CS4232 MPU-401 interface
                      (inaccessibly located inside your computer)
    isapnp          - ISA PnP detection - 0 = disable, 1 = enable (default)

    with isapnp=0, the following options are available:

    cs4232_pcm_port - Port # for CS4232 PCM interface.
    cs4232_pcm_irq  - IRQ # for CS4232 PCM interface (5,7,9,11,12,15).
    cs4232_mpu_port - Port # for CS4232 MPU-401 interface.
    cs4232_mpu_irq  - IRQ # for CS4232 MPU-401 interface (9,11,12,15).
    ics2115_port    - Port # for ICS2115
    ics2115_irq     - IRQ # for ICS2115
    fm_port         - FM OPL-3 Port #
    dma1            - DMA1 # for CS4232 PCM interface.
    dma2            - DMA2 # for CS4232 PCM interface.

    The below are options for wavefront_synth features:
    wf_raw	    - Assume that we need to boot the OS (default:no)
	If yes, then during driver loading, the state of the board is
	ignored, and we reset the board and load the firmware anyway.
    fx_raw	    - Assume that the FX process needs help (default:yes)
	If false, we'll leave the FX processor in whatever state it is
	when the driver is loaded.  The default is to download the
	microprogram and associated coefficients to set it up for
	"default" operation, whatever that means.
    debug_default   - Debug parameters for card initialization
    wait_usecs	    - How long to wait without sleeping, usecs
		      (default:150)
	This magic number seems to give pretty optimal throughput
	based on my limited experimentation. 
	If you want to play around with it and find a better value, be
	my guest. Remember, the idea is to get a number that causes us
	to just busy wait for as many WaveFront commands as possible,
	without coming up with a number so large that we hog the whole
	CPU. 
	Specifically, with this number, out of about 134,000 status
	waits, only about 250 result in a sleep. 
    sleep_interval  - How long to sleep when waiting for reply
		      (default: 100)
    sleep_tries	    - How many times to try sleeping during a wait
		      (default: 50)
    ospath	    - Pathname to processed ICS2115 OS firmware
		      (default:wavefront.os)
	The path name of the ISC2115 OS firmware.  In the recent
	version, it's handled via firmware loader framework, so it
	must be installed in the proper path, typically,
	/lib/firmware.
    reset_time	    - How long to wait for a reset to take effect
		      (default:2)
    ramcheck_time   - How many seconds to wait for the RAM test
		      (default:20)
    osrun_time	    - How many seconds to wait for the ICS2115 OS
		      (default:10)

    This module supports multiple cards and ISA PnP.

    Note: the firmware file "wavefront.os" was located in the earlier
          version in /etc.  Now it's loaded via firmware loader, and
	  must be in the proper firmware path, such as /lib/firmware.
	  Copy (or symlink) the file appropriately if you get an error
	  regarding firmware downloading after upgrading the kernel.

  Module snd-sonicvibes
  ---------------------

    Module for S3 SonicVibes PCI sound cards.
			* PINE Schubert 32 PCI

    reverb    - Reverb Enable - 1 = enable, 0 = disable (default)
                  - SoundCard must have onboard SRAM for this.
    mge       - Mic Gain Enable - 1 = enable, 0 = disable (default)
    
    This module supports multiple cards and autoprobe.

  Module snd-serial-u16550
  ------------------------

    Module for UART16550A serial MIDI ports.

    port	- port # for UART16550A chip
    irq		- IRQ # for UART16550A chip, -1 = poll mode
    speed	- speed in bauds (9600,19200,38400,57600,115200)
		  38400 = default
    base	- base for divisor in bauds (57600,115200,230400,460800)
		  115200 = default
    outs	- number of MIDI ports in a serial port (1-4)
		  1 = default
    adaptor	- Type of adaptor.
                  0 = Soundcanvas, 1 = MS-124T, 2 = MS-124W S/A,
		  3 = MS-124W M/B, 4 = Generic
    
    This module supports multiple cards. This module does not support autoprobe
    thus the main port must be specified!!! Other options are optional.

  Module snd-trident
  ------------------

    Module for Trident 4DWave DX/NX sound cards.
			* Best Union  Miss Melody 4DWave PCI
			* HIS  4DWave PCI
			* Warpspeed  ONSpeed 4DWave PCI
			* AzTech  PCI 64-Q3D
			* Addonics  SV 750
			* CHIC  True Sound 4Dwave
			* Shark  Predator4D-PCI
			* Jaton  SonicWave 4D
			* SiS SI7018 PCI Audio
			* Hoontech SoundTrack Digital 4DWave NX

    pcm_channels   - max channels (voices) reserved for PCM
    wavetable_size - max wavetable size in kB (4-?kb)

    This module supports multiple cards and autoprobe.

    The power-management is supported.

  Module snd-usb-audio
  --------------------

    Module for USB audio and USB MIDI devices.

    vid             - Vendor ID for the device (optional)
    pid             - Product ID for the device (optional)
    nrpacks	    - Max. number of packets per URB (default: 8)
    async_unlink    - Use async unlink mode (default: yes)
    device_setup    - Device specific magic number (optional)
                    - Influence depends on the device
                    - Default: 0x0000 
    ignore_ctl_error - Ignore any USB-controller regarding mixer
    		       interface (default: no)

    This module supports multiple devices, autoprobe and hotplugging.

    NB: nrpacks parameter can be modified dynamically via sysfs.
        Don't put the value over 20.  Changing via sysfs has no sanity
	check.
    NB: async_unlink=0 would cause Oops.  It remains just for
        debugging purpose (if any).
    NB: ignore_ctl_error=1 may help when you get an error at accessing
        the mixer element such as URB error -22.  This happens on some
        buggy USB device or the controller.

  Module snd-usb-caiaq
  --------------------

    Module for caiaq UB audio interfaces,
	    * Native Instruments RigKontrol2
	    * Native Instruments Kore Controller
	    * Native Instruments Audio Kontrol 1
	    * Native Instruments Audio 8 DJ

    This module supports multiple devices, autoprobe and hotplugging.

  Module snd-usb-usx2y
  --------------------

    Module for Tascam USB US-122, US-224 and US-428 devices.

    This module supports multiple devices, autoprobe and hotplugging.

    Note: you need to load the firmware via usx2yloader utility included
          in alsa-tools and alsa-firmware packages.

  Module snd-via82xx
  ------------------

    Module for AC'97 motherboards based on VIA 82C686A/686B, 8233,
    8233A, 8233C, 8235, 8237 (south) bridge.

    mpu_port	- 0x300,0x310,0x320,0x330, otherwise obtain BIOS setup
		  [VIA686A/686B only]
    joystick	- Enable joystick (default off) [VIA686A/686B only]
    ac97_clock	- AC'97 codec clock base (default 48000Hz)
    dxs_support	- support DXS channels,
		  0 = auto (default), 1 = enable, 2 = disable,
		  3 = 48k only, 4 = no VRA, 5 = enable any sample
		  rate and different sample rates on different
		  channels
		  [VIA8233/C, 8235, 8237 only]
    ac97_quirk  - AC'97 workaround for strange hardware
		  See "AC97 Quirk Option" section below.

    This module supports one chip and autoprobe.

    Note: on some SMP motherboards like MSI 694D the interrupts might
          not be generated properly.  In such a case, please try to
          set the SMP (or MPS) version on BIOS to 1.1 instead of
          default value 1.4.  Then the interrupt number will be
          assigned under 15. You might also upgrade your BIOS.
    
    Note: VIA8233/5/7 (not VIA8233A) can support DXS (direct sound)
	  channels as the first PCM.  On these channels, up to 4
	  streams can be played at the same time, and the controller
	  can perform sample rate conversion with separate rates for
	  each channel.
	  As default (dxs_support = 0), 48k fixed rate is chosen
	  except for the known devices since the output is often
	  noisy except for 48k on some mother boards due to the
	  bug of BIOS.
	  Please try once dxs_support=5 and if it works on other
	  sample rates (e.g. 44.1kHz of mp3 playback), please let us
	  know the PCI subsystem vendor/device id's (output of
	  "lspci -nv").
	  If dxs_support=5 does not work, try dxs_support=4; if it
	  doesn't work too, try dxs_support=1.  (dxs_support=1 is
	  usually for old motherboards.  The correct implemented
	  board should work with 4 or 5.)  If it still doesn't
	  work and the default setting is ok, dxs_support=3 is the
	  right choice.  If the default setting doesn't work at all,
	  try dxs_support=2 to disable the DXS channels.
	  In any cases, please let us know the result and the
	  subsystem vendor/device ids.  See "Links and Addresses"
	  below.

    Note: for the MPU401 on VIA823x, use snd-mpu401 driver
	  additionally.  The mpu_port option is for VIA686 chips only.

    The power-management is supported.

  Module snd-via82xx-modem
  ------------------------

    Module for VIA82xx AC97 modem

    ac97_clock	- AC'97 codec clock base (default 48000Hz)

    This module supports one card and autoprobe.

    Note: The default index value of this module is -2, i.e. the first
          slot is excluded.

    The power-management is supported.

  Module snd-virmidi
  ------------------

    Module for virtual rawmidi devices.
    This module creates virtual rawmidi devices which communicate
    to the corresponding ALSA sequencer ports.

    midi_devs	- MIDI devices # (1-4, default=4)
    
    This module supports multiple cards.

  Module snd-virtuoso
  -------------------

    Module for sound cards based on the Asus AV100/AV200 chips,
    i.e., Xonar D1, DX, D2, D2X, HDAV1.3 (Deluxe), Essence ST
    (Deluxe) and Essence STX.

    This module supports autoprobe and multiple cards.

  Module snd-vx222
  ----------------

    Module for Digigram VX-Pocket VX222, V222 v2 and Mic cards.

    mic		- Enable Microphone on V222 Mic (NYI)
    ibl		- Capture IBL size. (default = 0, minimum size)

    This module supports multiple cards.

    When the driver is compiled as a module and the hotplug firmware
    is supported, the firmware data is loaded via hotplug automatically.
    Install the necessary firmware files in alsa-firmware package.
    When no hotplug fw loader is available, you need to load the
    firmware via vxloader utility in alsa-tools package.  To invoke
    vxloader automatically, add the following to /etc/modprobe.conf

	install snd-vx222 /sbin/modprobe --first-time -i snd-vx222 && /usr/bin/vxloader

    (for 2.2/2.4 kernels, add "post-install /usr/bin/vxloader" to
     /etc/modules.conf, instead.)
    IBL size defines the interrupts period for PCM.  The smaller size
    gives smaller latency but leads to more CPU consumption, too.
    The size is usually aligned to 126.  As default (=0), the smallest
    size is chosen.  The possible IBL values can be found in
    /proc/asound/cardX/vx-status proc file.

    The power-management is supported.

  Module snd-vxpocket
  -------------------

    Module for Digigram VX-Pocket VX2 and 440 PCMCIA cards.

    ibl      - Capture IBL size. (default = 0, minimum size)

    This module supports multiple cards.  The module is compiled only when
    PCMCIA is supported on kernel.

    With the older 2.6.x kernel, to activate the driver via the card
    manager, you'll need to set up /etc/pcmcia/vxpocket.conf.  See the
    sound/pcmcia/vx/vxpocket.c.  2.6.13 or later kernel requires no
    longer require a config file.

    When the driver is compiled as a module and the hotplug firmware
    is supported, the firmware data is loaded via hotplug automatically.
    Install the necessary firmware files in alsa-firmware package.
    When no hotplug fw loader is available, you need to load the
    firmware via vxloader utility in alsa-tools package.

    About capture IBL, see the description of snd-vx222 module.

    Note: snd-vxp440 driver is merged to snd-vxpocket driver since
           ALSA 1.0.10.

    The power-management is supported.

  Module snd-ymfpci
  -----------------

    Module for Yamaha PCI chips (YMF72x, YMF74x & YMF75x).

    mpu_port      - 0x300,0x330,0x332,0x334, 0 (disable) by default,
                    1 (auto-detect for YMF744/754 only)
    fm_port       - 0x388,0x398,0x3a0,0x3a8, 0 (disable) by default
                    1 (auto-detect for YMF744/754 only)
    joystick_port - 0x201,0x202,0x204,0x205, 0 (disable) by default,
                    1 (auto-detect)
    rear_switch   - enable shared rear/line-in switch (bool)

    This module supports autoprobe and multiple chips.

    The power-management is supported.

  Module snd-pdaudiocf
  --------------------

    Module for Sound Core PDAudioCF sound card.

    The power-management is supported.


AC97 Quirk Option
=================

The ac97_quirk option is used to enable/override the workaround for
specific devices on drivers for on-board AC'97 controllers like
snd-intel8x0.  Some hardware have swapped output pins between Master
and Headphone, or Surround (thanks to confusion of AC'97
specifications from version to version :-)

The driver provides the auto-detection of known problematic devices,
but some might be unknown or wrongly detected.  In such a case, pass
the proper value with this option.

The following strings are accepted:
    - default	Don't override the default setting
    - none	Disable the quirk
    - hp_only	Bind Master and Headphone controls as a single control
    - swap_hp	Swap headphone and master controls
    - swap_surround  Swap master and surround controls
    - ad_sharing  For AD1985, turn on OMS bit and use headphone
    - alc_jack	For ALC65x, turn on the jack sense mode
    - inv_eapd	Inverted EAPD implementation
    - mute_led	Bind EAPD bit for turning on/off mute LED

For backward compatibility, the corresponding integer value -1, 0,
... are  accepted, too.

For example, if "Master" volume control has no effect on your device
but only "Headphone" does, pass ac97_quirk=hp_only module option.


Configuring Non-ISAPNP Cards
============================

When the kernel is configured with ISA-PnP support, the modules
supporting the isapnp cards will have module options "isapnp".
If this option is set, *only* the ISA-PnP devices will be probed.
For probing the non ISA-PnP cards, you have to pass "isapnp=0" option
together with the proper i/o and irq configuration.

When the kernel is configured without ISA-PnP support, isapnp option
will be not built in.


Module Autoloading Support
==========================

The ALSA drivers can be loaded automatically on demand by defining
module aliases.  The string 'snd-card-%1' is requested for ALSA native
devices where %i is sound card number from zero to seven.

To auto-load an ALSA driver for OSS services, define the string
'sound-slot-%i' where %i means the slot number for OSS, which
corresponds to the card index of ALSA.  Usually, define this
as the same card module.

An example configuration for a single emu10k1 card is like below:
----- /etc/modprobe.conf
alias snd-card-0 snd-emu10k1
alias sound-slot-0 snd-emu10k1
----- /etc/modprobe.conf

The available number of auto-loaded sound cards depends on the module
option "cards_limit" of snd module.  As default it's set to 1.
To enable the auto-loading of multiple cards, specify the number of
sound cards in that option.

When multiple cards are available, it'd better to specify the index
number for each card via module option, too, so that the order of
cards is kept consistent.

An example configuration for two sound cards is like below:

----- /etc/modprobe.conf
# ALSA portion
options snd cards_limit=2
alias snd-card-0 snd-interwave
alias snd-card-1 snd-ens1371
options snd-interwave index=0
options snd-ens1371 index=1
# OSS/Free portion
alias sound-slot-0 snd-interwave
alias sound-slot-1 snd-ens1371
----- /etc/modprobe.conf

In this example, the interwave card is always loaded as the first card
(index 0) and ens1371 as the second (index 1).

Alternative (and new) way to fixate the slot assignment is to use
"slots" option of snd module.  In the case above, specify like the
following: 

options snd slots=snd-interwave,snd-ens1371

Then, the first slot (#0) is reserved for snd-interwave driver, and
the second (#1) for snd-ens1371.  You can omit index option in each
driver if slots option is used (although you can still have them at
the same time as long as they don't conflict).

The slots option is especially useful for avoiding the possible
hot-plugging and the resultant slot conflict.  For example, in the
case above again, the first two slots are already reserved.  If any
other driver (e.g. snd-usb-audio) is loaded before snd-interwave or
snd-ens1371, it will be assigned to the third or later slot.

When a module name is given with '!', the slot will be given for any
modules but that name.  For example, "slots=!snd-pcsp" will reserve
the first slot for any modules but snd-pcsp. 


ALSA PCM devices to OSS devices mapping
=======================================

/dev/snd/pcmC0D0[c|p]  -> /dev/audio0 (/dev/audio) -> minor 4
/dev/snd/pcmC0D0[c|p]  -> /dev/dsp0 (/dev/dsp)     -> minor 3
/dev/snd/pcmC0D1[c|p]  -> /dev/adsp0 (/dev/adsp)   -> minor 12
/dev/snd/pcmC1D0[c|p]  -> /dev/audio1              -> minor 4+16 = 20
/dev/snd/pcmC1D0[c|p]  -> /dev/dsp1                -> minor 3+16 = 19
/dev/snd/pcmC1D1[c|p]  -> /dev/adsp1               -> minor 12+16 = 28
/dev/snd/pcmC2D0[c|p]  -> /dev/audio2              -> minor 4+32 = 36
/dev/snd/pcmC2D0[c|p]  -> /dev/dsp2                -> minor 3+32 = 39
/dev/snd/pcmC2D1[c|p]  -> /dev/adsp2               -> minor 12+32 = 44

The first number from /dev/snd/pcmC{X}D{Y}[c|p] expression means
sound card number and second means device number.  The ALSA devices
have either 'c' or 'p' suffix indicating the direction, capture and
playback, respectively.

Please note that the device mapping above may be varied via the module
options of snd-pcm-oss module.


Proc interfaces (/proc/asound)
==============================

/proc/asound/card#/pcm#[cp]/oss
-------------------------------
  String "erase" - erase all additional informations about OSS applications
  String "<app_name> <fragments> <fragment_size> [<options>]"

   <app_name> - name of application with (higher priority) or without path
   <fragments> - number of fragments or zero if auto
   <fragment_size> - size of fragment in bytes or zero if auto
   <options> - optional parameters
	  - disable   the application tries to open a pcm device for
		      this channel but does not want to use it.
		      (Cause a bug or mmap needs)
		      It's good for Quake etc...
	  - direct    don't use plugins
	  - block     force block mode (rvplayer)
	  - non-block force non-block mode
	  - whole-frag  write only whole fragments (optimization affecting
			playback only)
	  - no-silence  do not fill silence ahead to avoid clicks
	  - buggy-ptr	Returns the whitespace blocks in GETOPTR ioctl
			instead of filled blocks

  Example: echo "x11amp 128 16384" > /proc/asound/card0/pcm0p/oss
           echo "squake 0 0 disable" > /proc/asound/card0/pcm0c/oss
	   echo "rvplayer 0 0 block" > /proc/asound/card0/pcm0p/oss


Early Buffer Allocation
=======================

Some drivers (e.g. hdsp) require the large contiguous buffers, and
sometimes it's too late to find such spaces when the driver module is
actually loaded due to memory fragmentation.  You can pre-allocate the
PCM buffers by loading snd-page-alloc module and write commands to its
proc file in prior, for example, in the early boot stage like
/etc/init.d/*.local scripts.

Reading the proc file /proc/drivers/snd-page-alloc shows the current
usage of page allocation.  In writing, you can send the following
commands to the snd-page-alloc driver:

  - add VENDOR DEVICE MASK SIZE BUFFERS

    VENDOR and DEVICE are PCI vendor and device IDs.  They take
    integer numbers (0x prefix is needed for the hex).
    MASK is the PCI DMA mask.  Pass 0 if not restricted.
    SIZE is the size of each buffer to allocate.  You can pass
    k and m suffix for KB and MB.  The max number is 16MB.
    BUFFERS is the number of buffers to allocate.  It must be greater
    than 0.  The max number is 4.

  - erase

    This will erase the all pre-allocated buffers which are not in
    use.


Links and Addresses
===================

  ALSA project homepage
       http://www.alsa-project.org

  Kernel Bugzilla
       http://bugzilla.kernel.org/

  ALSA Developers ML
       mailto:alsa-devel@alsa-project.org

  alsa-info.sh script
       http://www.alsa-project.org/alsa-info.sh
