On Tue, 04 May 2021 09:39:17 +0200, Hui Wang wrote: > > Without this change, the DAC ctl's name could be changed only when > the machine has both Speaker and Headphone, but we met some machines > which only has Lineout and Headhpone, and the Lineout and Headphone > share the Audio Mixer0 and DAC0, the ctl's name is set to "Front". > > On most of machines, the "Front" is used for Speaker only or Lineout > only, but on this machine it is shared by Lineout and Headphone, > This introduces an issue in the pipewire and pulseaudio, suppose users > want the Headphone to be on and the Speaker/Lineout to be off, they > could turn off the "Front", this works on most of the machines, but on > this machine, the "Front" couldn't be turned off otherwise the > headphone will be off too. Here we do some change to let the ctl's > name change to "Headphone+LO" on this machine, and pipewire and > pulseaudio already could handle "Headphone+LO" and "Speaker+LO". > (https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/747) > > BugLink: http://bugs.launchpad.net/bugs/804178 > Signed-off-by: Hui Wang <hui.wang@xxxxxxxxxxxxx> I'm fine to take the change, but wouldn't this break anything else in PA? Once when I get a positive answer, I'll apply it. thanks, Takashi > --- > sound/pci/hda/hda_generic.c | 16 +++++++++++----- > 1 file changed, 11 insertions(+), 5 deletions(-) > > diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c > index 3998e1771805..b638fc2ef6f7 100644 > --- a/sound/pci/hda/hda_generic.c > +++ b/sound/pci/hda/hda_generic.c > @@ -1204,11 +1204,17 @@ static const char *get_line_out_pfx(struct hda_codec *codec, int ch, > *index = ch; > return "Headphone"; > case AUTO_PIN_LINE_OUT: > - /* This deals with the case where we have two DACs and > - * one LO, one HP and one Speaker */ > - if (!ch && cfg->speaker_outs && cfg->hp_outs) { > - bool hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type); > - bool spk_lo_shared = !path_has_mixer(codec, spec->speaker_paths[0], ctl_type); > + /* This deals with the case where one HP or one Speaker or > + * one HP + one Speaker need to share the DAC with LO > + */ > + if (!ch) { > + bool hp_lo_shared = false, spk_lo_shared = false; > + > + if (cfg->speaker_outs) > + spk_lo_shared = !path_has_mixer(codec, > + spec->speaker_paths[0], ctl_type); > + if (cfg->hp_outs) > + hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type); > if (hp_lo_shared && spk_lo_shared) > return spec->vmaster_mute.hook ? "PCM" : "Master"; > if (hp_lo_shared) > -- > 2.25.1 >