[alsa-devel] 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles

Raymond Yau superquad.vortex2 at gmail.com
Thu Jun 11 18:44:24 CEST 2015


2015-6-11 下午4:33 於 "Hui Wang" <hui.wang at canonical.com> 寫道:
>
> On 06/11/2015 03:37 PM, Raymond Yau wrote:
>>>>>>>>>
>>>>>>>>> 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/
>>>>>>>>
>>>>>>>> Refer to 92HD91, you don't need 4 channel when there is band pass
>>>>
>>>> filter
>>>>>>>>
>>>>>>>> for the subwoofer at the mono pin
>>>>>>>
>>>>>>> Yes, you are right.
>>>>>>>
>>>>>>>> 2.2. Mono Output
>>>>>>>> The Mono Out port source selection, power state, and mute
>>>>
>>>> characteristics
>>>>>>>>
>>>>>>>> are all independently
>>>>>>>> controlled by the mono output port controls. EQ does not apply to
>>
>> this
>>>>>>>>
>>>>>>>> path. An internal 2nd order band-pass filter is provided to
restrict
>>>>
>>>> the
>>>>>>>>
>>>>>>>> output frequencies when using mono out to drive an exter-
>>>>>>>> nal amplified sub-woofer
>>>>>>>
>>>>>>> Where did you find this text? Does it mean there is a hardware low
>>>>>>
>>>>>> frequency pass filter inside the codec?
>>>>>>
>>>>>> http://www.temposemi.com/products/pclaptop-hd/92hd91/
>>>>>>
>>>>>> 2.3. Mono output Band-Pass Filter
>>>>>> For many applications, the primary speakers are incapable of
>>
>> reproducing
>>>>>>
>>>>>> low frequency audio. Therefore it is desirable to implement a woofer
or
>>>>>> sub-woofer speaker. The mono output is ideal for this task. However,
>>
>> the
>>>>>>
>>>>>> frequency response should be restricted to prevent interference with
>>
>> the
>>>>>>
>>>>>> primary speakers. Typically an external filter, known as a cross-over
>>>>>> filter, is used. The mono processing path includes a band-pass filter
>>>>
>>>> with
>>>>>>
>>>>>> programmable high and low cut-off frequencies to eliminate the need
for
>>>>
>>>> an
>>>>>>
>>>>>> external filter.
>>>>>>
>>>>>> 2.3.1. Mixer Filter Description The band-pass filter is derived from
>>
>> the
>>>>>>
>>>>>> common biquadratic filter and provides a 12dB/octave roll-off. The
>>
>> filter
>>>>>>
>>>>>> may be programmed for a -3dB lower band edge of: 63Hz, 80Hz, 100Hz,
>>>>
>>>> 120Hz,
>>>>>>
>>>>>> 150Hz, 200Hz, 315Hz, or 400Hz.
>>>>>>
>>>>>> The filter may be programmed for a -3dB upper band edge of: 150Hz,
>>
>> 200Hz,
>>>>>>
>>>>>> 250Hz, 315Hz, 400Hz, 500Hz, 630Hz, or 800Hz.
>>>>>>
>>>>>> The band-pass filter is enabled by default with a cut-off frequencies
>>
>> at
>>>>>>
>>>>>> 120Hz and 250Hz. The filter may be bypassed using the associated verb
>>>>>> (processing state verb
>>>>>
>>>>> Thanks very much, very useful information.
>>>>>
>>>>>
>>>> Do your codec revision support this mono out volume ?
>>>>
>>>> 7.4.31.AFG (NID = 01h): DAC3OutAmp (Mono Out Volume)
>>>
>>> I looks like the current driver does not use this to control the volume.

You can use hda-verb and use vendor specific get verb with afg node  to
find out whether you can get back the default values 0x7f

>>>
>>>> How do you assign the two volume control to headphone, speaker and
>>>> subwoofet ?
>>>
>>> speaker and headphone are assigned to DAC0 (nid: 0x13), they use the DAC
>>
>> amplifier to control the volume.
>>>
>>> subwoofer speaker is assigned to DAC1 (nid: 0x14), it use the DAC
>>
>> amplifier to contorl the volume.
>> Do pulseaudio like this config since there is no mute switch at pin
complex
>> of idt codecs and no headphone playback volume/switch?
>>
>> After applied your patch
>>
>> Front playback volume/switch are shared by headphone and speaker
>> Base speaker playback volume/switch
>>
>> But the other 4 channels  hda codecs vt1802 have speaker playback switch
>> and subwoofer playback switch
>
> Even without this patch, the base speaker and headphone already shared
the same DAC and use single "Front Playback Volume" to control their
volume, I did not see any problem from the pulseaudio/desktop so far.
>
> http://pastebin.ubuntu.com/11667982/

It won't happen with realtek alc2xx codec since the pin complex of most
Realtek codec support mute

> About the sharing the switch between headphone and base speaker, this is
a new situation, but I did not see obvious problem from pusleaudio/desktop
as well.
>>
>>
http://git.kernel.org/cgit/linux/kernel/git/tiwai/hda-emu.git/tree/codecs/vt1802-asus-g75
>>

Independent headphone should be disabled when headphone and internal
speaker of notebook share same DAC  or only enabled on desktop with codecs
support 2+2 , 7.1+2


More information about the Alsa-devel mailing list