=============================
More Notes on HD-Audio Driver
=============================

Takashi Iwai <tiwai@suse.de>


General
=======

HD-audio is the new standard on-board audio component on modern PCs
after AC97.  Although Linux has been supporting HD-audio since long
time ago, there are often problems with new machines.  A part of the
problem is broken BIOS, and the rest is the driver implementation.
This document explains the brief trouble-shooting and debugging
methods for the	HD-audio hardware.

The HD-audio component consists of two parts: the controller chip and 
the codec chips on the HD-audio bus.  Linux provides a single driver
for all controllers, snd-hda-intel.  Although the driver name contains
a word of a well-known hardware vendor, it's not specific to it but for
all controller chips by other companies.  Since the HD-audio
controllers are supposed to be compatible, the single snd-hda-driver
should work in most cases.  But, not surprisingly, there are known
bugs and issues specific to each controller type.  The snd-hda-intel
driver has a bunch of workarounds for these as described below.

A controller may have multiple codecs.  Usually you have one audio
codec and optionally one modem codec.  In theory, there might be
multiple audio codecs, e.g. for analog and digital outputs, and the
driver might not work properly because of conflict of mixer elements.
This should be fixed in future if such hardware really exists.

The snd-hda-intel driver has several different codec parsers depending
on the codec.  It has a generic parser as a fallback, but this
functionality is fairly limited until now.  Instead of the generic
parser, usually the codec-specific parser (coded in patch_*.c) is used
for the codec-specific implementations.  The details about the
codec-specific problems are explained in the later sections.

If you are interested in the deep debugging of HD-audio, read the
HD-audio specification at first.  The specification is found on
Intel's web page, for example:

* https://www.intel.com/standards/hdaudio/


HD-Audio Controller
===================

DMA-Position Problem
--------------------
The most common problem of the controller is the inaccurate DMA
pointer reporting.  The DMA pointer for playback and capture can be
read in two ways, either via a LPIB register or via a position-buffer
map.  As default the driver tries to read from the io-mapped
position-buffer, and falls back to LPIB if the position-buffer appears
dead.  However, this detection isn't perfect on some devices.  In such
a case, you can change the default method via ``position_fix`` option.

``position_fix=1`` means to use LPIB method explicitly.
``position_fix=2`` means to use the position-buffer.
``position_fix=3`` means to use a combination of both methods, needed
for some VIA controllers.  The capture stream position is corrected
by comparing both LPIB and position-buffer values.
``position_fix=4`` is another combination available for all controllers,
and uses LPIB for the playback and the position-buffer for the capture
streams.
``position_fix=5`` is specific to Intel platforms, so far, for Skylake
and onward.  It applies the delay calculation for the precise position
reporting.
``position_fix=6`` is to correct the position with the fixed FIFO
size, mainly targeted for the recent AMD controllers.
0 is the default value for all other
controllers, the automatic check and fallback to LPIB as described in
the above.  If you get a problem of repeated sounds, this option might
help.

In addition to that, every controller is known to be broken regarding
the wake-up timing.  It wakes up a few samples before actually
processing the data on the buffer.  This caused a lot of problems, for
example, with ALSA dmix or JACK.  Since 2.6.27 kernel, the driver puts
an artificial delay to the wake up timing.  This delay is controlled
via ``bdl_pos_adj`` option. 

When ``bdl_pos_adj`` is a negative value (as default), it's assigned to
an appropriate value depending on the controller chip.  For Intel
chips, it'd be 1 while it'd be 32 for others.  Usually this works.
Only in case it doesn't work and you get warning messages, you should
change this parameter to other values.


Codec-Probing Problem
---------------------
A less often but a more severe problem is the codec probing.  When
BIOS reports the available codec slots wrongly, the driver gets
confused and tries to access the non-existing codec slot.  This often
results in the total screw-up, and destructs the further communication
with the codec chips.  The symptom appears usually as error messages
like:
::

    hda_intel: azx_get_response timeout, switching to polling mode:
          last cmd=0x12345678
    hda_intel: azx_get_response timeout, switching to single_cmd mode:
          last cmd=0x12345678

