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 497vmaster (bool) 498 enable/disable the virtual Master control; default true 499mixer_nid (int) 500 specifies the widget NID of the analog-loopback mixer 501 502 503Early Patching 504-------------- 505When ``CONFIG_SND_HDA_PATCH_LOADER=y`` is set, you can pass a "patch" 506as a firmware file for modifying the HD-audio setup before 507initializing the codec. This can work basically like the 508reconfiguration via sysfs in the above, but it does it before the 509first codec configuration. 510 511A patch file is a plain text file which looks like below: 512 513:: 514 515 [codec] 516 0x12345678 0xabcd1234 2 517 518 [model] 519 auto 520 521 [pincfg] 522 0x12 0x411111f0 523 524 [verb] 525 0x20 0x500 0x03 526 0x20 0x400 0xff 527 528 [hint] 529 jack_detect = no 530 531 532The file needs to have a line ``[codec]``. The next line should contain 533three numbers indicating the codec vendor-id (0x12345678 in the 534example), the codec subsystem-id (0xabcd1234) and the address (2) of 535the codec. The rest patch entries are applied to this specified codec 536until another codec entry is given. Passing 0 or a negative number to 537the first or the second value will make the check of the corresponding 538field be skipped. It'll be useful for really broken devices that don't 539initialize SSID properly. 540 541The ``[model]`` line allows to change the model name of the each codec. 542In the example above, it will be changed to model=auto. 543Note that this overrides the module option. 544 545After the ``[pincfg]`` line, the contents are parsed as the initial 546default pin-configurations just like ``user_pin_configs`` sysfs above. 547The values can be shown in user_pin_configs sysfs file, too. 548 549Similarly, the lines after ``[verb]`` are parsed as ``init_verbs`` 550sysfs entries, and the lines after ``[hint]`` are parsed as ``hints`` 551sysfs entries, respectively. 552 553Another example to override the codec vendor id from 0x12345678 to 5540xdeadbeef is like below: 555:: 556 557 [codec] 558 0x12345678 0xabcd1234 2 559 560 [vendor_id] 561 0xdeadbeef 562 563 564In the similar way, you can override the codec subsystem_id via 565``[subsystem_id]``, the revision id via ``[revision_id]`` line. 566Also, the codec chip name can be rewritten via ``[chip_name]`` line. 567:: 568 569 [codec] 570 0x12345678 0xabcd1234 2 571 572 [subsystem_id] 573 0xffff1111 574 575 [revision_id] 576 0x10 577 578 [chip_name] 579 My-own NEWS-0002 580 581 582The hd-audio driver reads the file via request_firmware(). Thus, 583a patch file has to be located on the appropriate firmware path, 584typically, /lib/firmware. For example, when you pass the option 585``patch=hda-init.fw``, the file /lib/firmware/hda-init.fw must be 586present. 587 588The patch module option is specific to each card instance, and you 589need to give one file name for each instance, separated by commas. 590For example, if you have two cards, one for an on-board analog and one 591for an HDMI video board, you may pass patch option like below: 592:: 593 594 options snd-hda-intel patch=on-board-patch,hdmi-patch 595 596 597Power-Saving 598------------ 599The power-saving is a kind of auto-suspend of the device. When the 600device is inactive for a certain time, the device is automatically 601turned off to save the power. The time to go down is specified via 602``power_save`` module option, and this option can be changed dynamically 603via sysfs. 604 605The power-saving won't work when the analog loopback is enabled on 606some codecs. Make sure that you mute all unneeded signal routes when 607you want the power-saving. 608 609The power-saving feature might cause audible click noises at each 610power-down/up depending on the device. Some of them might be 611solvable, but some are hard, I'm afraid. Some distros such as 612openSUSE enables the power-saving feature automatically when the power 613cable is unplugged. Thus, if you hear noises, suspect first the 614power-saving. See /sys/module/snd_hda_intel/parameters/power_save to 615check the current value. If it's non-zero, the feature is turned on. 616 617The recent kernel supports the runtime PM for the HD-audio controller 618chip, too. It means that the HD-audio controller is also powered up / 619down dynamically. The feature is enabled only for certain controller 620chips like Intel LynxPoint. You can enable/disable this feature 621forcibly by setting ``power_save_controller`` option, which is also 622available at /sys/module/snd_hda_intel/parameters directory. 623 624 625Tracepoints 626----------- 627The hd-audio driver gives a few basic tracepoints. 628``hda:hda_send_cmd`` traces each CORB write while ``hda:hda_get_response`` 629traces the response from RIRB (only when read from the codec driver). 630``hda:hda_bus_reset`` traces the bus-reset due to fatal error, etc, 631``hda:hda_unsol_event`` traces the unsolicited events, and 632``hda:hda_power_down`` and ``hda:hda_power_up`` trace the power down/up 633via power-saving behavior. 634 635Enabling all tracepoints can be done like 636:: 637 638 # echo 1 > /sys/kernel/debug/tracing/events/hda/enable 639 640then after some commands, you can traces from 641/sys/kernel/debug/tracing/trace file. For example, when you want to 642trace what codec command is sent, enable the tracepoint like: 643:: 644 645 # cat /sys/kernel/debug/tracing/trace 646 # tracer: nop 647 # 648 # TASK-PID CPU# TIMESTAMP FUNCTION 649 # | | | | | 650 <...>-7807 [002] 105147.774889: hda_send_cmd: [0:0] val=e3a019 651 <...>-7807 [002] 105147.774893: hda_send_cmd: [0:0] val=e39019 652 <...>-7807 [002] 105147.999542: hda_send_cmd: [0:0] val=e3a01a 653 <...>-7807 [002] 105147.999543: hda_send_cmd: [0:0] val=e3901a 654 <...>-26764 [001] 349222.837143: hda_send_cmd: [0:0] val=e3a019 655 <...>-26764 [001] 349222.837148: hda_send_cmd: [0:0] val=e39019 656 <...>-26764 [001] 349223.058539: hda_send_cmd: [0:0] val=e3a01a 657 <...>-26764 [001] 349223.058541: hda_send_cmd: [0:0] val=e3901a 658 659Here ``[0:0]`` indicates the card number and the codec address, and 660``val`` shows the value sent to the codec, respectively. The value is 661a packed value, and you can decode it via hda-decode-verb program 662included in hda-emu package below. For example, the value e3a019 is 663to set the left output-amp value to 25. 664:: 665 666 % hda-decode-verb 0xe3a019 667 raw value = 0x00e3a019 668 cid = 0, nid = 0x0e, verb = 0x3a0, parm = 0x19 669 raw value: verb = 0x3a0, parm = 0x19 670 verbname = set_amp_gain_mute 671 amp raw val = 0xa019 672 output, left, idx=0, mute=0, val=25 673 674 675Development Tree 676---------------- 677The latest development codes for HD-audio are found on sound git tree: 678 679* git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git 680 681The master branch or for-next branches can be used as the main 682development branches in general while the development for the current 683and next kernels are found in for-linus and for-next branches, 684respectively. 685 686 687Sending a Bug Report 688-------------------- 689If any model or module options don't work for your device, it's time 690to send a bug report to the developers. Give the following in your 691bug report: 692 693* Hardware vendor, product and model names 694* Kernel version (and ALSA-driver version if you built externally) 695* ``alsa-info.sh`` output; run with ``--no-upload`` option. See the 696 section below about alsa-info 697 698If it's a regression, at best, send alsa-info outputs of both working 699and non-working kernels. This is really helpful because we can 700compare the codec registers directly. 701 702Send a bug report either the following: 703 704kernel-bugzilla 705 https://bugzilla.kernel.org/ 706alsa-devel ML 707 alsa-devel@alsa-project.org 708 709 710Debug Tools 711=========== 712 713This section describes some tools available for debugging HD-audio 714problems. 715 716alsa-info 717--------- 718The script ``alsa-info.sh`` is a very useful tool to gather the audio 719device information. It's included in alsa-utils package. The latest 720version can be found on git repository: 721 722* git://git.alsa-project.org/alsa-utils.git 723 724The script can be fetched directly from the following URL, too: 725 726* http://www.alsa-project.org/alsa-info.sh 727 728Run this script as root, and it will gather the important information 729such as the module lists, module parameters, proc file contents 730including the codec proc files, mixer outputs and the control 731elements. As default, it will store the information onto a web server 732on alsa-project.org. But, if you send a bug report, it'd be better to 733run with ``--no-upload`` option, and attach the generated file. 734 735There are some other useful options. See ``--help`` option output for 736details. 737 738When a probe error occurs or when the driver obviously assigns a 739mismatched model, it'd be helpful to load the driver with 740``probe_only=1`` option (at best after the cold reboot) and run 741alsa-info at this state. With this option, the driver won't configure 742the mixer and PCM but just tries to probe the codec slot. After 743probing, the proc file is available, so you can get the raw codec 744information before modified by the driver. Of course, the driver 745isn't usable with ``probe_only=1``. But you can continue the 746configuration via hwdep sysfs file if hda-reconfig option is enabled. 747Using ``probe_only`` mask 2 skips the reset of HDA codecs (use 748``probe_only=3`` as module option). The hwdep interface can be used 749to determine the BIOS codec initialization. 750 751 752hda-verb 753-------- 754hda-verb is a tiny program that allows you to access the HD-audio 755codec directly. You can execute a raw HD-audio codec verb with this. 756This program accesses the hwdep device, thus you need to enable the 757kernel config ``CONFIG_SND_HDA_HWDEP=y`` beforehand. 758 759The hda-verb program takes four arguments: the hwdep device file, the 760widget NID, the verb and the parameter. When you access to the codec 761on the slot 2 of the card 0, pass /dev/snd/hwC0D2 to the first 762argument, typically. (However, the real path name depends on the 763system.) 764 765The second parameter is the widget number-id to access. The third 766parameter can be either a hex/digit number or a string corresponding 767to a verb. Similarly, the last parameter is the value to write, or 768can be a string for the parameter type. 769 770:: 771 772 % hda-verb /dev/snd/hwC0D0 0x12 0x701 2 773 nid = 0x12, verb = 0x701, param = 0x2 774 value = 0x0 775 776 % hda-verb /dev/snd/hwC0D0 0x0 PARAMETERS VENDOR_ID 777 nid = 0x0, verb = 0xf00, param = 0x0 778 value = 0x10ec0262 779 780 % hda-verb /dev/snd/hwC0D0 2 set_a 0xb080 781 nid = 0x2, verb = 0x300, param = 0xb080 782 value = 0x0 783 784 785Although you can issue any verbs with this program, the driver state 786won't be always updated. For example, the volume values are usually 787cached in the driver, and thus changing the widget amp value directly 788via hda-verb won't change the mixer value. 789 790The hda-verb program is included now in alsa-tools: 791 792* git://git.alsa-project.org/alsa-tools.git 793 794Also, the old stand-alone package is found in the ftp directory: 795 796* ftp://ftp.suse.com/pub/people/tiwai/misc/ 797 798Also a git repository is available: 799 800* git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/hda-verb.git 801 802See README file in the tarball for more details about hda-verb 803program. 804 805 806hda-analyzer 807------------ 808hda-analyzer provides a graphical interface to access the raw HD-audio 809control, based on pyGTK2 binding. It's a more powerful version of 810hda-verb. The program gives you an easy-to-use GUI stuff for showing 811the widget information and adjusting the amp values, as well as the 812proc-compatible output. 813 814The hda-analyzer: 815 816* http://git.alsa-project.org/?p=alsa.git;a=tree;f=hda-analyzer 817 818is a part of alsa.git repository in alsa-project.org: 819 820* git://git.alsa-project.org/alsa.git 821 822Codecgraph 823---------- 824Codecgraph is a utility program to generate a graph and visualizes the 825codec-node connection of a codec chip. It's especially useful when 826you analyze or debug a codec without a proper datasheet. The program 827parses the given codec proc file and converts to SVG via graphiz 828program. 829 830The tarball and GIT trees are found in the web page at: 831 832* http://helllabs.org/codecgraph/ 833 834 835hda-emu 836------- 837hda-emu is an HD-audio emulator. The main purpose of this program is 838to debug an HD-audio codec without the real hardware. Thus, it 839doesn't emulate the behavior with the real audio I/O, but it just 840dumps the codec register changes and the ALSA-driver internal changes 841at probing and operating the HD-audio driver. 842 843The program requires a codec proc-file to simulate. Get a proc file 844for the target codec beforehand, or pick up an example codec from the 845codec proc collections in the tarball. Then, run the program with the 846proc file, and the hda-emu program will start parsing the codec file 847and simulates the HD-audio driver: 848 849:: 850 851 % hda-emu codecs/stac9200-dell-d820-laptop 852 # Parsing.. 853 hda_codec: Unknown model for STAC9200, using BIOS defaults 854 hda_codec: pin nid 08 bios pin config 40c003fa 855 .... 856 857 858The program gives you only a very dumb command-line interface. You 859can get a proc-file dump at the current state, get a list of control 860(mixer) elements, set/get the control element value, simulate the PCM 861operation, the jack plugging simulation, etc. 862 863The program is found in the git repository below: 864 865* git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/hda-emu.git 866 867See README file in the repository for more details about hda-emu 868program. 869 870 871hda-jack-retask 872--------------- 873hda-jack-retask is a user-friendly GUI program to manipulate the 874HD-audio pin control for jack retasking. If you have a problem about 875the jack assignment, try this program and check whether you can get 876useful results. Once when you figure out the proper pin assignment, 877it can be fixed either in the driver code statically or via passing a 878firmware patch file (see "Early Patching" section). 879 880The program is included in alsa-tools now: 881 882* git://git.alsa-project.org/alsa-tools.git 883