All of lore.kernel.org
 help / color / mirror / Atom feed
* 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
@ 2015-06-09  9:38 hwang4
  2015-06-09 11:50 ` Raymond Yau
  2015-06-09 11:51 ` Takashi Iwai
  0 siblings, 2 replies; 28+ messages in thread
From: hwang4 @ 2015-06-09  9:38 UTC (permalink / raw)
  To: Takashi Iwai, David Henningsson; +Cc: alsa-devel

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/
The alsa-info.txt for that Dell machine is at 
http://pastebin.ubuntu.com/11667982/

To fix this problem, I can use the quirk in the driver to make the 
speaker have
only one connection for dac or do some change in the hda_generic.c like 
below, in
your opinion, which one is better or probably you have a different idea 
to fix this problem?

diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index ac0db16..8194ff1 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -1363,6 +1363,7 @@ static int try_assign_dacs(struct hda_codec 
*codec, int num_outs,
                                 dac = try_dac(codec, 
get_primary_out(codec, i), pin);
                         if (!dac)
                                 dac = try_dac(codec, dacs[0], pin);
                         if (!dac)
                                 dac = try_dac(codec, 
get_primary_out(codec, i), pin);
                         if (dac) {
@@ -1762,6 +1763,12 @@ static int fill_and_eval_dacs(struct hda_codec 
*codec,
                 if (err < 0)
                         return err;
                 badness += err;
+               /* if there are 2 speakers and both of them are assigned 
to the same dac,
+                  we need to increase the badness for this situation, 
because in this situation
+                  the 2 speakers can't work together to support 4.0/2.1 
channels */
+               if (cfg->speaker_outs == 2 && err < 
spec->extra_out_badness->no_dac &&
+                   spec->multiout.extra_out_nid[1] == 0)
+                       badness += spec->extra_out_badness->no_dac;
         }
         if (!spec->no_multi_io &&
             cfg->line_outs == 1 && cfg->line_out_type != 
AUTO_PIN_SPEAKER_OUT) {
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index bdcda6a..717259c 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -2764,6 +2764,8 @@ static const struct snd_pci_quirk 
stac92hd83xxx_fixup_tbl[] = {
                           "HP bNB13", STAC_HP_BNB13_EQ),
         SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x190e,
                           "HP ENVY TS", STAC_HP_ENVY_TS_BASS),
+       SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1967,
+                         "HP ENVY TS", STAC_HP_ENVY_TS_BASS),
         SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1940,
                           "HP bNB13", STAC_HP_BNB13_EQ),
         SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1941,

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-09  9:38 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles hwang4
@ 2015-06-09 11:50 ` Raymond Yau
  2015-06-09 13:20   ` Hui Wang
  2015-06-09 11:51 ` Takashi Iwai
  1 sibling, 1 reply; 28+ messages in thread
From: Raymond Yau @ 2015-06-09 11:50 UTC (permalink / raw)
  To: hwang4; +Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

2015-6-9 下午5:39 於 "hwang4" <hui.wang@canonical.com> 寫道:
>
> 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

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

> The alsa-info.txt for that Dell machine is at
http://pastebin.ubuntu.com/11667982/

The subwoofer is also at mono pin complex, are  there any low pass filter
for the subwoofer or vendor coeff need to be set ?

>
> To fix this problem, I can use the quirk in the driver to make the
speaker have
> only one connection for dac or do some change in the hda_generic.c like
below, in
> your opinion, which one is better or probably you have a different idea
to fix this problem?
>
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-09  9:38 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles hwang4
  2015-06-09 11:50 ` Raymond Yau
