diff mbox series

ALSA: hda: set the 2nd headphone's name to be Headphone2

Message ID 20190305140910.25615-1-hui.wang@canonical.com (mailing list archive)
State New, archived
Headers show
Series ALSA: hda: set the 2nd headphone's name to be Headphone2 | expand

Commit Message

Hui Wang March 5, 2019, 2:09 p.m. UTC
Recently I saw two Headphones on some HP machines, the 1st Headphone
comes from the Front Headphone Jack, the 2nd one comes from the Front
Headset Jack, and the current HDA driver will set the same name to
them and with different index, just like below:
'Headphone Playback Volume'
'Headphone Playback Switch'
'Headphone Playback Volume' index 1
'Headphone Playback Switch' index 1
'Front Headphone Jack'
'Front Headphone Jack' index 1

This can't be handled by pulseaudio, and pulseaduio already has a
path analog-output-headphones-2.conf to handle the 2nd headphone, now
we set the 2nd headphone's name to "Headphone2", leave the other
headphones unchanged.

The change of hda_auto_parser.c will change the name of Jack.

The change of hda_generic.c will change the name of Volume and Switch.

Cc: <stable@vger.kernel.org>
Signed-off-by: Hui Wang <hui.wang@canonical.com>
---
The alsa-info.txt before applying this patch:
https://pastebin.ubuntu.com/p/CrPrHRykgT/

The alsa-info.txt after applying this patch:
https://pastebin.ubuntu.com/p/9VbkyvMBkW/

sound/pci/hda/hda_auto_parser.c | 11 +++++++++--
 sound/pci/hda/hda_generic.c     |  2 ++
 2 files changed, 11 insertions(+), 2 deletions(-)

Comments

Jaroslav Kysela March 5, 2019, 8 p.m. UTC | #1
Dne 05. 03. 19 v 15:09 Hui Wang napsal(a):
> Recently I saw two Headphones on some HP machines, the 1st Headphone
> comes from the Front Headphone Jack, the 2nd one comes from the Front
> Headset Jack, and the current HDA driver will set the same name to
> them and with different index, just like below:
> 'Headphone Playback Volume'
> 'Headphone Playback Switch'
> 'Headphone Playback Volume' index 1
> 'Headphone Playback Switch' index 1
> 'Front Headphone Jack'
> 'Front Headphone Jack' index 1
> 
> This can't be handled by pulseaudio, and pulseaduio already has a
> path analog-output-headphones-2.conf to handle the 2nd headphone, now
> we set the 2nd headphone's name to "Headphone2", leave the other
> headphones unchanged.
> 
> The change of hda_auto_parser.c will change the name of Jack.
> 
> The change of hda_generic.c will change the name of Volume and Switch.

NAK. I'm afraid, but you're trying to revert the change from 2009:

commit 668b9652be33510a2a42b290dd335d34d38e2068
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Mar 6 10:13:24 2009 +0100

  ALSA: hda - Create multiple HP / speaker controls with index

  Create multiple "Headphone" and "Speaker" controls with non-zero index
  numbers instead of "Headphone2", etc.

  Signed-off-by: Takashi Iwai <tiwai@suse.de>

I think that PA should be fixed instead try to fix the drivers. The
indexes are exactly designed to distinguish the multiple similar I/O.

I cannot find any other driver which uses the Headphone2 control name.

					Jaroslav
