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


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.


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,
    1 = integrated PCI port (default on 8738),
    0 = disable
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 resources.  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
    5 = SKL+: apply the delay calculation available on recent Intel chips
    6 = FIFO: correct the position with the fixed FIFO size, for recent AMD chips
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/notes.rst 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 hd-audio/notes.rst 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.rst.

The model name ``generic`` 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.rst 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 hardware, 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.rst 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 siree).

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 hardware 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/cards/multisound.sh 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)
autoclock
    Enable auto-clock selection for UAC2 devices (default: yes)
quirk_alias
    Quirk alias list, pass strings like ``0123abcd:5678beef``, which
    applies the existing quirk for the device 5678:beef to a new
    device 0123:abcd.
use_vmalloc
    Use vmalloc() for allocations of the PCM buffers (default: yes).
    For architectures with non-coherent memory like ARM or MIPS, the
    mmap access may give inconsistent results with vmalloc'ed
    buffers.  If mmap is used on such architectures, turn off this
    option, so that the DMA-coherent buffers are allocated and used
    instead.
delayed_register
    The option is needed for devices that have multiple streams
    defined in multiple USB interfaces.  The driver may invoke
    registrations multiple times (once per interface) and this may
    lead to the insufficient device enumeration.
    This option receives an array of strings, and you can pass
    ID:INTERFACE like ``0123abcd:4`` for performing the delayed
    registration to the given device.  In this example, when a USB
    device 0123:abcd is probed, the driver waits the registration
    until the USB interface 4 gets probed.
    The driver prints a message like "Found post-registration device
    assignment: 1234abcd:04" for such a device, so that user can
    notice the need.

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.

NB: quirk_alias option is provided only for testing / development.
If you want to have a proper support, contact to upstream for
adding the matching quirk in the driver code statically.

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, DSX, Essence ST (Deluxe),
Essence STX (II), 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
-------------------------------
erase
    erase all additional information about OSS applications

<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