The first line is a warning, and this is usually relatively harmless.
It means that the codec response isn't notified via an IRQ.  The
driver uses explicit polling method to read the response.  It gives
very slight CPU overhead, but you'd unlikely notice it.

The second line is, however, a fatal error.  If this happens, usually
it means that something is really wrong.  Most likely you are
accessing a non-existing codec slot.

Thus, if the second error message appears, try to narrow the probed
codec slots via ``probe_mask`` option.  It's a bitmask, and each bit
corresponds to the codec slot.  For example, to probe only the first
slot, pass ``probe_mask=1``.  For the first and the third slots, pass
``probe_mask=5`` (where 5 = 1 | 4), and so on.

Since 2.6.29 kernel, the driver has a more robust probing method, so
this error might happen rarely, though.

On a machine with a broken BIOS, sometimes you need to force the
driver to probe the codec slots the hardware doesn't report for use.
In such a case, turn the bit 8 (0x100) of ``probe_mask`` option on.
Then the rest 8 bits are passed as the codec slots to probe
unconditionally.  For example, ``probe_mask=0x103`` will force to probe
the codec slots 0 and 1 no matter what the hardware reports.


Interrupt Handling
------------------
HD-audio driver uses MSI as default (if available) since 2.6.33
kernel as MSI works better on some machines, and in general, it's
better for performance.  However, Nvidia controllers showed bad
regressions with MSI (especially in a combination with AMD chipset),
thus we disabled MSI for them.

There seem also still other devices that don't work with MSI.  If you
see a regression wrt the sound quality (stuttering, etc) or a lock-up
in the recent kernel, try to pass ``enable_msi=0`` option to disable
MSI.  If it works, you can add the known bad device to the blacklist
defined in hda_intel.c.  In such a case, please report and give the
patch back to the upstream developer. 


HD-Audio Codec
==============

Model Option
------------
The most common problem regarding the HD-audio driver is the
unsupported codec features or the mismatched device configuration.
Most of codec-specific code has several preset models, either to
override the BIOS setup or to provide more comprehensive features.

The driver checks PCI SSID and looks through the static configuration
table until any matching entry is found.  If you have a new machine,
you may see a message like below:
::

    hda_codec: ALC880: BIOS auto-probing.

Meanwhile, in the earlier versions, you would see a message like:
::

    hda_codec: Unknown model for ALC880, trying auto-probe from BIOS...

Even if you see such a message, DON'T PANIC.  Take a deep breath and
keep your towel.  First of all, it's an informational message, no
warning, no error.  This means that the PCI SSID of your device isn't
listed in the known preset model (white-)list.  But, this doesn't mean
that the driver is broken.  Many codec-drivers provide the automatic
configuration mechanism based on the BIOS setup.

The HD-audio codec has usually "pin" widgets, and BIOS sets the default
configuration of each pin, which indicates the location, the
connection type, the jack color, etc.  The HD-audio driver can guess
the right connection judging from these default configuration values.
However -- some codec-support codes, such as patch_analog.c, don't
support the automatic probing (yet as of 2.6.28).  And, BIOS is often,
yes, pretty often broken.  It sets up wrong values and screws up the
driver.

The preset model (or recently called as "fix-up") is provided
basically to overcome such a situation.  When the matching preset
model is found in the white-list, the driver assumes the static
configuration of that preset with the correct pin setup, etc.
Thus, if you have a newer machine with a slightly different PCI SSID
(or codec SSID) from the existing one, you may have a good chance to
re-use the same model.  You can pass the ``model`` option to specify the
preset model instead of PCI (and codec-) SSID look-up.

What ``model`` option values are available depends on the codec chip.
Check your codec chip from the codec proc file (see "Codec Proc-File"
section below).  It will show the vendor/product name of your codec
chip.  Then, see Documentation/sound/hd-audio/models.rst file,
the section of HD-audio driver.  You can find a list of codecs
and ``model`` options belonging to each codec.  For example, for Realtek
ALC262 codec chip, pass ``model=ultra`` for devices that are compatible
with Samsung Q1 Ultra.

