Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) =============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) More Notes on HD-Audio Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) =============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) Takashi Iwai <tiwai@suse.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) General
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) =======
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) HD-audio is the new standard on-board audio component on modern PCs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) after AC97.  Although Linux has been supporting HD-audio since long
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) time ago, there are often problems with new machines.  A part of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) problem is broken BIOS, and the rest is the driver implementation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) This document explains the brief trouble-shooting and debugging
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) methods for the	HD-audio hardware.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) The HD-audio component consists of two parts: the controller chip and 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) the codec chips on the HD-audio bus.  Linux provides a single driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) for all controllers, snd-hda-intel.  Although the driver name contains
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) a word of a well-known hardware vendor, it's not specific to it but for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) all controller chips by other companies.  Since the HD-audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) controllers are supposed to be compatible, the single snd-hda-driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) should work in most cases.  But, not surprisingly, there are known
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) bugs and issues specific to each controller type.  The snd-hda-intel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) driver has a bunch of workarounds for these as described below.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) A controller may have multiple codecs.  Usually you have one audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) codec and optionally one modem codec.  In theory, there might be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) multiple audio codecs, e.g. for analog and digital outputs, and the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) driver might not work properly because of conflict of mixer elements.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) This should be fixed in future if such hardware really exists.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) The snd-hda-intel driver has several different codec parsers depending
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) on the codec.  It has a generic parser as a fallback, but this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) functionality is fairly limited until now.  Instead of the generic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) parser, usually the codec-specific parser (coded in patch_*.c) is used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) for the codec-specific implementations.  The details about the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) codec-specific problems are explained in the later sections.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) If you are interested in the deep debugging of HD-audio, read the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) HD-audio specification at first.  The specification is found on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) Intel's web page, for example:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) * https://www.intel.com/standards/hdaudio/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) HD-Audio Controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) ===================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) DMA-Position Problem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) --------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) The most common problem of the controller is the inaccurate DMA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) pointer reporting.  The DMA pointer for playback and capture can be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) read in two ways, either via a LPIB register or via a position-buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) map.  As default the driver tries to read from the io-mapped
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) position-buffer, and falls back to LPIB if the position-buffer appears
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) dead.  However, this detection isn't perfect on some devices.  In such
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) a case, you can change the default method via ``position_fix`` option.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) ``position_fix=1`` means to use LPIB method explicitly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) ``position_fix=2`` means to use the position-buffer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) ``position_fix=3`` means to use a combination of both methods, needed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) for some VIA controllers.  The capture stream position is corrected
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) by comparing both LPIB and position-buffer values.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) ``position_fix=4`` is another combination available for all controllers,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) and uses LPIB for the playback and the position-buffer for the capture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) streams.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) ``position_fix=5`` is specific to Intel platforms, so far, for Skylake
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) and onward.  It applies the delay calculation for the precise position
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) reporting.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) ``position_fix=6`` is to correct the position with the fixed FIFO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) size, mainly targeted for the recent AMD controllers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 0 is the default value for all other
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) controllers, the automatic check and fallback to LPIB as described in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) the above.  If you get a problem of repeated sounds, this option might
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) help.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) In addition to that, every controller is known to be broken regarding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) the wake-up timing.  It wakes up a few samples before actually
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) processing the data on the buffer.  This caused a lot of problems, for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) example, with ALSA dmix or JACK.  Since 2.6.27 kernel, the driver puts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) an artificial delay to the wake up timing.  This delay is controlled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) via ``bdl_pos_adj`` option. 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) When ``bdl_pos_adj`` is a negative value (as default), it's assigned to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) an appropriate value depending on the controller chip.  For Intel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) chips, it'd be 1 while it'd be 32 for others.  Usually this works.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) Only in case it doesn't work and you get warning messages, you should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) change this parameter to other values.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) Codec-Probing Problem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) ---------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) A less often but a more severe problem is the codec probing.  When
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) BIOS reports the available codec slots wrongly, the driver gets
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) confused and tries to access the non-existing codec slot.  This often
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) results in the total screw-up, and destructs the further communication
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) with the codec chips.  The symptom appears usually as error messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) like:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)     hda_intel: azx_get_response timeout, switching to polling mode:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)           last cmd=0x12345678
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)     hda_intel: azx_get_response timeout, switching to single_cmd mode:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)           last cmd=0x12345678
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) The first line is a warning, and this is usually relatively harmless.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) It means that the codec response isn't notified via an IRQ.  The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) driver uses explicit polling method to read the response.  It gives
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) very slight CPU overhead, but you'd unlikely notice it.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) The second line is, however, a fatal error.  If this happens, usually
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) it means that something is really wrong.  Most likely you are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) accessing a non-existing codec slot.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) Thus, if the second error message appears, try to narrow the probed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) codec slots via ``probe_mask`` option.  It's a bitmask, and each bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) corresponds to the codec slot.  For example, to probe only the first
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) slot, pass ``probe_mask=1``.  For the first and the third slots, pass
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ``probe_mask=5`` (where 5 = 1 | 4), and so on.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) Since 2.6.29 kernel, the driver has a more robust probing method, so
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) this error might happen rarely, though.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) On a machine with a broken BIOS, sometimes you need to force the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) driver to probe the codec slots the hardware doesn't report for use.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) In such a case, turn the bit 8 (0x100) of ``probe_mask`` option on.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) Then the rest 8 bits are passed as the codec slots to probe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) unconditionally.  For example, ``probe_mask=0x103`` will force to probe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) the codec slots 0 and 1 no matter what the hardware reports.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) Interrupt Handling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) ------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) HD-audio driver uses MSI as default (if available) since 2.6.33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) kernel as MSI works better on some machines, and in general, it's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) better for performance.  However, Nvidia controllers showed bad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) regressions with MSI (especially in a combination with AMD chipset),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) thus we disabled MSI for them.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) There seem also still other devices that don't work with MSI.  If you
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) see a regression wrt the sound quality (stuttering, etc) or a lock-up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) in the recent kernel, try to pass ``enable_msi=0`` option to disable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) MSI.  If it works, you can add the known bad device to the blacklist
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) defined in hda_intel.c.  In such a case, please report and give the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) patch back to the upstream developer. 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) HD-Audio Codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) ==============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) Model Option
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) ------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) The most common problem regarding the HD-audio driver is the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) unsupported codec features or the mismatched device configuration.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) Most of codec-specific code has several preset models, either to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) override the BIOS setup or to provide more comprehensive features.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) The driver checks PCI SSID and looks through the static configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) table until any matching entry is found.  If you have a new machine,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) you may see a message like below:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)     hda_codec: ALC880: BIOS auto-probing.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) Meanwhile, in the earlier versions, you would see a message like:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)     hda_codec: Unknown model for ALC880, trying auto-probe from BIOS...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) Even if you see such a message, DON'T PANIC.  Take a deep breath and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) keep your towel.  First of all, it's an informational message, no
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) warning, no error.  This means that the PCI SSID of your device isn't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) listed in the known preset model (white-)list.  But, this doesn't mean
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) that the driver is broken.  Many codec-drivers provide the automatic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) configuration mechanism based on the BIOS setup.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) The HD-audio codec has usually "pin" widgets, and BIOS sets the default
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) configuration of each pin, which indicates the location, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) connection type, the jack color, etc.  The HD-audio driver can guess
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) the right connection judging from these default configuration values.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) However -- some codec-support codes, such as patch_analog.c, don't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) support the automatic probing (yet as of 2.6.28).  And, BIOS is often,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) yes, pretty often broken.  It sets up wrong values and screws up the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) The preset model (or recently called as "fix-up") is provided
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) basically to overcome such a situation.  When the matching preset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) model is found in the white-list, the driver assumes the static
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) configuration of that preset with the correct pin setup, etc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) Thus, if you have a newer machine with a slightly different PCI SSID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) (or codec SSID) from the existing one, you may have a good chance to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) re-use the same model.  You can pass the ``model`` option to specify the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) preset model instead of PCI (and codec-) SSID look-up.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) What ``model`` option values are available depends on the codec chip.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) Check your codec chip from the codec proc file (see "Codec Proc-File"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) section below).  It will show the vendor/product name of your codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) chip.  Then, see Documentation/sound/hd-audio/models.rst file,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) the section of HD-audio driver.  You can find a list of codecs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) and ``model`` options belonging to each codec.  For example, for Realtek
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) ALC262 codec chip, pass ``model=ultra`` for devices that are compatible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) with Samsung Q1 Ultra.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) Thus, the first thing you can do for any brand-new, unsupported and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) non-working HD-audio hardware is to check HD-audio codec and several
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) different ``model`` option values.  If you have any luck, some of them
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) might suit with your device well.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) There are a few special model option values:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) * when 'nofixup' is passed, the device-specific fixups in the codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)   parser are skipped.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) * when ``generic`` is passed, the codec-specific parser is skipped and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)   only the generic parser is used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) Speaker and Headphone Output
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) ----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) One of the most frequent (and obvious) bugs with HD-audio is the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) silent output from either or both of a built-in speaker and a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) headphone jack.  In general, you should try a headphone output at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) first.  A speaker output often requires more additional controls like
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) the external amplifier bits.  Thus a headphone output has a slightly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) better chance.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) Before making a bug report, double-check whether the mixer is set up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) correctly.  The recent version of snd-hda-intel driver provides mostly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) "Master" volume control as well as "Front" volume (where Front
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) indicates the front-channels).  In addition, there can be individual
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) "Headphone" and "Speaker" controls.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) Ditto for the speaker output.  There can be "External Amplifier"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) switch on some codecs.  Turn on this if present.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) Another related problem is the automatic mute of speaker output by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) headphone plugging.  This feature is implemented in most cases, but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) not on every preset model or codec-support code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) In anyway, try a different model option if you have such a problem.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) Some other models may match better and give you more matching
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) functionality.  If none of the available models works, send a bug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) report.  See the bug report section for details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) If you are masochistic enough to debug the driver problem, note the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) following:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) * The speaker (and the headphone, too) output often requires the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)   external amplifier.  This can be set usually via EAPD verb or a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)   certain GPIO.  If the codec pin supports EAPD, you have a better
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)   chance via SET_EAPD_BTL verb (0x70c).  On others, GPIO pin (mostly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)   it's either GPIO0 or GPIO1) may turn on/off EAPD.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) * Some Realtek codecs require special vendor-specific coefficients to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)   turn on the amplifier.  See patch_realtek.c.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) * IDT codecs may have extra power-enable/disable controls on each
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)   analog pin.  See patch_sigmatel.c.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) * Very rare but some devices don't accept the pin-detection verb until
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)   triggered.  Issuing GET_PIN_SENSE verb (0xf09) may result in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)   codec-communication stall.  Some examples are found in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261)   patch_realtek.c.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) Capture Problems
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) ----------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) The capture problems are often because of missing setups of mixers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) Thus, before submitting a bug report, make sure that you set up the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) mixer correctly.  For example, both "Capture Volume" and "Capture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) Switch" have to be set properly in addition to the right "Capture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) Source" or "Input Source" selection.  Some devices have "Mic Boost"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) volume or switch.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) When the PCM device is opened via "default" PCM (without pulse-audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) plugin), you'll likely have "Digital Capture Volume" control as well.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) This is provided for the extra gain/attenuation of the signal in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) software, especially for the inputs without the hardware volume
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) control such as digital microphones.  Unless really needed, this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) should be set to exactly 50%, corresponding to 0dB -- neither extra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) gain nor attenuation.  When you use "hw" PCM, i.e., a raw access PCM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) this control will have no influence, though.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) It's known that some codecs / devices have fairly bad analog circuits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) and the recorded sound contains a certain DC-offset.  This is no bug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) of the driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) Most of modern laptops have no analog CD-input connection.  Thus, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) recording from CD input won't work in many cases although the driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) provides it as the capture source.  Use CDDA instead.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) The automatic switching of the built-in and external mic per plugging
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) is implemented on some codec models but not on every model.  Partly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) because of my laziness but mostly lack of testers.  Feel free to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) submit the improvement patch to the author.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) Direct Debugging
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) ----------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) If no model option gives you a better result, and you are a tough guy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) to fight against evil, try debugging via hitting the raw HD-audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) codec verbs to the device.  Some tools are available: hda-emu and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) hda-analyzer.  The detailed description is found in the sections
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) below.  You'd need to enable hwdep for using these tools.  See "Kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) Configuration" section.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) Other Issues
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) ============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) Kernel Configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) --------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) In general, I recommend you to enable the sound debug option,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) ``CONFIG_SND_DEBUG=y``, no matter whether you are debugging or not.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) This enables snd_printd() macro and others, and you'll get additional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) kernel messages at probing.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) In addition, you can enable ``CONFIG_SND_DEBUG_VERBOSE=y``.  But this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) will give you far more messages.  Thus turn this on only when you are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) sure to want it.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) Don't forget to turn on the appropriate ``CONFIG_SND_HDA_CODEC_*``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) options.  Note that each of them corresponds to the codec chip, not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) the controller chip.  Thus, even if lspci shows the Nvidia controller,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) you may need to choose the option for other vendors.  If you are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) unsure, just select all yes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) ``CONFIG_SND_HDA_HWDEP`` is a useful option for debugging the driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) When this is enabled, the driver creates hardware-dependent devices
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) (one per each codec), and you have a raw access to the device via
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) these device files.  For example, ``hwC0D2`` will be created for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) codec slot #2 of the first card (#0).  For debug-tools such as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) hda-verb and hda-analyzer, the hwdep device has to be enabled.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) Thus, it'd be better to turn this on always.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) ``CONFIG_SND_HDA_RECONFIG`` is a new option, and this depends on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) hwdep option above.  When enabled, you'll have some sysfs files under
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) the corresponding hwdep directory.  See "HD-audio reconfiguration"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) section below.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) ``CONFIG_SND_HDA_POWER_SAVE`` option enables the power-saving feature.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) See "Power-saving" section below.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) Codec Proc-File
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) ---------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) The codec proc-file is a treasure-chest for debugging HD-audio.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) It shows most of useful information of each codec widget.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) The proc file is located in /proc/asound/card*/codec#*, one file per
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) each codec slot.  You can know the codec vendor, product id and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) names, the type of each widget, capabilities and so on.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) This file, however, doesn't show the jack sensing state, so far.  This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) is because the jack-sensing might be depending on the trigger state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) This file will be picked up by the debug tools, and also it can be fed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) to the emulator as the primary codec information.  See the debug tools
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) section below.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) This proc file can be also used to check whether the generic parser is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) used.  When the generic parser is used, the vendor/product ID name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) will appear as "Realtek ID 0262", instead of "Realtek ALC262".
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) HD-Audio Reconfiguration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) ------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) This is an experimental feature to allow you re-configure the HD-audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) codec dynamically without reloading the driver.  The following sysfs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) files are available under each codec-hwdep device directory (e.g. 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) /sys/class/sound/hwC0D0):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) vendor_id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)     Shows the 32bit codec vendor-id hex number.  You can change the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)     vendor-id value by writing to this file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) subsystem_id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374)     Shows the 32bit codec subsystem-id hex number.  You can change the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)     subsystem-id value by writing to this file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) revision_id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377)     Shows the 32bit codec revision-id hex number.  You can change the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378)     revision-id value by writing to this file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) afg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)     Shows the AFG ID.  This is read-only.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) mfg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382)     Shows the MFG ID.  This is read-only.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)     Shows the codec name string.  Can be changed by writing to this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385)     file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) modelname
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)     Shows the currently set ``model`` option.  Can be changed by writing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388)     to this file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) init_verbs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390)     The extra verbs to execute at initialization.  You can add a verb by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)     writing to this file.  Pass three numbers: nid, verb and parameter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392)     (separated with a space).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) hints
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)     Shows / stores hint strings for codec parsers for any use.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395)     Its format is ``key = value``.  For example, passing ``jack_detect = no``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396)     will disable the jack detection of the machine completely.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) init_pin_configs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398)     Shows the initial pin default config values set by BIOS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) driver_pin_configs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400)     Shows the pin default values set by the codec parser explicitly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401)     This doesn't show all pin values but only the changed values by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402)     the parser.  That is, if the parser doesn't change the pin default
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)     config values by itself, this will contain nothing.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) user_pin_configs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405)     Shows the pin default config values to override the BIOS setup.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406)     Writing this (with two numbers, NID and value) appends the new
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407)     value.  The given will be used instead of the initial BIOS value at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)     the next reconfiguration time.  Note that this config will override
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)     even the driver pin configs, too.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) reconfig
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411)     Triggers the codec re-configuration.  When any value is written to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412)     this file, the driver re-initialize and parses the codec tree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413)     again.  All the changes done by the sysfs entries above are taken
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)     into account.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) clear
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416)     Resets the codec, removes the mixer elements and PCM stuff of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)     specified codec, and clear all init verbs and hints.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) For example, when you want to change the pin default configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) value of the pin widget 0x14 to 0x9993013f, and let the driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) re-configure based on that state, run like below:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424)     # echo 0x14 0x9993013f > /sys/class/sound/hwC0D0/user_pin_configs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425)     # echo 1 > /sys/class/sound/hwC0D0/reconfig  
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) Hint Strings
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) ------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) The codec parser have several switches and adjustment knobs for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) matching better with the actual codec or device behavior.  Many of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) them can be adjusted dynamically via "hints" strings as mentioned in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) the section above.  For example, by passing ``jack_detect = no`` string
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) via sysfs or a patch file, you can disable the jack detection, thus
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) the codec parser will skip the features like auto-mute or mic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) auto-switch.  As a boolean value, either ``yes``, ``no``, ``true``, ``false``,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) ``1`` or ``0`` can be passed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) The generic parser supports the following hints:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) jack_detect (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442)     specify whether the jack detection is available at all on this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443)     machine; default true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) inv_jack_detect (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445)     indicates that the jack detection logic is inverted
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) trigger_sense (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447)     indicates that the jack detection needs the explicit call of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448)     AC_VERB_SET_PIN_SENSE verb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) inv_eapd (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)     indicates that the EAPD is implemented in the inverted logic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) pcm_format_first (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452)     sets the PCM format before the stream tag and channel ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) sticky_stream (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454)     keep the PCM format, stream tag and ID as long as possible;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455)     default true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) spdif_status_reset (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457)     reset the SPDIF status bits at each time the SPDIF stream is set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458)     up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) pin_amp_workaround (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)     the output pin may have multiple amp values
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) single_adc_amp (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462)     ADCs can have only single input amps
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) auto_mute (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464)     enable/disable the headphone auto-mute feature; default true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) auto_mic (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466)     enable/disable the mic auto-switch feature; default true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) line_in_auto_switch (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468)     enable/disable the line-in auto-switch feature; default false
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) need_dac_fix (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470)     limits the DACs depending on the channel count
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) primary_hp (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472)     probe headphone jacks as the primary outputs; default true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) multi_io (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474)     try probing multi-I/O config (e.g. shared line-in/surround,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475)     mic/clfe jacks)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) multi_cap_vol (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477)     provide multiple capture volumes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) inv_dmic_split (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479)     provide split internal mic volume/switch for phase-inverted
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480)     digital mics
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) indep_hp (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482)     provide the independent headphone PCM stream and the corresponding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483)     mixer control, if available
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) add_stereo_mix_input (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485)     add the stereo mix (analog-loopback mix) to the input mux if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486)     available 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) add_jack_modes (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488)     add "xxx Jack Mode" enum controls to each I/O jack for allowing to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489)     change the headphone amp and mic bias VREF capabilities
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) power_save_node (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491)     advanced power management for each widget, controlling the power
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492)     sate (D0/D3) of each widget node depending on the actual pin and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493)     stream states
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) power_down_unused (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495)     power down the unused widgets, a subset of power_save_node, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496)     will be dropped in future 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) add_hp_mic (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498)     add the headphone to capture source if possible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) hp_mic_detect (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500)     enable/disable the hp/mic shared input for a single built-in mic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501)     case; default true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) vmaster (bool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503)     enable/disable the virtual Master control; default true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) mixer_nid (int)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505)     specifies the widget NID of the analog-loopback mixer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) Early Patching
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) --------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) When ``CONFIG_SND_HDA_PATCH_LOADER=y`` is set, you can pass a "patch"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) as a firmware file for modifying the HD-audio setup before
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) initializing the codec.  This can work basically like the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) reconfiguration via sysfs in the above, but it does it before the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) first codec configuration.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) A patch file is a plain text file which looks like below:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520)     [codec]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521)     0x12345678 0xabcd1234 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523)     [model]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524)     auto
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526)     [pincfg]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527)     0x12 0x411111f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529)     [verb]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530)     0x20 0x500 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531)     0x20 0x400 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533)     [hint]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534)     jack_detect = no
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) The file needs to have a line ``[codec]``.  The next line should contain
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) three numbers indicating the codec vendor-id (0x12345678 in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) example), the codec subsystem-id (0xabcd1234) and the address (2) of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) the codec.  The rest patch entries are applied to this specified codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) until another codec entry is given.  Passing 0 or a negative number to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) the first or the second value will make the check of the corresponding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) field be skipped.  It'll be useful for really broken devices that don't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) initialize SSID properly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) The ``[model]`` line allows to change the model name of the each codec.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) In the example above, it will be changed to model=auto.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) Note that this overrides the module option.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) After the ``[pincfg]`` line, the contents are parsed as the initial
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) default pin-configurations just like ``user_pin_configs`` sysfs above.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) The values can be shown in user_pin_configs sysfs file, too.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) Similarly, the lines after ``[verb]`` are parsed as ``init_verbs``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) sysfs entries, and the lines after ``[hint]`` are parsed as ``hints``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) sysfs entries, respectively.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) Another example to override the codec vendor id from 0x12345678 to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 0xdeadbeef is like below:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562)     [codec]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563)     0x12345678 0xabcd1234 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565)     [vendor_id]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566)     0xdeadbeef
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) In the similar way, you can override the codec subsystem_id via
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) ``[subsystem_id]``, the revision id via ``[revision_id]`` line.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) Also, the codec chip name can be rewritten via ``[chip_name]`` line.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574)     [codec]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575)     0x12345678 0xabcd1234 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577)     [subsystem_id]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578)     0xffff1111
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580)     [revision_id]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581)     0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583)     [chip_name]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584)     My-own NEWS-0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) The hd-audio driver reads the file via request_firmware().  Thus,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) a patch file has to be located on the appropriate firmware path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) typically, /lib/firmware.  For example, when you pass the option
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) ``patch=hda-init.fw``, the file /lib/firmware/hda-init.fw must be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) present.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) The patch module option is specific to each card instance, and you
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) need to give one file name for each instance, separated by commas.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) For example, if you have two cards, one for an on-board analog and one 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) for an HDMI video board, you may pass patch option like below:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599)     options snd-hda-intel patch=on-board-patch,hdmi-patch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) Power-Saving
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) ------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) The power-saving is a kind of auto-suspend of the device.  When the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) device is inactive for a certain time, the device is automatically
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) turned off to save the power.  The time to go down is specified via
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) ``power_save`` module option, and this option can be changed dynamically
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) via sysfs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) The power-saving won't work when the analog loopback is enabled on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) some codecs.  Make sure that you mute all unneeded signal routes when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) you want the power-saving.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) The power-saving feature might cause audible click noises at each
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) power-down/up depending on the device.  Some of them might be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) solvable, but some are hard, I'm afraid.  Some distros such as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) openSUSE enables the power-saving feature automatically when the power
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) cable is unplugged.  Thus, if you hear noises, suspect first the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) power-saving.  See /sys/module/snd_hda_intel/parameters/power_save to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) check the current value.  If it's non-zero, the feature is turned on.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) The recent kernel supports the runtime PM for the HD-audio controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) chip, too.  It means that the HD-audio controller is also powered up /
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) down dynamically.  The feature is enabled only for certain controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) chips like Intel LynxPoint.  You can enable/disable this feature
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) forcibly by setting ``power_save_controller`` option, which is also
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) available at /sys/module/snd_hda_intel/parameters directory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) Tracepoints
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) -----------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) The hd-audio driver gives a few basic tracepoints.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) ``hda:hda_send_cmd`` traces each CORB write while ``hda:hda_get_response``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) traces the response from RIRB (only when read from the codec driver).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) ``hda:hda_bus_reset`` traces the bus-reset due to fatal error, etc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) ``hda:hda_unsol_event`` traces the unsolicited events, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) ``hda:hda_power_down`` and ``hda:hda_power_up`` trace the power down/up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) via power-saving behavior.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) Enabling all tracepoints can be done like
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643)     # echo 1 > /sys/kernel/debug/tracing/events/hda/enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) then after some commands, you can traces from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) /sys/kernel/debug/tracing/trace file.  For example, when you want to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) trace what codec command is sent, enable the tracepoint like:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650)     # cat /sys/kernel/debug/tracing/trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651)     # tracer: nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652)     #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653)     #       TASK-PID    CPU#    TIMESTAMP  FUNCTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654)     #          | |       |          |         |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) 	   <...>-7807  [002] 105147.774889: hda_send_cmd: [0:0] val=e3a019
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) 	   <...>-7807  [002] 105147.774893: hda_send_cmd: [0:0] val=e39019
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) 	   <...>-7807  [002] 105147.999542: hda_send_cmd: [0:0] val=e3a01a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) 	   <...>-7807  [002] 105147.999543: hda_send_cmd: [0:0] val=e3901a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) 	   <...>-26764 [001] 349222.837143: hda_send_cmd: [0:0] val=e3a019
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) 	   <...>-26764 [001] 349222.837148: hda_send_cmd: [0:0] val=e39019
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) 	   <...>-26764 [001] 349223.058539: hda_send_cmd: [0:0] val=e3a01a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) 	   <...>-26764 [001] 349223.058541: hda_send_cmd: [0:0] val=e3901a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) Here ``[0:0]`` indicates the card number and the codec address, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) ``val`` shows the value sent to the codec, respectively.  The value is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) a packed value, and you can decode it via hda-decode-verb program
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) included in hda-emu package below.  For example, the value e3a019 is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) to set the left output-amp value to 25.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671)     % hda-decode-verb 0xe3a019
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672)     raw value = 0x00e3a019
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673)     cid = 0, nid = 0x0e, verb = 0x3a0, parm = 0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674)     raw value: verb = 0x3a0, parm = 0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675)     verbname = set_amp_gain_mute
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676)     amp raw val = 0xa019
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677)     output, left, idx=0, mute=0, val=25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) Development Tree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) ----------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) The latest development codes for HD-audio are found on sound git tree:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) * git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) The master branch or for-next branches can be used as the main
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) development branches in general while the development for the current
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) and next kernels are found in for-linus and for-next branches,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) respectively.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) Sending a Bug Report
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) --------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) If any model or module options don't work for your device, it's time
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) to send a bug report to the developers.  Give the following in your
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) bug report:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) * Hardware vendor, product and model names
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) * Kernel version (and ALSA-driver version if you built externally)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) * ``alsa-info.sh`` output; run with ``--no-upload`` option.  See the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701)   section below about alsa-info
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) If it's a regression, at best, send alsa-info outputs of both working
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) and non-working kernels.  This is really helpful because we can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) compare the codec registers directly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) Send a bug report either the following:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) kernel-bugzilla
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710)     https://bugzilla.kernel.org/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) alsa-devel ML
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712)     alsa-devel@alsa-project.org
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) Debug Tools
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) ===========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) This section describes some tools available for debugging HD-audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) problems.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) alsa-info
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) ---------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) The script ``alsa-info.sh`` is a very useful tool to gather the audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) device information.  It's included in alsa-utils package.  The latest
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) version can be found on git repository:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) * git://git.alsa-project.org/alsa-utils.git
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) The script can be fetched directly from the following URL, too:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) * https://www.alsa-project.org/alsa-info.sh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) Run this script as root, and it will gather the important information
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) such as the module lists, module parameters, proc file contents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) including the codec proc files, mixer outputs and the control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) elements.  As default, it will store the information onto a web server
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) on alsa-project.org.  But, if you send a bug report, it'd be better to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) run with ``--no-upload`` option, and attach the generated file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) There are some other useful options.  See ``--help`` option output for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) When a probe error occurs or when the driver obviously assigns a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) mismatched model, it'd be helpful to load the driver with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) ``probe_only=1`` option (at best after the cold reboot) and run
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) alsa-info at this state.  With this option, the driver won't configure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) the mixer and PCM but just tries to probe the codec slot.  After
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) probing, the proc file is available, so you can get the raw codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) information before modified by the driver.  Of course, the driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) isn't usable with ``probe_only=1``.  But you can continue the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) configuration via hwdep sysfs file if hda-reconfig option is enabled.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) Using ``probe_only`` mask 2 skips the reset of HDA codecs (use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) ``probe_only=3`` as module option). The hwdep interface can be used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) to determine the BIOS codec initialization.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) hda-verb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) --------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) hda-verb is a tiny program that allows you to access the HD-audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) codec directly.  You can execute a raw HD-audio codec verb with this.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) This program accesses the hwdep device, thus you need to enable the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) kernel config ``CONFIG_SND_HDA_HWDEP=y`` beforehand.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) The hda-verb program takes four arguments: the hwdep device file, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) widget NID, the verb and the parameter.  When you access to the codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) on the slot 2 of the card 0, pass /dev/snd/hwC0D2 to the first
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) argument, typically.  (However, the real path name depends on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) system.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) The second parameter is the widget number-id to access.  The third
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) parameter can be either a hex/digit number or a string corresponding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) to a verb.  Similarly, the last parameter is the value to write, or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) can be a string for the parameter type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777)     % hda-verb /dev/snd/hwC0D0 0x12 0x701 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778)     nid = 0x12, verb = 0x701, param = 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779)     value = 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781)     % hda-verb /dev/snd/hwC0D0 0x0 PARAMETERS VENDOR_ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782)     nid = 0x0, verb = 0xf00, param = 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783)     value = 0x10ec0262
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785)     % hda-verb /dev/snd/hwC0D0 2 set_a 0xb080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786)     nid = 0x2, verb = 0x300, param = 0xb080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787)     value = 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) Although you can issue any verbs with this program, the driver state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) won't be always updated.  For example, the volume values are usually
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) cached in the driver, and thus changing the widget amp value directly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) via hda-verb won't change the mixer value.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) The hda-verb program is included now in alsa-tools:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) * git://git.alsa-project.org/alsa-tools.git
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) Also, the old stand-alone package is found in the ftp directory:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) * ftp://ftp.suse.com/pub/people/tiwai/misc/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) Also a git repository is available:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) * git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/hda-verb.git
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) See README file in the tarball for more details about hda-verb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) program.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) hda-analyzer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) ------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) hda-analyzer provides a graphical interface to access the raw HD-audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) control, based on pyGTK2 binding.  It's a more powerful version of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) hda-verb.  The program gives you an easy-to-use GUI stuff for showing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) the widget information and adjusting the amp values, as well as the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) proc-compatible output.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) The hda-analyzer:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) * https://git.alsa-project.org/?p=alsa.git;a=tree;f=hda-analyzer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) is a part of alsa.git repository in alsa-project.org:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) * git://git.alsa-project.org/alsa.git
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) Codecgraph
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) ----------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) Codecgraph is a utility program to generate a graph and visualizes the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) codec-node connection of a codec chip.  It's especially useful when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) you analyze or debug a codec without a proper datasheet.  The program
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) parses the given codec proc file and converts to SVG via graphiz
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) program.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) The tarball and GIT trees are found in the web page at:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) * http://helllabs.org/codecgraph/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) hda-emu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) -------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) hda-emu is an HD-audio emulator.  The main purpose of this program is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) to debug an HD-audio codec without the real hardware.  Thus, it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) doesn't emulate the behavior with the real audio I/O, but it just
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) dumps the codec register changes and the ALSA-driver internal changes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) at probing and operating the HD-audio driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) The program requires a codec proc-file to simulate.  Get a proc file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) for the target codec beforehand, or pick up an example codec from the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) codec proc collections in the tarball.  Then, run the program with the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) proc file, and the hda-emu program will start parsing the codec file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) and simulates the HD-audio driver:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856)     % hda-emu codecs/stac9200-dell-d820-laptop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857)     # Parsing..
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858)     hda_codec: Unknown model for STAC9200, using BIOS defaults
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859)     hda_codec: pin nid 08 bios pin config 40c003fa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860)     ....
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) The program gives you only a very dumb command-line interface.  You
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) can get a proc-file dump at the current state, get a list of control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) (mixer) elements, set/get the control element value, simulate the PCM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) operation, the jack plugging simulation, etc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) The program is found in the git repository below:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) * git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/hda-emu.git
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) See README file in the repository for more details about hda-emu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) program.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) hda-jack-retask
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) ---------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) hda-jack-retask is a user-friendly GUI program to manipulate the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) HD-audio pin control for jack retasking.  If you have a problem about
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) the jack assignment, try this program and check whether you can get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) useful results.  Once when you figure out the proper pin assignment,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) it can be fixed either in the driver code statically or via passing a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) firmware patch file (see "Early Patching" section).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) The program is included in alsa-tools now:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) * git://git.alsa-project.org/alsa-tools.git