Hui Wang March 6, 2019, 12:23 a.m. UTC | #2
On 2019/3/6 上午4:00, Jaroslav Kysela wrote:
> Dne 05. 03. 19 v 15:09 Hui Wang napsal(a):
>> Recently I saw two Headphones on some HP machines, the 1st Headphone
>> comes from the Front Headphone Jack, the 2nd one comes from the Front
>> Headset Jack, and the current HDA driver will set the same name to
>> them and with different index, just like below:
>> 'Headphone Playback Volume'
>> 'Headphone Playback Switch'
>> 'Headphone Playback Volume' index 1
>> 'Headphone Playback Switch' index 1
>> 'Front Headphone Jack'
>> 'Front Headphone Jack' index 1
>>
>> This can't be handled by pulseaudio, and pulseaduio already has a
>> path analog-output-headphones-2.conf to handle the 2nd headphone, now
>> we set the 2nd headphone's name to "Headphone2", leave the other
>> headphones unchanged.
>>
>> The change of hda_auto_parser.c will change the name of Jack.
>>
>> The change of hda_generic.c will change the name of Volume and Switch.
> NAK. I'm afraid, but you're trying to revert the change from 2009:
>
> commit 668b9652be33510a2a42b290dd335d34d38e2068
> Author: Takashi Iwai <tiwai@suse.de>
> Date:   Fri Mar 6 10:13:24 2009 +0100
>
>   ALSA: hda - Create multiple HP / speaker controls with index
>
>   Create multiple "Headphone" and "Speaker" controls with non-zero index
>   numbers instead of "Headphone2", etc.
>
>   Signed-off-by: Takashi Iwai <tiwai@suse.de>
>
> I think that PA should be fixed instead try to fix the drivers. The
> indexes are exactly designed to distinguish the multiple similar I/O.
>
> I cannot find any other driver which uses the Headphone2 control name.
>
> 					Jaroslav
>
OK, got it.  I tried to add the index to the pulseaudio in Jan, but not
finish yet.  If you have time, please take a look at my patches and make
a comment on them.

https://lists.freedesktop.org/archives/pulseaudio-discuss/2019-January/030761.html

Thanks,

Hui.
Jaroslav Kysela March 6, 2019, 8:10 a.m. UTC | #3
Dne 06. 03. 19 v 1:23 Hui Wang napsal(a):
> On 2019/3/6 上午4:00, Jaroslav Kysela wrote:
>> Dne 05. 03. 19 v 15:09 Hui Wang napsal(a):
>>> Recently I saw two Headphones on some HP machines, the 1st Headphone
>>> comes from the Front Headphone Jack, the 2nd one comes from the Front
>>> Headset Jack, and the current HDA driver will set the same name to
>>> them and with different index, just like below:
>>> 'Headphone Playback Volume'
>>> 'Headphone Playback Switch'
>>> 'Headphone Playback Volume' index 1
>>> 'Headphone Playback Switch' index 1
>>> 'Front Headphone Jack'
>>> 'Front Headphone Jack' index 1
>>>
>>> This can't be handled by pulseaudio, and pulseaduio already has a
>>> path analog-output-headphones-2.conf to handle the 2nd headphone, now
>>> we set the 2nd headphone's name to "Headphone2", leave the other
>>> headphones unchanged.
>>>
>>> The change of hda_auto_parser.c will change the name of Jack.
>>>
>>> The change of hda_generic.c will change the name of Volume and Switch.
>> NAK. I'm afraid, but you're trying to revert the change from 2009:
>>
>> commit 668b9652be33510a2a42b290dd335d34d38e2068
>> Author: Takashi Iwai <tiwai@suse.de>
>> Date:   Fri Mar 6 10:13:24 2009 +0100
>>
>>   ALSA: hda - Create multiple HP / speaker controls with index
>>
>>   Create multiple "Headphone" and "Speaker" controls with non-zero index
>>   numbers instead of "Headphone2", etc.
>>
>>   Signed-off-by: Takashi Iwai <tiwai@suse.de>
>>
>> I think that PA should be fixed instead try to fix the drivers. The
>> indexes are exactly designed to distinguish the multiple similar I/O.
>>
>> I cannot find any other driver which uses the Headphone2 control name.
>>
>> 					Jaroslav
>>
> OK, got it.  I tried to add the index to the pulseaudio in Jan, but not
> finish yet.  If you have time, please take a look at my patches and make
> a comment on them.
> 
> https://lists.freedesktop.org/archives/pulseaudio-discuss/2019-January/030761.html

Your changes seem as a good start. Unfortunately, I don't know PA
internals, so it would be better, if a PA developer can review those
patches.

						Jaroslav