Thus, the first thing you can do for any brand-new, unsupported and
non-working HD-audio hardware is to check HD-audio codec and several
different ``model`` option values.  If you have any luck, some of them
might suit with your device well.

There are a few special model option values:

* when 'nofixup' is passed, the device-specific fixups in the codec
  parser are skipped.
* when ``generic`` is passed, the codec-specific parser is skipped and
  only the generic parser is used.


Speaker and Headphone Output
----------------------------
One of the most frequent (and obvious) bugs with HD-audio is the
silent output from either or both of a built-in speaker and a
headphone jack.  In general, you should try a headphone output at
first.  A speaker output often requires more additional controls like
the external amplifier bits.  Thus a headphone output has a slightly
better chance.

Before making a bug report, double-check whether the mixer is set up
correctly.  The recent version of snd-hda-intel driver provides mostly
"Master" volume control as well as "Front" volume (where Front
indicates the front-channels).  In addition, there can be individual
"Headphone" and "Speaker" controls.

Ditto for the speaker output.  There can be "External Amplifier"
switch on some codecs.  Turn on this if present.

Another related problem is the automatic mute of speaker output by
headphone plugging.  This feature is implemented in most cases, but
not on every preset model or codec-support code.

In anyway, try a different model option if you have such a problem.
Some other models may match better and give you more matching
functionality.  If none of the available models works, send a bug
report.  See the bug report section for details.

If you are masochistic enough to debug the driver problem, note the
following:

