
		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.
    device_mode
		- permission mask for dynamic sound device filesystem
		- This is available only when DEVFS is enabled
		- Default: 0666
		- E.g.: device_mode=0660

  
  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.

    port	- port # for AD1816A chip (PnP setup)
    mpu_port	- port # for MPU-401 UART (PnP setup)
    fm_port	- port # for OPL3 (PnP setup)
    irq		- IRQ # for AD1816A chip (PnP setup)
    mpu_irq	- IRQ # for MPU-401 UART (PnP setup)
    dma1	- first DMA # for AD1816A chip (PnP setup)
    dma2	- second DMA # for AD1816A chip (PnP setup)
    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.

    port	- port # for ALS100 (SB16) chip (PnP setup)
    irq		- IRQ # for ALS100 (SB16) chip (PnP setup)
    dma8	- 8-bit DMA # for ALS100 (SB16) chip (PnP setup)
    dma16	- 16-bit DMA # for ALS100 (SB16) chip (PnP setup)
    mpu_port	- port # for MPU-401 UART (PnP setup)
    mpu_irq	- IRQ # for MPU-401 (PnP setup)
    fm_port	- port # for OPL3 FM (PnP setup)
    
    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.
    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-azt2320
  ------------------

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

    port	- port # for AZT2320 chip (PnP setup)
    wss_port	- port # for WSS (PnP setup)
    mpu_port	- port # for MPU-401 UART (PnP setup)
    fm_port	- FM port # for AZT2320 chip (PnP setup)
    irq		- IRQ # for AZT2320 (WSS) chip (PnP setup)
    mpu_irq	- IRQ # for MPU-401 UART (PnP setup)
    dma1	- 1st DMA # for AZT2320 (WSS) chip (PnP setup)
    dma2	- 2nd DMA # for AZT2320 (WSS) chip (PnP setup)
    
    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.

    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)

    This module supports multiple cards and autoprobe.

    The power-management is supported.

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

    Module for C-Media CMI8338 and 8738 PCI sound cards.

    mpu_port	- 0x300,0x310,0x320,0x330, 0 = disable (default)
    fm_port     - 0x388 (default), 0 = disable (default)
    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-cs4232
  -----------------

    Module for sound cards based on CS4232/CS4232A ISA chips.

    port	- port # for CS4232 chip (PnP setup - 0x534)
    cport	- control port # for CS4232 chip (PnP setup - 0x120,0x210,0xf00)
    mpu_port	- port # for MPU-401 UART (PnP setup - 0x300), -1 = disable
    fm_port	- FM port # for CS4232 chip (PnP setup - 0x388), -1 = disable
    irq		- IRQ # for CS4232 chip (5,7,9,11,12,15)
    mpu_irq	- IRQ # for MPU-401 UART (9,11,12,15)
    dma1	- first DMA # for CS4232 chip (0,1,3)
    dma2	- second DMA # for Yamaha CS4232 chip (0,1,3), -1 = disable
    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)
    
    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 CS4235/CS4236/CS4236B/CS4237B/
                                   CS4238B/CS4239 ISA chips.

    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
    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)
    
    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.

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

    Module for multifunction CS5535 companion PCI device

    This module supports multiple cards.

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

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

    port	- Port # (PnP setup)
    mpu_port	- Port # for MPU-401 (PnP setup)
    fm_port	- Port # for FM OPL-3 (PnP setup)
    irq		- IRQ # (PnP setup)
    mpu_irq	- IRQ # for MPU-401 (PnP setup)
    dma8	- DMA # (PnP setup)

    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).

    The power-management is supported.

  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).

    port	- port # for ES968 (SB8) chip (PnP setup)
    irq		- IRQ # for ES968 (SB8) chip (PnP setup)
    dma1	- DMA # for ES968 (SB8) chip (PnP setup)
    
    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)
    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.

    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)
    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)

    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-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, ICH7), ATI SB450,
	       VIA VT8251/VT8237A

    model	- force the model name
    position_fix - Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size)
    single_cmd  - Use single immediate commands to communicate with
		codecs (for debugging only)

    This module supports one card and autoprobe.

    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.

	  Model name	Description
	  ----------    -----------
	ALC880
	  3stack	3-jack in back and a headphone out
	  3stack-digout	3-jack in back, a HP out and a SPDIF out
	  5stack	5-jack in back, 2-jack in front
	  5stack-digout	5-jack in back, 2-jack in front, a SPDIF out
	  6stack	6-jack in back, 2-jack in front
	  6stack-digout	6-jack with a SPDIF out
	  w810		3-jack
	  z71v		3-jack (HP shared SPDIF)
	  asus		3-jack
	  uniwill	3-jack
	  F1734		2-jack
	  lg		LG laptop (m1 express dual)
	  lg-lw		LG LW20 laptop
	  test		for testing/debugging purpose, almost all controls can be
			adjusted.  Appearing only when compiled with
			$CONFIG_SND_DEBUG=y
	  auto		auto-config reading BIOS (default)

	ALC260
	  hp		HP machines
	  fujitsu	Fujitsu S7020
	  acer		Acer TravelMate
	  basic		fixed pin assignment (old default model)
	  auto		auto-config reading BIOS (default)

	ALC262
	  fujitsu	Fujitsu Laptop
	  basic		fixed pin assignment w/o SPDIF
	  auto		auto-config reading BIOS (default)

	ALC882/883/885
	  3stack-dig	3-jack with SPDIF I/O
	  6stck-dig	6-jack digital with SPDIF I/O
	  auto		auto-config reading BIOS (default)

	ALC861
	  3stack	3-jack
	  3stack-dig	3-jack with SPDIF I/O
	  6stack-dig	6-jack with SPDIF I/O
	  auto		auto-config reading BIOS (default)

	CMI9880
	  minimal	3-jack in back
	  min_fp	3-jack in back, 2-jack in front
	  full		6-jack in back, 2-jack in front
	  full_dig	6-jack in back, 2-jack in front, SPDIF I/O
	  allout	5-jack in back, 2-jack in front, SPDIF out
	  auto		auto-config reading BIOS (default)

	AD1981
	  basic		3-jack (default)
	  hp		HP nx6320

	AD1986A
	  6stack	6-jack, separate surrounds (default)
	  3stack	3-stack, shared surrounds
	  laptop	2-channel only (FSC V2060, Samsung M50)
	  laptop-eapd	2-channel with EAPD (Samsung R65, ASUS A6J)

	AD1988
	  6stack	6-jack
	  6stack-dig	ditto with SPDIF
	  3stack	3-jack
	  3stack-dig	ditto with SPDIF
	  laptop	3-jack with hp-jack automute
	  laptop-dig	ditto with SPDIF
	  auto		auto-confgi reading BIOS (default)

	STAC7661(?)
	  vaio		Setup for VAIO FE550G/SZ110

    If the default configuration doesn't work and one of the above
    matches with your device, report it together with the PCI
    subsystem ID (output of "lspci -nv") to ALSA BTS or alsa-devel
    ML (see the section "Links and Addresses").

    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_LPLIB 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...
    
    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-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

    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 transciever)
                     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
			* 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.1LT
			* AudioTrak Prodigy 192
			* Pontis MS300
			* Albatron K8X800 Pro II 
			* Chaintech ZNF3-150
			* Chaintech ZNF3-250
			* Chaintech 9CJS
			* Chaintech AV-710
			* Shuttle SN25P

    model       - Use the given board model, one of the following:
		  revo51, revo71, amp2000, prodigy71, prodigy71lt,
		  prodigy192, aureon51, aureon71, universe,
		  k8x800, phase22, phase28, ms300, av710

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

    Module for AC'97 motherboards from Intel and compatibles.
			* Intel i810/810E, i815, i820, i830, i84x, MX440
				ICH5, ICH6, ICH7, 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)

    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.
  
    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)
    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

    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.
  
    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)
    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

    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-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-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-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-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-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 explicity via
    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.

    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
    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)
    
    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.
    
    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.
    
    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.
    
    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-pcxhr
  ----------------

    Module for Digigram PCXHR boards

    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

    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)
    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)
    
    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-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 PnP cards.

    port	- Port # (PnP setup)
    irq		- IRQ # (PnP setup)
    mpu_irq	- MPU-401 IRQ # (PnP setup)
    dma		- DMA # (PnP setup)

    This module supports multiple cards.  ISA PnP must be enabled.
    You need sscape_ctl tool in alsa-tools package for loading
    the microcode.

  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.

    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).
    use_cs4232_midi - Use CS4232 MPU-401 interface
                      (inaccessibly located inside your computer)
    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.
    isapnp          - ISA PnP detection - 0 = disable, 1 = enable (default)

    This module supports multiple cards and ISA PnP.

  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

    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)
    device_setup    - Device specific magic number (optional)
                    - Influence depends on the device
                    - Default: 0x0000 

    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-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: the driver is build only when CONFIG_ISA is set.
    
    Note2: 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.

    Note: the driver is build only when CONFIG_ISA is set.

    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/moprobe.conf

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


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.


DEVFS support
=============

The ALSA driver fully supports the devfs extension.
You should add lines below to your devfsd.conf file:

LOOKUP snd MODLOAD ACTION snd
REGISTER ^sound/.* PERMISSIONS root.audio 660
REGISTER ^snd/.* PERMISSIONS root.audio 660

Warning: These lines assume that you have the audio group in your system.
         Otherwise replace audio word with another group name (root for
         example).


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

  ALSA Bug Tracking System
       https://bugtrack.alsa-project.org/bugs/

  ALSA Developers ML
       mailto:alsa-devel@lists.sourceforge.net
