I am trying to enable the subwoofer speaker on a HP laptop, on this machine, there are two speakers and one headphone, but the BIOS verb only enabled one speaker(nid 0xd) and one headphone(nid 0xb), I need to use quirk in the kernel driver to configure the second speaker (subwoofer speaker, nid 0x10). Under current alsa driver, the headphone will be assigned a dac (nid 0x13) and the 2 speakers will be assigned a dac (nid 0x14), this assignment is not good since 2 speakers share the same dac, this means 2 speakers can't work at the same time to support 4.0/2.1 channels.
On another Dell machine with realtek codec, there are also 2 speakers, 1 headphone and 2 dacs, on this machine, 1 speaker and 1 headphone are assigned 1 dac, and the other speaker is assigned another dac, so there is no problem for this machine to support 4.0/2.1 channels.
Through debugging, I found on Dell machine, the speaker nid only has one connection to dac (hardwired), so when driver assign dac to it, the map_single() can successfully assign the each dac to the 2 speakers respectively. But on that HP machine, the speaker has multiple connections for dac,
the
map_single() can't work for this machine.
The alsa-info.txt for that HP machine is at http://pastebin.ubuntu.com/11667947/
Node 0x13 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out R/L Control: name="Headphone Playback Volume", index=0, device=0 ControlAmp: chs=3, dir=Out, idx=0, ofs=0 Control: name="Headphone Playback Switch", index=0, device=0 ControlAmp: chs=3, dir=Out, idx=0, ofs=0 Device: name="92HD91BXX Analog", type="Audio", device=0 Amp-Out caps: N/A Amp-Out vals: [0x80 0x80] Converter: stream=5, channel=0 Power states: Power: setting=D0, actual=D0 Delay: 13 samples Node 0x14 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out R/L Control: name="Speaker Playback Volume", index=0, device=0 ControlAmp: chs=3, dir=Out, idx=0, ofs=0 Control: name="Speaker Playback Switch", index=0, device=0 ControlAmp: chs=3, dir=Out, idx=0, ofs=0 Amp-Out caps: N/A Amp-Out vals: [0x64 0x64] Converter: stream=5, channel=0 Power states: Power: setting=D0, actual=D0 Delay: 13 samples
Do hda_proc.c or hda_codec use the correct verb to get amp out cap of idt codecs ?
92hd91 datasheet has default values of amp out caps
Why amp out caps are N/A ?
7.14.2.DAC0 (NID = 13h): OutAmpLeft
7.14.3.DAC0 (NID = 13h): OutAmpRight
7.15.2.DAC1 (NID = 14h): OutAmpLeft
7.15.3.DAC1 (NID = 14h): OutAmpRight