^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