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

    Module for AudioScience ASI soundcards

    enable_hpi_hwdep	- enable HPI hwdep for AudioScience soundcard

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

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

    Module for Aztech Sound Galaxy soundcards based on the Aztech AZT1605
    chipset.

    port	- port # for BASE (0x220,0x240,0x260,0x280)
    wss_port	- port # for WSS (0x530,0x604,0xe80,0xf40)
    irq		- IRQ # for WSS (7,9,10,11)
    dma1	- DMA # for WSS playback (0,1,3)
    dma2	- DMA # for WSS capture (0,1), -1 = disabled (default)
    mpu_port	- port # for MPU-401 UART (0x300,0x330), -1 = disabled (default)
    mpu_irq	- IRQ # for MPU-401 UART (3,5,7,9), -1 = disabled (default)
    fm_port	- port # for OPL3 (0x388), -1 = disabled (default)

    This module supports multiple cards. It does not support autoprobe: port,
    wss_port, irq and dma1 have to be specified. The other values are
    optional.

    "port" needs to match the BASE ADDRESS jumper on the card (0x220 or 0x240)
    or the value stored in the card's EEPROM for cards that have an EEPROM and
    their "CONFIG MODE" jumper set to "EEPROM SETTING". The other values can
    be chosen freely from the options enumerated above.

    If dma2 is specified and different from dma1, the card will operate in
    full-duplex mode. When dma1=3, only dma2=0 is valid and the only way to
    enable capture since only channels 0 and 1 are available for capture.

    Generic settings are "port=0x220 wss_port=0x530 irq=10 dma1=1 dma2=0
    mpu_port=0x330 mpu_irq=9 fm_port=0x388".

    Whatever IRQ and DMA channels you pick, be sure to reserve them for
    legacy ISA in your BIOS.

  Module snd-azt2316
  ------------------

    Module for Aztech Sound Galaxy soundcards based on the Aztech AZT2316
    chipset.

    port	- port # for BASE (0x220,0x240,0x260,0x280)
    wss_port	- port # for WSS (0x530,0x604,0xe80,0xf40)
    irq		- IRQ # for WSS (7,9,10,11)
    dma1	- DMA # for WSS playback (0,1,3)
    dma2	- DMA # for WSS capture (0,1), -1 = disabled (default)
    mpu_port	- port # for MPU-401 UART (0x300,0x330), -1 = disabled (default)
    mpu_irq	- IRQ # for MPU-401 UART (5,7,9,10), -1 = disabled (default)
    fm_port	- port # for OPL3 (0x388), -1 = disabled (default)

    This module supports multiple cards. It does not support autoprobe: port,
    wss_port, irq and dma1 have to be specified. The other values are
    optional.

    "port" needs to match the BASE ADDRESS jumper on the card (0x220 or 0x240)
    or the value stored in the card's EEPROM for cards that have an EEPROM and
    their "CONFIG MODE" jumper set to "EEPROM SETTING". The other values can
    be chosen freely from the options enumerated above.

    If dma2 is specified and different from dma1, the card will operate in
    full-duplex mode. When dma1=3, only dma2=0 is valid and the only way to
    enable capture since only channels 0 and 1 are available for capture.

    Generic settings are "port=0x220 wss_port=0x530 irq=10 dma1=1 dma2=0
    mpu_port=0x330 mpu_irq=9 fm_port=0x388".

    Whatever IRQ and DMA channels you pick, be sure to reserve them for
    legacy ISA in your BIOS.

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

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

    isapnp	- ISA PnP detection - 0 = disable, 1 = enable (default)
    mpu_port	- port # for MPU-401 port (0x300,0x310,0x320,0x330), -1 = disable (default)
    mpu_irq	- IRQ # for MPU-401 port (5,7,9,10)
    fm_port	- port # for OPL3 (option; share the same port as default)

    with isapnp=0, the following additional options are available:
    port	- port # for ES-1688 chip (0x220,0x240,0x260)
    irq		- IRQ # for ES-1688 chip (5,7,9,10)
    dma8	- DMA # for ES-1688 chip (0,1,3)

    This module supports multiple cards and autoprobe (without MPU-401 port)
    and PnP with the ES968 chip.

  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
		  -1 = system default: choose appropriate one per controller
			hardware
		  0 = auto: falls back to LPIB when POSBUF doesn't work
		  1 = use LPIB
		  2 = POSBUF: use position buffer
		  3 = VIACOMBO: VIA-specific workaround for capture
		  4 = COMBO: use LPIB for playback, auto for capture stream
    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); 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)
    align_buffer_size - Force rounding of buffer/period sizes to multiples
    		      of 128 bytes. This is more efficient in terms of memory
		      access but isn't required by the HDA spec and prevents
		      users from specifying exact period/buffer sizes.
		      (default = on)
    snoop	- Enable/disable snooping (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.)

	    position_fix=3 is specific to VIA devices.  The position
	    of the capture stream is checked from both LPIB and POSBUF
	    values.  position_fix=4 is a combination mode, using LPIB
	    for playback and POSBUF for capture.

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

    Module for Digigram Lola PCI-e boards

    This module supports multiple cards.

  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

  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 CMI8786/8787/8788 chip:
    * Asound A-8788
    * Asus Xonar DG/DGX
    * AuzenTech X-Meridian
    * AuzenTech X-Meridian 2G
    * Bgears b-Enspirer
    * Club3D Theatron DTS
    * HT-Omega Claro (plus)
    * HT-Omega Claro halo (XT)
    * Kuroutoshikou CMI8787-HG2PCI
    * Razer Barracuda AC-1
    * Sondigo Inferno
    * TempoTec HiFier Fantasia
    * TempoTec HiFier Serenade

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

    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-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)
    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: 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 AV66/AV100/AV200 chips,
    i.e., Xonar D1, DX, D2, D2X, DS, Essence ST (Deluxe), Essence STX,
    HDAV1.3 (Deluxe), and HDAV1.3 Slim.

    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.d/alsa.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.d/alsa.conf
alias snd-card-0 snd-emu10k1
alias sound-slot-0 snd-emu10k1
----- /etc/modprobe.d/alsa.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.d/alsa.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.d/alsa.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 information 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
