		Proc Files of ALSA Drivers
		==========================
		Takashi Iwai <tiwai@suse.de>

General
-------

ALSA has its own proc tree, /proc/asound.  Many useful information are
found in this tree.  When you encounter a problem and need debugging,
check the files listed in the following sections.

Each card has its subtree cardX, where X is from 0 to 7. The
card-specific files are stored in the card* subdirectories.


Global Information
------------------

cards
	Shows the list of currently configured ALSA drivers,
	index, the id string, short and long descriptions.

version
	Shows the version string and compile date.

modules
	Lists the module of each card

devices
	Lists the ALSA native device mappings.

meminfo
	Shows the status of allocated pages via ALSA drivers.
	Appears only when CONFIG_SND_DEBUG=y.

hwdep
	Lists the currently available hwdep devices in format of
	<card>-<device>: <name>

pcm
	Lists the currently available PCM devices in format of
	<card>-<device>: <id>: <name> : <sub-streams>

timer
	Lists the currently available timer devices


oss/devices
	Lists the OSS device mappings.

oss/sndstat
	Provides the output compatible with /dev/sndstat.
	You can symlink this to /dev/sndstat.


Card Specific Files
-------------------

The card-specific files are found in /proc/asound/card* directories.
Some drivers (e.g. cmipci) have their own proc entries for the
register dump, etc (e.g. /proc/asound/card*/cmipci shows the register
dump).  These files would be really helpful for debugging.

When PCM devices are available on this card, you can see directories
like pcm0p or pcm1c.  They hold the PCM information for each PCM
stream.  The number after 'pcm' is the PCM device number from 0, and
the last 'p' or 'c' means playback or capture direction.  The files in
this subtree is described later.

The status of MIDI I/O is found in midi* files.  It shows the device
name and the received/transmitted bytes through the MIDI device.

When the card is equipped with AC97 codecs, there are codec97#*
subdirectories (described later).

When the OSS mixer emulation is enabled (and the module is loaded),
oss_mixer file appears here, too.  This shows the current mapping of
OSS mixer elements to the ALSA control elements.  You can change the
mapping by writing to this device.  Read OSS-Emulation.txt for
details.


PCM Proc Files
--------------

card*/pcm*/info
	The general information of this PCM device: card #, device #,
	substreams, etc.

card*/pcm*/xrun_debug
	This file appears when CONFIG_SND_DEBUG=y.
	This shows the status of xrun (= buffer overrun/xrun) debug of
	ALSA PCM middle layer, as an integer from 0 to 2.  The value
	can be changed by writing to this file, such as

		 # cat 2 > /proc/asound/card0/pcm0p/xrun_debug

	When this value is greater than 0, the driver will show the
	messages to kernel log when an xrun is detected.  The debug
	message is shown also when the invalid H/W pointer is detected
	at the update of periods (usually called from the interrupt
	handler).

	When this value is greater than 1, the driver will show the
	stack trace additionally.  This may help the debugging.

	Since 2.6.30, this option also enables the hwptr check using
	jiffies.  This detects spontaneous invalid pointer callback
	values, but can be lead to too much corrections for a (mostly
	buggy) hardware that doesn't give smooth pointer updates.

card*/pcm*/sub*/info
	The general information of this PCM sub-stream.

card*/pcm*/sub*/status
	The current status of this PCM sub-stream, elapsed time,
	H/W position, etc.

card*/pcm*/sub*/hw_params
	The hardware parameters set for this sub-stream.

card*/pcm*/sub*/sw_params
	The soft parameters set for this sub-stream.

card*/pcm*/sub*/prealloc
	The buffer pre-allocation information.


AC97 Codec Information
----------------------

card*/codec97#*/ac97#?-?
	Shows the general information of this AC97 codec chip, such as
	name, capabilities, set up.

card*/codec97#0/ac97#?-?+regs
	Shows the AC97 register dump.  Useful for debugging.

	When CONFIG_SND_DEBUG is enabled, you can write to this file for
	changing an AC97 register directly.  Pass two hex numbers.
	For example,

	# echo 02 9f1f > /proc/asound/card0/codec97#0/ac97#0-0+regs


USB Audio Streams
-----------------

card*/stream*
	Shows the assignment and the current status of each audio stream
	of the given card.  This information is very useful for debugging.


HD-Audio Codecs
---------------

card*/codec#*
	Shows the general codec information and the attribute of each
	widget node.

card*/eld#*
	Available for HDMI or DisplayPort interfaces.
	Shows ELD(EDID Like Data) info retrieved from the attached HDMI sink,
	and describes its audio capabilities and configurations.

	Some ELD fields may be modified by doing `echo name hex_value > eld#*`.
	Only do this if you are sure the HDMI sink provided value is wrong.
	And if that makes your HDMI audio work, please report to us so that we
	can fix it in future kernel releases.


Sequencer Information
---------------------

seq/drivers
	Lists the currently available ALSA sequencer drivers.

seq/clients
	Shows the list of currently available sequencer clients and
	ports.  The connection status and the running status are shown
	in this file, too.

seq/queues
	Lists the currently allocated/running sequencer queues.

seq/timer
	Lists the currently allocated/running sequencer timers.

seq/oss
	Lists the OSS-compatible sequencer stuffs.


Help For Debugging?
-------------------

When the problem is related with PCM, first try to turn on xrun_debug
mode.  This will give you the kernel messages when and where xrun
happened.

If it's really a bug, report it with the following information:

  - the name of the driver/card, show in /proc/asound/cards
  - the register dump, if available (e.g. card*/cmipci)

when it's a PCM problem,

  - set-up of PCM, shown in hw_parms, sw_params, and status in the PCM
    sub-stream directory

when it's a mixer problem,

  - AC97 proc files, codec97#*/* files

for USB audio/midi,

  - output of lsusb -v
  - stream* files in card directory


The ALSA bug-tracking system is found at:

    https://bugtrack.alsa-project.org/alsa-bug/