@ 2015-06-09 11:51 ` Takashi Iwai
  2015-06-09 13:26   ` Hui Wang
  2015-06-14  6:48   ` Raymond Yau
  1 sibling, 2 replies; 28+ messages in thread
From: Takashi Iwai @ 2015-06-09 11:51 UTC (permalink / raw)
  To: hwang4; +Cc: alsa-devel, David Henningsson

At Tue, 09 Jun 2015 17:38:33 +0800,
hwang4 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/
> The alsa-info.txt for that Dell machine is at 
> http://pastebin.ubuntu.com/11667982/
> 
> To fix this problem, I can use the quirk in the driver to make the 
> speaker have
> only one connection for dac or do some change in the hda_generic.c like 
> below, in
> your opinion, which one is better or probably you have a different idea 
> to fix this problem?
> 
> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
> index ac0db16..8194ff1 100644
> --- a/sound/pci/hda/hda_generic.c
> +++ b/sound/pci/hda/hda_generic.c
> @@ -1363,6 +1363,7 @@ static int try_assign_dacs(struct hda_codec 
> *codec, int num_outs,
>                                  dac = try_dac(codec, 
> get_primary_out(codec, i), pin);
>                          if (!dac)
>                                  dac = try_dac(codec, dacs[0], pin);
>                          if (!dac)
>                                  dac = try_dac(codec, 
> get_primary_out(codec, i), pin);
>                          if (dac) {
> @@ -1762,6 +1763,12 @@ static int fill_and_eval_dacs(struct hda_codec 
> *codec,
>                  if (err < 0)
>                          return err;
>                  badness += err;
> +               /* if there are 2 speakers and both of them are assigned 
> to the same dac,
> +                  we need to increase the badness for this situation, 
> because in this situation
> +                  the 2 speakers can't work together to support 4.0/2.1 
> channels */
> +               if (cfg->speaker_outs == 2 && err < 
> spec->extra_out_badness->no_dac &&
> +                   spec->multiout.extra_out_nid[1] == 0)
> +                       badness += spec->extra_out_badness->no_dac;

This doesn't look like the correct place to add badness for the
missing surround speaker.  This function is called for each path, so
it's evaluated not only for speakers.

A cleaner way would be to prepare a different badness table for the
speaker, and increase the value for shared_surr.  An untested patch is
below.


Takashi

---
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index ac0db1679f09..ee03fb884426 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -1292,6 +1292,15 @@ const struct badness_table hda_extra_out_badness = {
 };
 EXPORT_SYMBOL_GPL(hda_extra_out_badness);
 
+static const struct badness_table hda_speaker_out_badness = {
+	.no_primary_dac = BAD_NO_DAC,
+	.no_dac = BAD_NO_DAC,
+	.shared_primary = BAD_NO_EXTRA_DAC,
+	.shared_surr = BAD_NO_EXTRA_DAC,
+	.shared_clfe = BAD_SHARED_EXTRA_SURROUND,
+	.shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
+};
+
 /* get the DAC of the primary output corresponding to the given array index */
 static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
 {
@@ -1758,7 +1767,7 @@ static int fill_and_eval_dacs(struct hda_codec *codec,
 				      cfg->speaker_pins,
 				      spec->multiout.extra_out_nid,
 				      spec->speaker_paths,
-				      spec->extra_out_badness);
+				      spec->speaker_out_badness);
 		if (err < 0)
 			return err;
 		badness += err;
@@ -4789,6 +4798,8 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
 		spec->main_out_badness = &hda_main_out_badness;
 	if (!spec->extra_out_badness)
 		spec->extra_out_badness = &hda_extra_out_badness;
+	if (!spec->speaker_out_badness)
+		spec->speaker_out_badness = &hda_speaker_out_badness;
 
 	fill_all_dac_nids(codec);
 
diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
index 56e4139b9032..1f868de1aec4 100644
--- a/sound/pci/hda/hda_generic.h
+++ b/sound/pci/hda/hda_generic.h
@@ -246,6 +246,7 @@ struct hda_gen_spec {
 	/* badness tables for output path evaluations */
 	const struct badness_table *main_out_badness;
 	const struct badness_table *extra_out_badness;
+	const struct badness_table *speaker_out_badness;
 
 	/* preferred pin/DAC pairs; an array of paired NIDs */
 	const hda_nid_t *preferred_dacs;
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index 0521be8d46a8..9e9d0456dab7 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -579,6 +579,7 @@ static int via_parse_auto_config(struct hda_codec *codec)
 
 	spec->gen.main_out_badness = &via_main_out_badness;
 	spec->gen.extra_out_badness = &via_extra_out_badness;
+	spec->gen.speaker_out_badness = &via_extra_out_badness;
 
 	err = snd_hda_parse_pin_defcfg(codec, &spec->gen.autocfg, NULL, 0);
 	if (err < 0)

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-09 11:50 ` Raymond Yau
@ 2015-06-09 13:20   ` Hui Wang
  2015-06-10  1:30     ` Raymond Yau
                       ` (2 more replies)
  0 siblings, 3 replies; 28+ messages in thread
From: Hui Wang @ 2015-06-09 13:20 UTC (permalink / raw)
  To: Raymond Yau
  Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

On 06/09/2015 07:50 PM, Raymond Yau wrote:
> 2015-6-9 下午5:39 於 "hwang4" <hui.wang@canonical.com> 寫道:
>> 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?
>
>> The alsa-info.txt for that Dell machine is at
> http://pastebin.ubuntu.com/11667982/
>
> The subwoofer is also at mono pin complex, are  there any low pass filter
> for the subwoofer or vendor coeff need to be set ?
I don't know it, I guess there is no hardware filter, it will work with 
the software low pass filter in the pulseaudio.
>
>> To fix this problem, I can use the quirk in the driver to make the
> speaker have
>> only one connection for dac or do some change in the hda_generic.c like
> below, in
>> your opinion, which one is better or probably you have a different idea
> to fix this problem?
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-09 11:51 ` Takashi Iwai
@ 2015-06-09 13:26   ` Hui Wang
  2015-06-10  4:19     ` hwang4
  2015-06-14  6:48   ` Raymond Yau
  1 sibling, 1 reply; 28+ messages in thread
From: Hui Wang @ 2015-06-09 13:26 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel, David Henningsson

On 06/09/2015 07:51 PM, Takashi Iwai wrote:
> At Tue, 09 Jun 2015 17:38:33 +0800,
> hwang4 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/
>> The alsa-info.txt for that Dell machine is at
>> http://pastebin.ubuntu.com/11667982/
>>
>> To fix this problem, I can use the quirk in the driver to make the
>> speaker have
>> only one connection for dac or do some change in the hda_generic.c like
>> below, in
>> your opinion, which one is better or probably you have a different idea
>> to fix this problem?
>>
>> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
>> index ac0db16..8194ff1 100644
>> --- a/sound/pci/hda/hda_generic.c
>> +++ b/sound/pci/hda/hda_generic.c
>> @@ -1363,6 +1363,7 @@ static int try_assign_dacs(struct hda_codec
>> *codec, int num_outs,
>>                                   dac = try_dac(codec,
>> get_primary_out(codec, i), pin);
>>                           if (!dac)
>>                                   dac = try_dac(codec, dacs[0], pin);
>>                           if (!dac)
>>                                   dac = try_dac(codec,
>> get_primary_out(codec, i), pin);
>>                           if (dac) {
>> @@ -1762,6 +1763,12 @@ static int fill_and_eval_dacs(struct hda_codec
>> *codec,
>>                   if (err < 0)
>>                           return err;
>>                   badness += err;
>> +               /* if there are 2 speakers and both of them are assigned
>> to the same dac,
>> +                  we need to increase the badness for this situation,
>> because in this situation
>> +                  the 2 speakers can't work together to support 4.0/2.1
>> channels */
>> +               if (cfg->speaker_outs == 2 && err <
>> spec->extra_out_badness->no_dac &&
>> +                   spec->multiout.extra_out_nid[1] == 0)
>> +                       badness += spec->extra_out_badness->no_dac;
> This doesn't look like the correct place to add badness for the
> missing surround speaker.  This function is called for each path, so
> it's evaluated not only for speakers.
>
> A cleaner way would be to prepare a different badness table for the
> speaker, and increase the value for shared_surr.  An untested patch is
> below.
Got it, I will test it soon. Thanks.

>
> Takashi
>
> ---
> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
> index ac0db1679f09..ee03fb884426 100644
> --- a/sound/pci/hda/hda_generic.c
> +++ b/sound/pci/hda/hda_generic.c
> @@ -1292,6 +1292,15 @@ const struct badness_table hda_extra_out_badness = {
>   };
>   EXPORT_SYMBOL_GPL(hda_extra_out_badness);
>   
> +static const struct badness_table hda_speaker_out_badness = {
> +	.no_primary_dac = BAD_NO_DAC,
> +	.no_dac = BAD_NO_DAC,
> +	.shared_primary = BAD_NO_EXTRA_DAC,
> +	.shared_surr = BAD_NO_EXTRA_DAC,
> +	.shared_clfe = BAD_SHARED_EXTRA_SURROUND,
> +	.shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
> +};
> +
>   /* get the DAC of the primary output corresponding to the given array index */
>   static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
>   {
> @@ -1758,7 +1767,7 @@ static int fill_and_eval_dacs(struct hda_codec *codec,
>   				      cfg->speaker_pins,
>   				      spec->multiout.extra_out_nid,
>   				      spec->speaker_paths,
> -				      spec->extra_out_badness);
> +				      spec->speaker_out_badness);
>   		if (err < 0)
>   			return err;
>   		badness += err;
> @@ -4789,6 +4798,8 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
>   		spec->main_out_badness = &hda_main_out_badness;
>   	if (!spec->extra_out_badness)
>   		spec->extra_out_badness = &hda_extra_out_badness;
> +	if (!spec->speaker_out_badness)
> +		spec->speaker_out_badness = &hda_speaker_out_badness;
>   
>   	fill_all_dac_nids(codec);
>   
> diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
> index 56e4139b9032..1f868de1aec4 100644
> --- a/sound/pci/hda/hda_generic.h
> +++ b/sound/pci/hda/hda_generic.h
> @@ -246,6 +246,7 @@ struct hda_gen_spec {
>   	/* badness tables for output path evaluations */
>   	const struct badness_table *main_out_badness;
>   	const struct badness_table *extra_out_badness;
> +	const struct badness_table *speaker_out_badness;
>   
>   	/* preferred pin/DAC pairs; an array of paired NIDs */
>   	const hda_nid_t *preferred_dacs;
> diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
> index 0521be8d46a8..9e9d0456dab7 100644
> --- a/sound/pci/hda/patch_via.c
> +++ b/sound/pci/hda/patch_via.c
> @@ -579,6 +579,7 @@ static int via_parse_auto_config(struct hda_codec *codec)
>   
>   	spec->gen.main_out_badness = &via_main_out_badness;
>   	spec->gen.extra_out_badness = &via_extra_out_badness;
> +	spec->gen.speaker_out_badness = &via_extra_out_badness;
>   
>   	err = snd_hda_parse_pin_defcfg(codec, &spec->gen.autocfg, NULL, 0);
>   	if (err < 0)
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-09 13:20   ` Hui Wang
@ 2015-06-10  1:30     ` Raymond Yau
  2015-06-10  3:18       ` hwang4
  2015-06-10  4:59     ` Raymond Yau
  2015-06-12  1:34     ` Raymond Yau
  2 siblings, 1 reply; 28+ messages in thread