* The speaker (and the headphone, too) output often requires the
  external amplifier.  This can be set usually via EAPD verb or a
  certain GPIO.  If the codec pin supports EAPD, you have a better
  chance via SET_EAPD_BTL verb (0x70c).  On others, GPIO pin (mostly
  it's either GPIO0 or GPIO1) may turn on/off EAPD.
* Some Realtek codecs require special vendor-specific coefficients to
  turn on the amplifier.  See patch_realtek.c.
* IDT codecs may have extra power-enable/disable controls on each
  analog pin.  See patch_sigmatel.c.
* Very rare but some devices don't accept the pin-detection verb until
  triggered.  Issuing GET_PIN_SENSE verb (0xf09) may result in the
  codec-communication stall.  Some examples are found in
  patch_realtek.c.


Capture Problems
----------------
The capture problems are often because of missing setups of mixers.
Thus, before submitting a bug report, make sure that you set up the
mixer correctly.  For example, both "Capture Volume" and "Capture
Switch" have to be set properly in addition to the right "Capture
Source" or "Input Source" selection.  Some devices have "Mic Boost"
volume or switch.

When the PCM device is opened via "default" PCM (without pulse-audio
plugin), you'll likely have "Digital Capture Volume" control as well.
This is provided for the extra gain/attenuation of the signal in
software, especially for the inputs without the hardware volume
control such as digital microphones.  Unless really needed, this
should be set to exactly 50%, corresponding to 0dB -- neither extra
gain nor attenuation.  When you use "hw" PCM, i.e., a raw access PCM,
this control will have no influence, though.

It's known that some codecs / devices have fairly bad analog circuits,
and the recorded sound contains a certain DC-offset.  This is no bug
of the driver.

Most of modern laptops have no analog CD-input connection.  Thus, the
recording from CD input won't work in many cases although the driver
provides it as the capture source.  Use CDDA instead.

The automatic switching of the built-in and external mic per plugging
is implemented on some codec models but not on every model.  Partly
because of my laziness but mostly lack of testers.  Feel free to
submit the improvement patch to the author.


Direct Debugging
----------------
If no model option gives you a better result, and you are a tough guy
to fight against evil, try debugging via hitting the raw HD-audio
codec verbs to the device.  Some tools are available: hda-emu and
hda-analyzer.  The detailed description is found in the sections
below.  You'd need to enable hwdep for using these tools.  See "Kernel
Configuration" section.


Other Issues
============

Kernel Configuration
--------------------
In general, I recommend you to enable the sound debug option,
``CONFIG_SND_DEBUG=y``, no matter whether you are debugging or not.
This enables snd_printd() macro and others, and you'll get additional
kernel messages at probing.

In addition, you can enable ``CONFIG_SND_DEBUG_VERBOSE=y``.  But this
will give you far more messages.  Thus turn this on only when you are
sure to want it.

Don't forget to turn on the appropriate ``CONFIG_SND_HDA_CODEC_*``
options.  Note that each of them corresponds to the codec chip, not
the controller chip.  Thus, even if lspci shows the Nvidia controller,
you may need to choose the option for other vendors.  If you are
unsure, just select all yes.

``CONFIG_SND_HDA_HWDEP`` is a useful option for debugging the driver.
When this is enabled, the driver creates hardware-dependent devices
(one per each codec), and you have a raw access to the device via
these device files.  For example, ``hwC0D2`` will be created for the
codec slot #2 of the first card (#0).  For debug-tools such as
hda-verb and hda-analyzer, the hwdep device has to be enabled.
Thus, it'd be better to turn this on always.

``CONFIG_SND_HDA_RECONFIG`` is a new option, and this depends on the
hwdep option above.  When enabled, you'll have some sysfs files under
the corresponding hwdep directory.  See "HD-audio reconfiguration"
section below.

``CONFIG_SND_HDA_POWER_SAVE`` option enables the power-saving feature.
See "Power-saving" section below.


Codec Proc-File
---------------
The codec proc-file is a treasure-chest for debugging HD-audio.
It shows most of useful information of each codec widget.

The proc file is located in /proc/asound/card*/codec#*, one file per
each codec slot.  You can know the codec vendor, product id and
names, the type of each widget, capabilities and so on.
This file, however, doesn't show the jack sensing state, so far.  This
is because the jack-sensing might be depending on the trigger state.

This file will be picked up by the debug tools, and also it can be fed
to the emulator as the primary codec information.  See the debug tools
section below.

This proc file can be also used to check whether the generic parser is
used.  When the generic parser is used, the vendor/product ID name
will appear as "Realtek ID 0262", instead of "Realtek ALC262".


HD-Audio Reconfiguration
------------------------
This is an experimental feature to allow you re-configure the HD-audio
codec dynamically without reloading the driver.  The following sysfs
files are available under each codec-hwdep device directory (e.g. 
/sys/class/sound/hwC0D0):

vendor_id
    Shows the 32bit codec vendor-id hex number.  You can change the
    vendor-id value by writing to this file.
subsystem_id
    Shows the 32bit codec subsystem-id hex number.  You can change the
    subsystem-id value by writing to this file.
revision_id
    Shows the 32bit codec revision-id hex number.  You can change the
    revision-id value by writing to this file.
afg
    Shows the AFG ID.  This is read-only.
mfg
    Shows the MFG ID.  This is read-only.
name
    Shows the codec name string.  Can be changed by writing to this
    file.
modelname
    Shows the currently set ``model`` option.  Can be changed by writing
    to this file.
init_verbs
    The extra verbs to execute at initialization.  You can add a verb by
    writing to this file.  Pass three numbers: nid, verb and parameter
    (separated with a space).
hints
    Shows / stores hint strings for codec parsers for any use.
    Its format is ``key = value``.  For example, passing ``jack_detect = no``
    will disable the jack detection of the machine completely.
init_pin_configs
    Shows the initial pin default config values set by BIOS.
driver_pin_configs
    Shows the pin default values set by the codec parser explicitly.
    This doesn't show all pin values but only the changed values by
    the parser.  That is, if the parser doesn't change the pin default
    config values by itself, this will contain nothing.
user_pin_configs
    Shows the pin default config values to override the BIOS setup.
    Writing this (with two numbers, NID and value) appends the new
    value.  The given will be used instead of the initial BIOS value at
    the next reconfiguration time.  Note that this config will override
    even the driver pin configs, too.
reconfig
    Triggers the codec re-configuration.  When any value is written to
    this file, the driver re-initialize and parses the codec tree
    again.  All the changes done by the sysfs entries above are taken
    into account.
clear
    Resets the codec, removes the mixer elements and PCM stuff of the
    specified codec, and clear all init verbs and hints.

For example, when you want to change the pin default configuration
value of the pin widget 0x14 to 0x9993013f, and let the driver
re-configure based on that state, run like below:
::

    # echo 0x14 0x9993013f > /sys/class/sound/hwC0D0/user_pin_configs
    # echo 1 > /sys/class/sound/hwC0D0/reconfig  


Hint Strings
------------
The codec parser have several switches and adjustment knobs for
matching better with the actual codec or device behavior.  Many of
them can be adjusted dynamically via "hints" strings as mentioned in
the section above.  For example, by passing ``jack_detect = no`` string
via sysfs or a patch file, you can disable the jack detection, thus
the codec parser will skip the features like auto-mute or mic
auto-switch.  As a boolean value, either ``yes``, ``no``, ``true``, ``false``,
``1`` or ``0`` can be passed.

The generic parser supports the following hints:

jack_detect (bool)
    specify whether the jack detection is available at all on this
    machine; default true
inv_jack_detect (bool)
    indicates that the jack detection logic is inverted
trigger_sense (bool)
    indicates that the jack detection needs the explicit call of
    AC_VERB_SET_PIN_SENSE verb
inv_eapd (bool)
    indicates that the EAPD is implemented in the inverted logic
pcm_format_first (bool)
    sets the PCM format before the stream tag and channel ID
sticky_stream (bool)
    keep the PCM format, stream tag and ID as long as possible;
    default true
spdif_status_reset (bool)
    reset the SPDIF status bits at each time the SPDIF stream is set
    up
pin_amp_workaround (bool)
    the output pin may have multiple amp values
single_adc_amp (bool)
    ADCs can have only single input amps
auto_mute (bool)
    enable/disable the headphone auto-mute feature; default true
auto_mic (bool)
    enable/disable the mic auto-switch feature; default true
line_in_auto_switch (bool)
    enable/disable the line-in auto-switch feature; default false
need_dac_fix (bool)
    limits the DACs depending on the channel count
primary_hp (bool)
    probe headphone jacks as the primary outputs; default true
multi_io (bool)
    try probing multi-I/O config (e.g. shared line-in/surround,
    mic/clfe jacks)
multi_cap_vol (bool)
    provide multiple capture volumes
inv_dmic_split (bool)
    provide split internal mic volume/switch for phase-inverted
    digital mics
indep_hp (bool)
    provide the independent headphone PCM stream and the corresponding
    mixer control, if available
add_stereo_mix_input (bool)
    add the stereo mix (analog-loopback mix) to the input mux if
    available 
add_jack_modes (bool)
    add "xxx Jack Mode" enum controls to each I/O jack for allowing to
    change the headphone amp and mic bias VREF capabilities
power_save_node (bool)
    advanced power management for each widget, controlling the power
    sate (D0/D3) of each widget node depending on the actual pin and
    stream states
power_down_unused (bool)
    power down the unused widgets, a subset of power_save_node, and
    will be dropped in future 
add_hp_mic (bool)
    add the headphone to capture source if possible
hp_mic_detect (bool)
    enable/disable the hp/mic shared input for a single built-in mic
    case; default true
vmaster (bool)
    enable/disable the virtual Master control; default true
mixer_nid (int)
    specifies the widget NID of the analog-loopback mixer


Early Patching
--------------
When ``CONFIG_SND_HDA_PATCH_LOADER=y`` is set, you can pass a "patch"
as a firmware file for modifying the HD-audio setup before
initializing the codec.  This can work basically like the
reconfiguration via sysfs in the above, but it does it before the
first codec configuration.

A patch file is a plain text file which looks like below:

::

    [codec]
    0x12345678 0xabcd1234 2

    [model]
    auto

    [pincfg]
    0x12 0x411111f0

    [verb]
    0x20 0x500 0x03
    0x20 0x400 0xff

    [hint]
    jack_detect = no


The file needs to have a line ``[codec]``.  The next line should contain
three numbers indicating the codec vendor-id (0x12345678 in the
example), the codec subsystem-id (0xabcd1234) and the address (2) of
the codec.  The rest patch entries are applied to this specified codec
until another codec entry is given.  Passing 0 or a negative number to
the first or the second value will make the check of the corresponding
field be skipped.  It'll be useful for really broken devices that don't
initialize SSID properly.

The ``[model]`` line allows to change the model name of the each codec.
In the example above, it will be changed to model=auto.
Note that this overrides the module option.

After the ``[pincfg]`` line, the contents are parsed as the initial
default pin-configurations just like ``user_pin_configs`` sysfs above.
The values can be shown in user_pin_configs sysfs file, too.

Similarly, the lines after ``[verb]`` are parsed as ``init_verbs``
sysfs entries, and the lines after ``[hint]`` are parsed as ``hints``
sysfs entries, respectively.

Another example to override the codec vendor id from 0x12345678 to
0xdeadbeef is like below:
::

    [codec]
    0x12345678 0xabcd1234 2

    [vendor_id]
    0xdeadbeef


In the similar way, you can override the codec subsystem_id via
``[subsystem_id]``, the revision id via ``[revision_id]`` line.
Also, the codec chip name can be rewritten via ``[chip_name]`` line.
::

    [codec]
    0x12345678 0xabcd1234 2

    [subsystem_id]
    0xffff1111

    [revision_id]
    0x10

    [chip_name]
    My-own NEWS-0002


The hd-audio driver reads the file via request_firmware().  Thus,
a patch file has to be located on the appropriate firmware path,
typically, /lib/firmware.  For example, when you pass the option
``patch=hda-init.fw``, the file /lib/firmware/hda-init.fw must be
present.

The patch module option is specific to each card instance, and you
need to give one file name for each instance, separated by commas.
For example, if you have two cards, one for an on-board analog and one 
for an HDMI video board, you may pass patch option like below:
::

    options snd-hda-intel patch=on-board-patch,hdmi-patch


Power-Saving
------------
The power-saving is a kind of auto-suspend of the device.  When the
device is inactive for a certain time, the device is automatically
turned off to save the power.  The time to go down is specified via
``power_save`` module option, and this option can be changed dynamically
via sysfs.

The power-saving won't work when the analog loopback is enabled on
some codecs.  Make sure that you mute all unneeded signal routes when
you want the power-saving.

The power-saving feature might cause audible click noises at each
power-down/up depending on the device.  Some of them might be
solvable, but some are hard, I'm afraid.  Some distros such as
openSUSE enables the power-saving feature automatically when the power
cable is unplugged.  Thus, if you hear noises, suspect first the
power-saving.  See /sys/module/snd_hda_intel/parameters/power_save to
check the current value.  If it's non-zero, the feature is turned on.

The recent kernel supports the runtime PM for the HD-audio controller
chip, too.  It means that the HD-audio controller is also powered up /
down dynamically.  The feature is enabled only for certain controller
chips like Intel LynxPoint.  You can enable/disable this feature
forcibly by setting ``power_save_controller`` option, which is also
available at /sys/module/snd_hda_intel/parameters directory.


Tracepoints
-----------
The hd-audio driver gives a few basic tracepoints.
``hda:hda_send_cmd`` traces each CORB write while ``hda:hda_get_response``
traces the response from RIRB (only when read from the codec driver).
``hda:hda_bus_reset`` traces the bus-reset due to fatal error, etc,
``hda:hda_unsol_event`` traces the unsolicited events, and
``hda:hda_power_down`` and ``hda:hda_power_up`` trace the power down/up
via power-saving behavior.

Enabling all tracepoints can be done like
::

    # echo 1 > /sys/kernel/debug/tracing/events/hda/enable

then after some commands, you can traces from
/sys/kernel/debug/tracing/trace file.  For example, when you want to
trace what codec command is sent, enable the tracepoint like:
::

    # cat /sys/kernel/debug/tracing/trace
    # tracer: nop
    #
    #       TASK-PID    CPU#    TIMESTAMP  FUNCTION
    #          | |       |          |         |
	   <...>-7807  [002] 105147.774889: hda_send_cmd: [0:0] val=e3a019
	   <...>-7807  [002] 105147.774893: hda_send_cmd: [0:0] val=e39019
	   <...>-7807  [002] 105147.999542: hda_send_cmd: [0:0] val=e3a01a
	   <...>-7807  [002] 105147.999543: hda_send_cmd: [0:0] val=e3901a
	   <...>-26764 [001] 349222.837143: hda_send_cmd: [0:0] val=e3a019
	   <...>-26764 [001] 349222.837148: hda_send_cmd: [0:0] val=e39019
	   <...>-26764 [001] 349223.058539: hda_send_cmd: [0:0] val=e3a01a
	   <...>-26764 [001] 349223.058541: hda_send_cmd: [0:0] val=e3901a

Here ``[0:0]`` indicates the card number and the codec address, and
``val`` shows the value sent to the codec, respectively.  The value is
a packed value, and you can decode it via hda-decode-verb program
included in hda-emu package below.  For example, the value e3a019 is
to set the left output-amp value to 25.
::

    % hda-decode-verb 0xe3a019
    raw value = 0x00e3a019
    cid = 0, nid = 0x0e, verb = 0x3a0, parm = 0x19
    raw value: verb = 0x3a0, parm = 0x19
    verbname = set_amp_gain_mute
    amp raw val = 0xa019
    output, left, idx=0, mute=0, val=25


Development Tree
----------------
The latest development codes for HD-audio are found on sound git tree:

* git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git

The master branch or for-next branches can be used as the main
development branches in general while the development for the current
and next kernels are found in for-linus and for-next branches,
respectively.


Sending a Bug Report
--------------------
If any model or module options don't work for your device, it's time
to send a bug report to the developers.  Give the following in your
bug report:

* Hardware vendor, product and model names
* Kernel version (and ALSA-driver version if you built externally)
* ``alsa-info.sh`` output; run with ``--no-upload`` option.  See the
  section below about alsa-info

If it's a regression, at best, send alsa-info outputs of both working
and non-working kernels.  This is really helpful because we can
compare the codec registers directly.

Send a bug report either the following:

kernel-bugzilla
    https://bugzilla.kernel.org/
alsa-devel ML
    alsa-devel@alsa-project.org


Debug Tools
===========

This section describes some tools available for debugging HD-audio
problems.

alsa-info
---------
The script ``alsa-info.sh`` is a very useful tool to gather the audio
device information.  It's included in alsa-utils package.  The latest
version can be found on git repository:

* git://git.alsa-project.org/alsa-utils.git

The script can be fetched directly from the following URL, too:

* https://www.alsa-project.org/alsa-info.sh

Run this script as root, and it will gather the important information
such as the module lists, module parameters, proc file contents
including the codec proc files, mixer outputs and the control
elements.  As default, it will store the information onto a web server
on alsa-project.org.  But, if you send a bug report, it'd be better to
run with ``--no-upload`` option, and attach the generated file.

There are some other useful options.  See ``--help`` option output for
details.

When a probe error occurs or when the driver obviously assigns a
mismatched model, it'd be helpful to load the driver with
``probe_only=1`` option (at best after the cold reboot) and run
alsa-info at this state.  With this option, the driver won't configure
the mixer and PCM but just tries to probe the codec slot.  After
probing, the proc file is available, so you can get the raw codec
information before modified by the driver.  Of course, the driver
isn't usable with ``probe_only=1``.  But you can continue the
configuration via hwdep sysfs file if hda-reconfig option is enabled.
Using ``probe_only`` mask 2 skips the reset of HDA codecs (use
``probe_only=3`` as module option). The hwdep interface can be used
to determine the BIOS codec initialization.


hda-verb
--------
hda-verb is a tiny program that allows you to access the HD-audio
codec directly.  You can execute a raw HD-audio codec verb with this.
This program accesses the hwdep device, thus you need to enable the
kernel config ``CONFIG_SND_HDA_HWDEP=y`` beforehand.

The hda-verb program takes four arguments: the hwdep device file, the
widget NID, the verb and the parameter.  When you access to the codec
on the slot 2 of the card 0, pass /dev/snd/hwC0D2 to the first
argument, typically.  (However, the real path name depends on the
system.)

The second parameter is the widget number-id to access.  The third
parameter can be either a hex/digit number or a string corresponding
to a verb.  Similarly, the last parameter is the value to write, or
can be a string for the parameter type.

::

    % hda-verb /dev/snd/hwC0D0 0x12 0x701 2
    nid = 0x12, verb = 0x701, param = 0x2
    value = 0x0

    % hda-verb /dev/snd/hwC0D0 0x0 PARAMETERS VENDOR_ID
    nid = 0x0, verb = 0xf00, param = 0x0
    value = 0x10ec0262

    % hda-verb /dev/snd/hwC0D0 2 set_a 0xb080
    nid = 0x2, verb = 0x300, param = 0xb080
    value = 0x0


Although you can issue any verbs with this program, the driver state
won't be always updated.  For example, the volume values are usually
cached in the driver, and thus changing the widget amp value directly
via hda-verb won't change the mixer value.

The hda-verb program is included now in alsa-tools:

* git://git.alsa-project.org/alsa-tools.git

Also, the old stand-alone package is found in the ftp directory:

* ftp://ftp.suse.com/pub/people/tiwai/misc/

Also a git repository is available:

* git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/hda-verb.git

See README file in the tarball for more details about hda-verb
program.


hda-analyzer
------------
hda-analyzer provides a graphical interface to access the raw HD-audio
control, based on pyGTK2 binding.  It's a more powerful version of
hda-verb.  The program gives you an easy-to-use GUI stuff for showing
the widget information and adjusting the amp values, as well as the
proc-compatible output.

The hda-analyzer:

* https://git.alsa-project.org/?p=alsa.git;a=tree;f=hda-analyzer

is a part of alsa.git repository in alsa-project.org:

* git://git.alsa-project.org/alsa.git

Codecgraph
----------
Codecgraph is a utility program to generate a graph and visualizes the
codec-node connection of a codec chip.  It's especially useful when
you analyze or debug a codec without a proper datasheet.  The program
parses the given codec proc file and converts to SVG via graphiz
program.

The tarball and GIT trees are found in the web page at:

* http://helllabs.org/codecgraph/


hda-emu
-------
hda-emu is an HD-audio emulator.  The main purpose of this program is
to debug an HD-audio codec without the real hardware.  Thus, it
doesn't emulate the behavior with the real audio I/O, but it just
dumps the codec register changes and the ALSA-driver internal changes
at probing and operating the HD-audio driver.

The program requires a codec proc-file to simulate.  Get a proc file
for the target codec beforehand, or pick up an example codec from the
codec proc collections in the tarball.  Then, run the program with the
proc file, and the hda-emu program will start parsing the codec file
and simulates the HD-audio driver:

::

    % hda-emu codecs/stac9200-dell-d820-laptop
    # Parsing..
    hda_codec: Unknown model for STAC9200, using BIOS defaults
    hda_codec: pin nid 08 bios pin config 40c003fa
    ....


The program gives you only a very dumb command-line interface.  You
can get a proc-file dump at the current state, get a list of control
(mixer) elements, set/get the control element value, simulate the PCM
operation, the jack plugging simulation, etc.

The program is found in the git repository below:

* git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/hda-emu.git

See README file in the repository for more details about hda-emu
program.


hda-jack-retask
---------------
hda-jack-retask is a user-friendly GUI program to manipulate the
HD-audio pin control for jack retasking.  If you have a problem about
the jack assignment, try this program and check whether you can get
useful results.  Once when you figure out the proper pin assignment,
it can be fixed either in the driver code statically or via passing a
firmware patch file (see "Early Patching" section).

The program is included in alsa-tools now:

* git://git.alsa-project.org/alsa-tools.git
