
		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)
    subsystem		- override the PCI SSID for probing; the value
			  consists of SSVID << 16 | SSDID.  The default is
			  zero, which means no override.

    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 128)
    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.
    beep_mode	- Selects the beep registration mode (0=off, 1=on, 2=
		dynamic registration via mute switch on/off); the default
		value is set via CONFIG_SND_HDA_INPUT_BEEP_MODE kconfig.
    
    [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-jazz16
  -------------------

    Module for Media Vision Jazz16 chipset. The chipset consists of 3 chips:
    MVD1216 + MVA416 + MVA514.

    port	- port # for SB DSP chip (0x210,0x220,0x230,0x240,0x250,0x260)
    irq		- IRQ # for SB DSP chip (3,5,7,9,10,15)
    dma8	- DMA # for SB DSP chip (1,3)
    dma16	- DMA # for SB DSP chip (5,7)
    mpu_port	- MPU-401 port # (0x300,0x310,0x320,0x330)
    mpu_irq	- MPU-401 irq # (2,3,5,7)

    This module supports multiple cards.

  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-ua101
  ----------------

    Module for the Edirol UA-101/UA-1000 audio/MIDI interfaces.

    This module supports multiple devices, autoprobe and hotplugging.

  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, DS, 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
