[PATCH] ALSA: hda: generic: change the DAC ctl name for LO+SPK or LO+HP
Takashi Iwai
tiwai at suse.de
Tue May 4 10:30:38 CEST 2021
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 at canonical.com>
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
>
More information about the Alsa-devel
mailing list