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