From: Raymond Yau @ 2015-06-10  1:30 UTC (permalink / raw)
  To: Hui Wang; +Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

>>>
>>> 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

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-10  1:30     ` Raymond Yau
@ 2015-06-10  3:18       ` hwang4
  2015-06-11  1:15         ` Raymond Yau
  0 siblings, 1 reply; 28+ messages in thread
From: hwang4 @ 2015-06-10  3:18 UTC (permalink / raw)
  To: Raymond Yau
  Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson



On 2015年06月10日 09:30, 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.


> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
>

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-09 13:26   ` Hui Wang
@ 2015-06-10  4:19     ` hwang4
  2015-06-10 10:28       ` Takashi Iwai
  0 siblings, 1 reply; 28+ messages in thread
From: hwang4 @ 2015-06-10  4:19 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel, David Henningsson



On 2015年06月09日 21:26, Hui Wang wrote:
> On 06/09/2015 07:51 PM, Takashi Iwai wrote:
>> At Tue, 09 Jun 2015 17:38:33 +0800,
>> hwang4 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/
>>> The alsa-info.txt for that Dell machine is at
>>> http://pastebin.ubuntu.com/11667982/
>>>
>>> To fix this problem, I can use the quirk in the driver to make the
>>> speaker have
>>> only one connection for dac or do some change in the hda_generic.c like
>>> below, in
>>> your opinion, which one is better or probably you have a different idea
>>> to fix this problem?
>>>
>>> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
>>> index ac0db16..8194ff1 100644
>>> --- a/sound/pci/hda/hda_generic.c
>>> +++ b/sound/pci/hda/hda_generic.c
>>> @@ -1363,6 +1363,7 @@ static int try_assign_dacs(struct hda_codec
>>> *codec, int num_outs,
>>>                                   dac = try_dac(codec,
>>> get_primary_out(codec, i), pin);
>>>                           if (!dac)
>>>                                   dac = try_dac(codec, dacs[0], pin);
>>>                           if (!dac)
>>>                                   dac = try_dac(codec,
>>> get_primary_out(codec, i), pin);
>>>                           if (dac) {
>>> @@ -1762,6 +1763,12 @@ static int fill_and_eval_dacs(struct hda_codec
>>> *codec,
>>>                   if (err < 0)
>>>                           return err;
>>>                   badness += err;
>>> +               /* if there are 2 speakers and both of them are 
>>> assigned
>>> to the same dac,
>>> +                  we need to increase the badness for this situation,
>>> because in this situation
>>> +                  the 2 speakers can't work together to support 
>>> 4.0/2.1
>>> channels */
>>> +               if (cfg->speaker_outs == 2 && err <
>>> spec->extra_out_badness->no_dac &&
>>> +                   spec->multiout.extra_out_nid[1] == 0)
>>> +                       badness += spec->extra_out_badness->no_dac;
>> This doesn't look like the correct place to add badness for the
>> missing surround speaker.  This function is called for each path, so
>> it's evaluated not only for speakers.
>>
>> A cleaner way would be to prepare a different badness table for the
>> speaker, and increase the value for shared_surr.  An untested patch is
>> below.
> Got it, I will test it soon. Thanks.
>
Hi Takashi,

Your patch can fix the problem, it works very well.

Thanks,
Hui.
>>
>> Takashi
>>
>> ---
>> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
>> index ac0db1679f09..ee03fb884426 100644
>> --- a/sound/pci/hda/hda_generic.c
>> +++ b/sound/pci/hda/hda_generic.c
>> @@ -1292,6 +1292,15 @@ const struct badness_table 
>> hda_extra_out_badness = {
>>   };
>>   EXPORT_SYMBOL_GPL(hda_extra_out_badness);
>>   +static const struct badness_table hda_speaker_out_badness = {
>> +    .no_primary_dac = BAD_NO_DAC,
>> +    .no_dac = BAD_NO_DAC,
>> +    .shared_primary = BAD_NO_EXTRA_DAC,
>> +    .shared_surr = BAD_NO_EXTRA_DAC,
>> +    .shared_clfe = BAD_SHARED_EXTRA_SURROUND,
>> +    .shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
>> +};
>> +
>>   /* get the DAC of the primary output corresponding to the given 
>> array index */
>>   static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
>>   {
>> @@ -1758,7 +1767,7 @@ static int fill_and_eval_dacs(struct hda_codec 
>> *codec,
>>                         cfg->speaker_pins,
>>                         spec->multiout.extra_out_nid,
>>                         spec->speaker_paths,
>> -                      spec->extra_out_badness);
>> +                      spec->speaker_out_badness);
>>           if (err < 0)
>>               return err;
>>           badness += err;
>> @@ -4789,6 +4798,8 @@ int snd_hda_gen_parse_auto_config(struct 
>> hda_codec *codec,
>>           spec->main_out_badness = &hda_main_out_badness;
>>       if (!spec->extra_out_badness)
>>           spec->extra_out_badness = &hda_extra_out_badness;
>> +    if (!spec->speaker_out_badness)
>> +        spec->speaker_out_badness = &hda_speaker_out_badness;
>>         fill_all_dac_nids(codec);
>>   diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
>> index 56e4139b9032..1f868de1aec4 100644
>> --- a/sound/pci/hda/hda_generic.h
>> +++ b/sound/pci/hda/hda_generic.h
>> @@ -246,6 +246,7 @@ struct hda_gen_spec {
>>       /* badness tables for output path evaluations */
>>       const struct badness_table *main_out_badness;
>>       const struct badness_table *extra_out_badness;
>> +    const struct badness_table *speaker_out_badness;
>>         /* preferred pin/DAC pairs; an array of paired NIDs */
>>       const hda_nid_t *preferred_dacs;
>> diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
>> index 0521be8d46a8..9e9d0456dab7 100644
>> --- a/sound/pci/hda/patch_via.c
>> +++ b/sound/pci/hda/patch_via.c
>> @@ -579,6 +579,7 @@ static int via_parse_auto_config(struct hda_codec 
>> *codec)
>>         spec->gen.main_out_badness = &via_main_out_badness;
>>       spec->gen.extra_out_badness = &via_extra_out_badness;
>> +    spec->gen.speaker_out_badness = &via_extra_out_badness;
>>         err = snd_hda_parse_pin_defcfg(codec, &spec->gen.autocfg, 
>> NULL, 0);
>>       if (err < 0)
>> _______________________________________________
>> Alsa-devel mailing list
>> Alsa-devel@alsa-project.org
>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>>
>

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-09 13:20   ` Hui Wang
  2015-06-10  1:30     ` Raymond Yau
@ 2015-06-10  4:59     ` Raymond Yau
  2015-06-10  6:42       ` hwang4
  2015-06-12  1:34     ` Raymond Yau
  2 siblings, 1 reply; 28+ messages in thread
From: Raymond Yau @ 2015-06-10  4:59 UTC (permalink / raw)
  To: Hui Wang; +Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

>
>>
>>> The alsa-info.txt for that Dell machine is at
>>
>> http://pastebin.ubuntu.com/11667982/
>>
>> The subwoofer is also at mono pin complex, are  there any low pass filter
>> for the subwoofer or vendor coeff need to be set ?
>
> I don't know it, I guess there is no hardware filter, it will work with
the software low pass filter in the pulseaudio.
>>

http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=27&Level=5&Conn=4&ProdID=166

The ALC269 integrates five hardware equalizer bands composed of one
low-pass filter, one high-pass filter, and three band-pass filters to
compensate for mini-speaker frequency response

Do you mean alc255 does not have tbr hardware equalizer ?

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-10  4:59     ` Raymond Yau
@ 2015-06-10  6:42       ` hwang4
  0 siblings, 0 replies; 28+ messages in thread
From: hwang4 @ 2015-06-10  6:42 UTC (permalink / raw)
  To: Raymond Yau
  Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson



On 2015年06月10日 12:59, Raymond Yau wrote:
>
> >
> >>
> >>> The alsa-info.txt for that Dell machine is at
> >>
> >> http://pastebin.ubuntu.com/11667982/
> >>
> >> The subwoofer is also at mono pin complex, are  there any low pass 
> filter
> >> for the subwoofer or vendor coeff need to be set ?
> >
> > I don't know it, I guess there is no hardware filter, it will work 
> with the software low pass filter in the pulseaudio.
> >>
>
> http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=27&Level=5&Conn=4&ProdID=166
>
> The ALC269 integrates five hardware equalizer bands composed of one 
> low-pass filter, one high-pass filter, and three band-pass filters to 
> compensate for mini-speaker frequency response
>
> Do you mean alc255 does not have tbr hardware equalizer ?
>
I don't have alc255 datasheet, but according to the alc269 feature 
description, it is highly possible that alc255 also has hardware equalizer.

And do you know how to control those equalizer filters with software or 
do you know where we can find the detailed document for this part?

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-10  4:19     ` hwang4
@ 2015-06-10 10:28       ` Takashi Iwai
  2015-06-11 15:10         ` Takashi Iwai
  0 siblings, 1 reply; 28+ messages in thread
From: Takashi Iwai @ 2015-06-10 10:28 UTC (permalink / raw)
  To: hwang4; +Cc: alsa-devel, David Henningsson

At Wed, 10 Jun 2015 12:19:58 +0800,
hwang4 wrote:
> 
> 
> 
> On 2015年06月09日 21:26, Hui Wang wrote:
> > On 06/09/2015 07:51 PM, Takashi Iwai wrote:
> >> At Tue, 09 Jun 2015 17:38:33 +0800,
> >> hwang4 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/
> >>> The alsa-info.txt for that Dell machine is at
> >>> http://pastebin.ubuntu.com/11667982/
> >>>
> >>> To fix this problem, I can use the quirk in the driver to make the
> >>> speaker have
> >>> only one connection for dac or do some change in the hda_generic.c like
> >>> below, in
> >>> your opinion, which one is better or probably you have a different idea
> >>> to fix this problem?
> >>>
> >>> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
> >>> index ac0db16..8194ff1 100644
> >>> --- a/sound/pci/hda/hda_generic.c
> >>> +++ b/sound/pci/hda/hda_generic.c
> >>> @@ -1363,6 +1363,7 @@ static int try_assign_dacs(struct hda_codec
> >>> *codec, int num_outs,
> >>>                                   dac = try_dac(codec,
> >>> get_primary_out(codec, i), pin);
> >>>                           if (!dac)
> >>>                                   dac = try_dac(codec, dacs[0], pin);
> >>>                           if (!dac)
> >>>                                   dac = try_dac(codec,
> >>> get_primary_out(codec, i), pin);
> >>>                           if (dac) {
> >>> @@ -1762,6 +1763,12 @@ static int fill_and_eval_dacs(struct hda_codec
> >>> *codec,
> >>>                   if (err < 0)
> >>>                           return err;
> >>>                   badness += err;
> >>> +               /* if there are 2 speakers and both of them are 
> >>> assigned
> >>> to the same dac,
> >>> +                  we need to increase the badness for this situation,
> >>> because in this situation
> >>> +                  the 2 speakers can't work together to support 
> >>> 4.0/2.1
> >>> channels */
> >>> +               if (cfg->speaker_outs == 2 && err <
> >>> spec->extra_out_badness->no_dac &&
> >>> +                   spec->multiout.extra_out_nid[1] == 0)
> >>> +                       badness += spec->extra_out_badness->no_dac;
> >> This doesn't look like the correct place to add badness for the
> >> missing surround speaker.  This function is called for each path, so
> >> it's evaluated not only for speakers.
> >>
> >> A cleaner way would be to prepare a different badness table for the
> >> speaker, and increase the value for shared_surr.  An untested patch is
> >> below.
> > Got it, I will test it soon. Thanks.
> >
> Hi Takashi,
> 
> Your patch can fix the problem, it works very well.

OK, good to know.  I'd like to test a bit more via hda-emu whether
this gives any ill effects.  So far, this seems fixing a few other
machines, too, so it's a good thing to have in general.


Takashi
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-10  3:18       ` hwang4
@ 2015-06-11  1:15         ` Raymond Yau
  2015-06-11  2:15           ` Hui Wang
  0 siblings, 1 reply; 28+ messages in thread
From: Raymond Yau @ 2015-06-11  1:15 UTC (permalink / raw)
  To: hwang4; +Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

>>>>>
>>>>> 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)

How do you assign the two volume control to headphone, speaker and
subwoofet ?

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-11  1:15         ` Raymond Yau
@ 2015-06-11  2:15           ` Hui Wang
  2015-06-11  7:37             ` Raymond Yau
  0 siblings, 1 reply; 28+ messages in thread
From: Hui Wang @ 2015-06-11  2:15 UTC (permalink / raw)
  To: Raymond Yau
  Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

On 06/11/2015 09:15 AM, 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.
>
> 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.

> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-11  2:15           ` Hui Wang
@ 2015-06-11  7:37             ` Raymond Yau
  2015-06-11  8:33               ` Hui Wang
  0 siblings, 1 reply; 28+ messages in thread
From: Raymond Yau @ 2015-06-11  7:37 UTC (permalink / raw)
  To: Hui Wang; +Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

>>>>>>>
>>>>>>> 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.
>
>>
>> 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

http://git.kernel.org/cgit/linux/kernel/git/tiwai/hda-emu.git/tree/codecs/vt1802-asus-g75

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-11  7:37             ` Raymond Yau
@ 2015-06-11  8:33               ` Hui Wang
  2015-06-11 16:44                 ` Raymond Yau
  0 siblings, 1 reply; 28+ messages in thread
From: Hui Wang @ 2015-06-11  8:33 UTC (permalink / raw)
  To: Raymond Yau
  Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

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.
>>
>>> 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/

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
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
>

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-10 10:28       ` Takashi Iwai
@ 2015-06-11 15:10         ` Takashi Iwai
  2015-06-12  1:07           ` Hui Wang
                             ` (2 more replies)
  0 siblings, 3 replies; 28+ messages in thread
From: Takashi Iwai @ 2015-06-11 15:10 UTC (permalink / raw)
  To: hwang4; +Cc: alsa-devel, David Henningsson

At Wed, 10 Jun 2015 12:28:39 +0200,
Takashi Iwai wrote:
> 
> > >> A cleaner way would be to prepare a different badness table for the
> > >> speaker, and increase the value for shared_surr.  An untested patch is
> > >> below.
> > > Got it, I will test it soon. Thanks.
> > >
> > Hi Takashi,
> > 
> > Your patch can fix the problem, it works very well.
> 
> OK, good to know.  I'd like to test a bit more via hda-emu whether
> this gives any ill effects.  So far, this seems fixing a few other
> machines, too, so it's a good thing to have in general.

This change alone results in regressions on machines that are capable
of 4.0/5.1 surrounds.  For avoiding it, the badness for multi-io has
to be increased as well.  It's damn sensitive.

But, now I wonder now whether blindly applying this is good.  Suppose
a machine with 2.1 speaker and one headphone, but the codec has only
two DACs.  With this setup, now the headphone and the speaker share
the same DAC, as the cost of having individual 2.1 speaker volume.
Is this more useful than having individual volumes for speaker and
headphone?

Maybe the machine you're trying to support has a different situation.
So applying the new rule to limited devices is fine.  But if so, it's
not necessarily to be an adjustment of badness table, but just you can
provide the simple DAC/pin preference map explicitly in the fixup.


Takashi

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-11  8:33               ` Hui Wang
@ 2015-06-11 16:44                 ` Raymond Yau
  0 siblings, 0 replies; 28+ messages in thread
From: Raymond Yau @ 2015-06-11 16:44 UTC (permalink / raw)
  To: Hui Wang; +Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

2015-6-11 下午4:33 於 "Hui Wang" <hui.wang@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
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-11 15:10         ` Takashi Iwai
@ 2015-06-12  1:07           ` Hui Wang
  2015-06-12  1:22             ` Raymond Yau
  2015-06-12  4:42           ` Raymond Yau
  2015-06-12  6:07           ` David Henningsson
  2 siblings, 1 reply; 28+ messages in thread
From: Hui Wang @ 2015-06-12  1:07 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel, David Henningsson

On 06/11/2015 11:10 PM, Takashi Iwai wrote:
> At Wed, 10 Jun 2015 12:28:39 +0200,
> Takashi Iwai wrote:
>>>>> A cleaner way would be to prepare a different badness table for the
>>>>> speaker, and increase the value for shared_surr.  An untested patch is
>>>>> below.
>>>> Got it, I will test it soon. Thanks.
>>>>
>>> Hi Takashi,
>>>
>>> Your patch can fix the problem, it works very well.
>> OK, good to know.  I'd like to test a bit more via hda-emu whether
>> this gives any ill effects.  So far, this seems fixing a few other
>> machines, too, so it's a good thing to have in general.
> This change alone results in regressions on machines that are capable
> of 4.0/5.1 surrounds.  For avoiding it, the badness for multi-io has
> to be increased as well.  It's damn sensitive.
>
> But, now I wonder now whether blindly applying this is good.  Suppose
> a machine with 2.1 speaker and one headphone, but the codec has only
> two DACs.  With this setup, now the headphone and the speaker share
> the same DAC, as the cost of having individual 2.1 speaker volume.
> Is this more useful than having individual volumes for speaker and
> headphone?
If having individual volumes for speaker and headphone (the speakers 
share the same DAC), there will be no "Front Speaker" and "Bass 
Speaker", as a result, in the userspace, pulseaudio can't regard the 2.1 
channels is a valid profile.
>
> Maybe the machine you're trying to support has a different situation.
> So applying the new rule to limited devices is fine.  But if so, it's
> not necessarily to be an adjustment of badness table, but just you can
> provide the simple DAC/pin preference map explicitly in the fixup.
This is a good idea, so far this machine is the only one with this 
problem, it is suitable to use a machine specific fixup. If in future, 
we have more machines with this problem, then we will think about a 
general way to fix it.
>
>
> Takashi
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-12  1:07           ` Hui Wang
@ 2015-06-12  1:22             ` Raymond Yau
  2015-06-12  3:25               ` Hui Wang
  0 siblings, 1 reply; 28+ messages in thread
From: Raymond Yau @ 2015-06-12  1:22 UTC (permalink / raw)
  To: Hui Wang; +Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

>>>>>>
>>>>>> A cleaner way would be to prepare a different badness table for the
>>>>>> speaker, and increase the value for shared_surr.  An untested patch
is
>>>>>> below.
>>>>>
>>>>> Got it, I will test it soon. Thanks.
>>>>>
>>>> Hi Takashi,
>>>>
>>>> Your patch can fix the problem, it works very well.
>>>
>>> OK, good to know.  I'd like to test a bit more via hda-emu whether
>>> this gives any ill effects.  So far, this seems fixing a few other
>>> machines, too, so it's a good thing to have in general.
>>
>> This change alone results in regressions on machines that are capable
>> of 4.0/5.1 surrounds.  For avoiding it, the badness for multi-io has
>> to be increased as well.  It's damn sensitive.
>>
>> But, now I wonder now whether blindly applying this is good.  Suppose
>> a machine with 2.1 speaker and one headphone, but the codec has only
>> two DACs.  With this setup, now the headphone and the speaker share
>> the same DAC, as the cost of having individual 2.1 speaker volume.
>> Is this more useful than having individual volumes for speaker and
>> headphone?
>
> If having individual volumes for speaker and headphone (the speakers
share the same DAC), there will be no "Front Speaker" and "Bass Speaker",
as a result, in the userspace, pulseaudio can't regard the 2.1 channels is
a valid profile.
>

Do you mean you can still hear high frequency from the subwoofer of 92hd91
(i.e. pulseaudio lfe filtering is much better than the band pass filter in
92hd91)

How much auddional cpu need to enable lfe filtering ?

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-09 13:20   ` Hui Wang
  2015-06-10  1:30     ` Raymond Yau
  2015-06-10  4:59     ` Raymond Yau
@ 2015-06-12  1:34     ` Raymond Yau
  2015-06-12  3:32       ` Hui Wang
  2 siblings, 1 reply; 28+ messages in thread
From: Raymond Yau @ 2015-06-12  1:34 UTC (permalink / raw)
  To: Hui Wang; +Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

>>> The alsa-info.txt for that Dell machine is at
>>
>> http://pastebin.ubuntu.com/11667982/
>>
>> The subwoofer is also at mono pin complex, are  there any low pass filter
>> for the subwoofer or vendor coeff need to be set ?
>
> I don't know it, I guess there is no hardware filter, it will work with
the software low pass filter in the pulseaudio.
>>

The funcional block diagram indicate equaliser is only connected to port D
This mean only the internal speaker can use high pass filter

Do you mean your can hear high frequency from the subwoofer of alc255 ?

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-12  1:22             ` Raymond Yau
@ 2015-06-12  3:25               ` Hui Wang
  0 siblings, 0 replies; 28+ messages in thread
From: Hui Wang @ 2015-06-12  3:25 UTC (permalink / raw)
  To: Raymond Yau
  Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

On 06/12/2015 09:22 AM, Raymond Yau wrote:
>>>>>>> A cleaner way would be to prepare a different badness table for the
>>>>>>> speaker, and increase the value for shared_surr.  An untested patch
> is
>>>>>>> below.
>>>>>> Got it, I will test it soon. Thanks.
>>>>>>
>>>>> Hi Takashi,
>>>>>
>>>>> Your patch can fix the problem, it works very well.
>>>> OK, good to know.  I'd like to test a bit more via hda-emu whether
>>>> this gives any ill effects.  So far, this seems fixing a few other
>>>> machines, too, so it's a good thing to have in general.
>>> This change alone results in regressions on machines that are capable
>>> of 4.0/5.1 surrounds.  For avoiding it, the badness for multi-io has
>>> to be increased as well.  It's damn sensitive.
>>>
>>> But, now I wonder now whether blindly applying this is good.  Suppose
>>> a machine with 2.1 speaker and one headphone, but the codec has only
>>> two DACs.  With this setup, now the headphone and the speaker share
>>> the same DAC, as the cost of having individual 2.1 speaker volume.
>>> Is this more useful than having individual volumes for speaker and
>>> headphone?
>> If having individual volumes for speaker and headphone (the speakers
> share the same DAC), there will be no "Front Speaker" and "Bass Speaker",
> as a result, in the userspace, pulseaudio can't regard the 2.1 channels is
> a valid profile.
> Do you mean you can still hear high frequency from the subwoofer of 92hd91
> (i.e. pulseaudio lfe filtering is much better than the band pass filter in
> 92hd91)
I don't mean we will definitely enable the lfe filter in the pulseaudio, 
if the codec has HW filter, we can disable the lfe filter in the 
pulseaudio. The problem is if we don't choose 2.1 channels, the 
pulseaudio will not feed the data to the subwoofer speaker, so there is 
no sound coming from the subwoofer speaker.

2.1 channles != enabling lfe filter.
>
> How much auddional cpu need to enable lfe filtering ?
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
>

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-12  1:34     ` Raymond Yau
@ 2015-06-12  3:32       ` Hui Wang
  0 siblings, 0 replies; 28+ messages in thread
From: Hui Wang @ 2015-06-12  3:32 UTC (permalink / raw)
  To: Raymond Yau
  Cc: Takashi Iwai, ALSA Development Mailing List, David Henningsson

On 06/12/2015 09:34 AM, Raymond Yau wrote:
>>>> The alsa-info.txt for that Dell machine is at
>>> http://pastebin.ubuntu.com/11667982/
>>>
>>> The subwoofer is also at mono pin complex, are  there any low pass filter
>>> for the subwoofer or vendor coeff need to be set ?
>> I don't know it, I guess there is no hardware filter, it will work with
> the software low pass filter in the pulseaudio.
> The funcional block diagram indicate equaliser is only connected to port D
> This mean only the internal speaker can use high pass filter
>
> Do you mean your can hear high frequency from the subwoofer of alc255 ?
I am not sure about it, but enable/disable the SW lfe filter will make 
the sound of subwoofer different
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
>

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-11 15:10         ` Takashi Iwai
  2015-06-12  1:07           ` Hui Wang
@ 2015-06-12  4:42           ` Raymond Yau
  2015-06-12  6:07           ` David Henningsson
  2 siblings, 0 replies; 28+ messages in thread
From: Raymond Yau @ 2015-06-12  4:42 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: hwang4, alsa-devel, David Henningsson

> >
> > > >> A cleaner way would be to prepare a different badness table for the
> > > >> speaker, and increase the value for shared_surr.  An untested
patch is
> > > >> below.
> > > > Got it, I will test it soon. Thanks.
> > > >
> > > Hi Takashi,
> > >
> > > Your patch can fix the problem, it works very well.
> >
> > OK, good to know.  I'd like to test a bit more via hda-emu whether
> > this gives any ill effects.  So far, this seems fixing a few other
> > machines, too, so it's a good thing to have in general.
>
> This change alone results in regressions on machines that are capable
> of 4.0/5.1 surrounds.  For avoiding it, the badness for multi-io has
> to be increased as well.  It's damn sensitive.
>
> But, now I wonder now whether blindly applying this is good.  Suppose
> a machine with 2.1 speaker and one headphone, but the codec has only
> two DACs.  With this setup, now the headphone and the speaker share
> the same DAC, as the cost of having individual 2.1 speaker volume.
> Is this more useful than having individual volumes for speaker and
> headphone?

Some realtek codec e.g. alc262

Supports MONO line output with independent volume control

http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=27&Level=5&Conn=4&ProdID=40

Badness table cannot be applied to all realtek codecs

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-11 15:10         ` Takashi Iwai
  2015-06-12  1:07           ` Hui Wang
  2015-06-12  4:42           ` Raymond Yau
@ 2015-06-12  6:07           ` David Henningsson
  2015-06-12  9:40             ` Raymond Yau
                               ` (2 more replies)
  2 siblings, 3 replies; 28+ messages in thread
From: David Henningsson @ 2015-06-12  6:07 UTC (permalink / raw)
  To: Takashi Iwai, hwang4; +Cc: alsa-devel



On 2015-06-11 17:10, Takashi Iwai wrote:
> At Wed, 10 Jun 2015 12:28:39 +0200,
> Takashi Iwai wrote:
>> OK, good to know. I'd like to test a bit more via hda-emu whether 
>> this gives any ill effects. So far, this seems fixing a few other 
>> machines, too, so it's a good thing to have in general. 
> This change alone results in regressions on machines that are capable
> of 4.0/5.1 surrounds.  For avoiding it, the badness for multi-io has
> to be increased as well.  It's damn sensitive.
>
> But, now I wonder now whether blindly applying this is good.  Suppose
> a machine with 2.1 speaker and one headphone, but the codec has only
> two DACs.  With this setup, now the headphone and the speaker share
> the same DAC, as the cost of having individual 2.1 speaker volume.
> Is this more useful than having individual volumes for speaker and
> headphone?
>
> Maybe the machine you're trying to support has a different situation.
> So applying the new rule to limited devices is fine.  But if so, it's
> not necessarily to be an adjustment of badness table, but just you can
> provide the simple DAC/pin preference map explicitly in the fixup.

Oh, this is an interesting trade-off.

In the PulseAudio desktop scenario, we automute the speaker, and 
PulseAudio remembers the individual headphone and speaker volumes. So in 
this case, there is no benefit from having individual headphone and 
speaker volume at the ALSA level.

However if a user wants to turn off automute, then there is a need for 
being able to adjust headphone and speaker volume individually.

But it's not just a question of volume control for 2.1. Being able to 
send a different stream to the subwoofer could be useful too, especially 
if the hardware filter is bad or non-existing.

So my gut feeling leans towards using the second DAC for the subwoofer 
speaker being the more useful default, but it's not a clear cut.

// David

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-12  6:07           ` David Henningsson
@ 2015-06-12  9:40             ` Raymond Yau
  2015-06-12 16:05             ` Takashi Iwai
  2015-06-13  2:43             ` Raymond Yau
  2 siblings, 0 replies; 28+ messages in thread
From: Raymond Yau @ 2015-06-12  9:40 UTC (permalink / raw)
  To: David Henningsson, lukasz.wojnilowicz
  Cc: Takashi Iwai, hwang4, ALSA Development Mailing List

 OK, good to know. I'd like to test a bit more via hda-emu whether this
>>> gives any ill effects. So far, this seems fixing a few other machines, too,
>>> so it's a good thing to have in general.
>>>
>> This change alone results in regressions on machines that are capable
>> of 4.0/5.1 surrounds.  For avoiding it, the badness for multi-io has
>> to be increased as well.  It's damn sensitive.
>>
>> But, now I wonder now whether blindly applying this is good.  Suppose
>> a machine with 2.1 speaker and one headphone, but the codec has only
>> two DACs.  With this setup, now the headphone and the speaker share
>> the same DAC, as the cost of having individual 2.1 speaker volume.
>> Is this more useful than having individual volumes for speaker and
>> headphone?
>>
>> Maybe the machine you're trying to support has a different situation.
>> So applying the new rule to limited devices is fine.  But if so, it's
>> not necessarily to be an adjustment of badness table, but just you can
>> provide the simple DAC/pin preference map explicitly in the fixup.
>>
>
> Oh, this is an interesting trade-off.
>
> In the PulseAudio desktop scenario, we automute the speaker, and
> PulseAudio remembers the individual headphone and speaker volumes. So in
> this case, there is no benefit from having individual headphone and speaker
> volume at the ALSA level.
>
> However if a user wants to turn off automute, then there is a need for
> being able to adjust headphone and speaker volume individually.
>

Do "front Playback volume" a good name when volume control is shared by
headphone and speaker" ?

in desktop with alc66x , volume control shared by headphone and Line Out is
name as "Front" because it support 5.1

>
> But it's not just a question of volume control for 2.1. Being able to send
> a different stream to the subwoofer could be useful too, especially if the
> hardware filter is bad or non-existing.
>

when subwoofer is using stereo pin complex (usually with 6, 8 or 10
channels codec), only one left or right channel is used (e.g. Asus N series
note book external sonic master subwoofer use right channel but acer aspire
5930g internal subwoofer using left channel

FL, FR LFE N/A
FL, FR, N/A, LFE

how do pulseaudio perform lfe filter when subwoofer is using mono pin
since the downmix widget mix left and right channel and scale down the
volume ?

FL, FR, LFE, LFE

do it need more CPU than those use one channel of stereo pin complex

For those 2 channel hda codec 's subwoofer must use mono pin

>
>
>

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-12  6:07           ` David Henningsson
  2015-06-12  9:40             ` Raymond Yau
@ 2015-06-12 16:05             ` Takashi Iwai
  2015-06-13  2:43             ` Raymond Yau
  2 siblings, 0 replies; 28+ messages in thread
From: Takashi Iwai @ 2015-06-12 16:05 UTC (permalink / raw)
  To: David Henningsson; +Cc: hwang4, alsa-devel

At Fri, 12 Jun 2015 08:07:20 +0200,
David Henningsson wrote:
> 
> 
> 
> On 2015-06-11 17:10, Takashi Iwai wrote:
> > At Wed, 10 Jun 2015 12:28:39 +0200,
> > Takashi Iwai wrote:
> >> OK, good to know. I'd like to test a bit more via hda-emu whether 
> >> this gives any ill effects. So far, this seems fixing a few other 
> >> machines, too, so it's a good thing to have in general. 
> > This change alone results in regressions on machines that are capable
> > of 4.0/5.1 surrounds.  For avoiding it, the badness for multi-io has
> > to be increased as well.  It's damn sensitive.
> >
> > But, now I wonder now whether blindly applying this is good.  Suppose
> > a machine with 2.1 speaker and one headphone, but the codec has only
> > two DACs.  With this setup, now the headphone and the speaker share
> > the same DAC, as the cost of having individual 2.1 speaker volume.
> > Is this more useful than having individual volumes for speaker and
> > headphone?
> >
> > Maybe the machine you're trying to support has a different situation.
> > So applying the new rule to limited devices is fine.  But if so, it's
> > not necessarily to be an adjustment of badness table, but just you can
> > provide the simple DAC/pin preference map explicitly in the fixup.
> 
> Oh, this is an interesting trade-off.
> 
> In the PulseAudio desktop scenario, we automute the speaker, and 
> PulseAudio remembers the individual headphone and speaker volumes. So in 
> this case, there is no benefit from having individual headphone and 
> speaker volume at the ALSA level.
> 
> However if a user wants to turn off automute, then there is a need for 
> being able to adjust headphone and speaker volume individually.
> 
> But it's not just a question of volume control for 2.1. Being able to 
> send a different stream to the subwoofer could be useful too, especially 
> if the hardware filter is bad or non-existing.
> 
> So my gut feeling leans towards using the second DAC for the subwoofer 
> speaker being the more useful default, but it's not a clear cut.

Right, this is indeed a difficult problem, and probably there is never
a clear answer.

Another interesting examples are:
A. 3 DACs, 2 HP, 2 speakers
B. 3 DACs, 2 HP, 1 mic, 1 speaker
C. 4 DACs, 2 HP, 1 mic, 2 speakers

For B and C, user expects the possible 5.1 outputs by retasking the
mic.  But then you'll lose the individual volume control with the
speaker.


Takashi

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-12  6:07           ` David Henningsson
  2015-06-12  9:40             ` Raymond Yau
  2015-06-12 16:05             ` Takashi Iwai
@ 2015-06-13  2:43             ` Raymond Yau
  2 siblings, 0 replies; 28+ messages in thread
From: Raymond Yau @ 2015-06-13  2:43 UTC (permalink / raw)
  To: David Henningsson; +Cc: hwang4, Takashi Iwai, ALSA Development Mailing List

> Oh, this is an interesting trade-off.
>
> In the PulseAudio desktop scenario, we automute the speaker, and
PulseAudio remembers the individual headphone and speaker volumes. So in
this case, there is no benefit from having individual headphone and speaker
volume at the ALSA level.
>
> However if a user wants to turn off automute, then there is a need for
being able to adjust headphone and speaker volume individually.
>
> But it's not just a question of volume control for 2.1. Being able to
send a different stream to the subwoofer could be useful too, especially if
the hardware filter is bad or non-existing.
>
>

It is not just low pass filter with subwoofer

Pulseaudio seem also perform high pass filter at the same time

http://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/?id=f3ebf6b667b155f5fe6526bd70881c79e07d7874

92hd91  have high pass filter for internal speakers

2.20.BTL Amplifier High-Pass Filter

For mobile applications, speakers are often incapable of reproducing low
frequency audio and unable to handle the maximum output power of the BTL
amplifier. A high-pass filter is implemented in the BTL output path to
reduce the amount of low frequency energy reaching speakers attached to the
BTL amplifier. This can prevent speaker failure.

2.20.1.Filter Description

The high-pass filter is derived from the common biquadratic filter and
provides a 12dB/octave roll-off. The filter may be programmed for a -3dB
response at: 100Hz, 200Hz, 300Hz, 400Hz, 500Hz, 750Hz, 1KHz, or 2KHz. The
high pass filter is enabled by default with a cut-off frequency of 300Hz.
The filter may be bypassed using the associated verb (processing state
verb).

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles
  2015-06-09 11:51 ` Takashi Iwai
  2015-06-09 13:26   ` Hui Wang
@ 2015-06-14  6:48   ` Raymond Yau
  1 sibling, 0 replies; 28+ messages in thread
From: Raymond Yau @ 2015-06-14  6:48 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: hwang4, alsa-devel, David Henningsson

> >
> > 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

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2015-06-14  6:48 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-09  9:38 2 speakers are assigned to the same DAC, this can't support 4.0/2.1 channles hwang4
2015-06-09 11:50 ` Raymond Yau
2015-06-09 13:20   ` Hui Wang
2015-06-10  1:30     ` Raymond Yau
2015-06-10  3:18       ` hwang4
2015-06-11  1:15         ` Raymond Yau
2015-06-11  2:15           ` Hui Wang
2015-06-11  7:37             ` Raymond Yau
2015-06-11  8:33               ` Hui Wang
2015-06-11 16:44                 ` Raymond Yau
2015-06-10  4:59     ` Raymond Yau
2015-06-10  6:42       ` hwang4
2015-06-12  1:34     ` Raymond Yau
2015-06-12  3:32       ` Hui Wang
2015-06-09 11:51 ` Takashi Iwai
2015-06-09 13:26   ` Hui Wang
2015-06-10  4:19     ` hwang4
2015-06-10 10:28       ` Takashi Iwai
2015-06-11 15:10         ` Takashi Iwai
2015-06-12  1:07           ` Hui Wang
2015-06-12  1:22             ` Raymond Yau
2015-06-12  3:25               ` Hui Wang
2015-06-12  4:42           ` Raymond Yau
2015-06-12  6:07           ` David Henningsson
2015-06-12  9:40             ` Raymond Yau
2015-06-12 16:05             ` Takashi Iwai
2015-06-13  2:43             ` Raymond Yau
2015-06-14  6:48   ` Raymond Yau

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.