Hui Wang March 6, 2019, 10:23 a.m. UTC | #4
On 2019/3/6 下午4:10, Jaroslav Kysela wrote:
> Dne 06. 03. 19 v 1:23 Hui Wang napsal(a):
>> On 2019/3/6 上午4:00, Jaroslav Kysela wrote:
>>> Dne 05. 03. 19 v 15:09 Hui Wang napsal(a):
>>>> Recently I saw two Headphones on some HP machines, the 1st Headphone
>>>> comes from the Front Headphone Jack, the 2nd one comes from the Front
>>>> Headset Jack, and the current HDA driver will set the same name to
>>>> them and with different index, just like below:
>>>> 'Headphone Playback Volume'
>>>> 'Headphone Playback Switch'
>>>> 'Headphone Playback Volume' index 1
>>>> 'Headphone Playback Switch' index 1
>>>> 'Front Headphone Jack'
>>>> 'Front Headphone Jack' index 1
>>>>
>>>> This can't be handled by pulseaudio, and pulseaduio already has a
>>>> path analog-output-headphones-2.conf to handle the 2nd headphone, now
>>>> we set the 2nd headphone's name to "Headphone2", leave the other
>>>> headphones unchanged.
>>>>
>>>> The change of hda_auto_parser.c will change the name of Jack.
>>>>
>>>> The change of hda_generic.c will change the name of Volume and Switch.
>>> NAK. I'm afraid, but you're trying to revert the change from 2009:
>>>
>>> commit 668b9652be33510a2a42b290dd335d34d38e2068
>>> Author: Takashi Iwai <tiwai@suse.de>
>>> Date:   Fri Mar 6 10:13:24 2009 +0100
>>>
>>>   ALSA: hda - Create multiple HP / speaker controls with index
>>>
>>>   Create multiple "Headphone" and "Speaker" controls with non-zero index
>>>   numbers instead of "Headphone2", etc.
>>>
>>>   Signed-off-by: Takashi Iwai <tiwai@suse.de>
>>>
>>> I think that PA should be fixed instead try to fix the drivers. The
>>> indexes are exactly designed to distinguish the multiple similar I/O.
>>>
>>> I cannot find any other driver which uses the Headphone2 control name.
>>>
>>> 					Jaroslav
>>>
>> OK, got it.  I tried to add the index to the pulseaudio in Jan, but not
>> finish yet.  If you have time, please take a look at my patches and make
>> a comment on them.
>>
>> https://lists.freedesktop.org/archives/pulseaudio-discuss/2019-January/030761.html
> Your changes seem as a good start. Unfortunately, I don't know PA
> internals, so it would be better, if a PA developer can review those
> patches.
>
> 						Jaroslav

OK, Thanks.
diff mbox series

Patch

diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c
index df0d636145f8..748c62a9c5eb 100644
--- a/sound/pci/hda/hda_auto_parser.c
+++ b/sound/pci/hda/hda_auto_parser.c
@@ -714,6 +714,8 @@  int snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid,
 	unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid);
 	const char *name = NULL;
 	int i;
+	int ret;
+	int index;
 	bool hdmi;
 
 	if (indexp)
@@ -729,8 +731,13 @@  int snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid,
 		return fill_audio_out_name(codec, nid, cfg, "Speaker",
 					   label, maxlen, indexp);
 	case AC_JACK_HP_OUT:
-		return fill_audio_out_name(codec, nid, cfg, "Headphone",
-					   label, maxlen, indexp);
+		ret = fill_audio_out_name(codec, nid, cfg, "Headphone",
+					   label, maxlen, &index);
+		if (index == 1)
+			snprintf(label, maxlen, "%s", "Headphone2");
+		if (indexp)
+			*indexp = index;
+		return ret;
 	case AC_JACK_SPDIF_OUT:
 	case AC_JACK_DIG_OTHER_OUT:
 		hdmi = is_hdmi_cfg(def_conf);
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index 4095cd7c56c6..2a34e8a6e2e1 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -2175,6 +2175,8 @@  static int create_extra_outs(struct hda_codec *codec, int num_pins,
 
 		if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
 			name = "Bass Speaker";
+		else if (num_pins == 2 && i == 1 && !strcmp(pfx, "Headphone"))
+			name = "Headphone2";
 		else if (num_pins >= 3) {
 			snprintf(tmp, sizeof(tmp), "%s %s",
 				 pfx, channel_name[i]);