Re: [PATCH 1/4] ALSA: hda/realtek: Rename Line Out control to Headphone on ThinkPad X1 Carbon 6th
Takashi Iwai <[email protected]>
| Newsgroups | gmane.linux.sound,gmane.linux.kernel |
|---|---|
| Message-ID | <[email protected]> |
On Tue, 11 Aug 2026 04:48:59 +0200, Zhang Heng wrote: > > The ThinkPad X1 Carbon 6th Gen (ALC285, SSID 17aa:225c) has no physical > Line Out jack. The 3.5mm headphone jack is wired to the headphone DAC, > but the ALSA HDA driver names the corresponding control as > "Line Out Playback Volume" (node 0x02). > > PipeWire's ALSA Card Profile (ACP) silences "Line Out" when headphones > are activated, which incorrectly mutes the headphone output. > > Add a quirk to rename the control to "Headphone Playback Volume" via > alc285_lenovo_dac_rename(). > > Tested on openSUSE Tumbleweed (kernel 7.1.5): > - Control renamed successfully, no name collision with "Headphone Playback Switch" > - Headphone output works across multiple PipeWire/WirePlumber restarts > and port switches > > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221522 > Signed-off-by: Zhang Heng <[email protected]> > Tested-by: Branislav Klocok <[email protected]> > --- > sound/hda/codecs/realtek/alc269.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c > index 6b36c730ce78..da9c816b8c4f 100644 > --- a/sound/hda/codecs/realtek/alc269.c > +++ b/sound/hda/codecs/realtek/alc269.c > @@ -2572,6 +2572,13 @@ static void alc282_fixup_asus_tx300(struct hda_codec *codec, > } > } > > +static void alc285_lenovo_dac_rename(struct hda_codec *codec, > + const struct hda_fixup *fix, int action) > +{ > + if (action == HDA_FIXUP_ACT_BUILD) > + rename_ctl(codec, "Line Out Playback Volume", > + "Headphone Playback Volume"); > +} > static void alc290_fixup_mono_speakers(struct hda_codec *codec, > const struct hda_fixup *fix, int action) > { > @@ -6998,6 +7005,10 @@ static const struct hda_fixup alc269_fixups[] = { > .chained = true, > .chain_id = ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN, > }, > + [ALC285_LENOVO_DAC_RENAME] = { > + .type = HDA_FIXUP_FUNC, > + .v.func = alc285_lenovo_dac_rename, > + }, > }; > > static const struct hda_quirk alc269_fixup_tbl[] = { > @@ -7956,6 +7967,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = { > SND_PCI_QUIRK(0x17aa, 0x224b, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), > SND_PCI_QUIRK(0x17aa, 0x224c, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), > SND_PCI_QUIRK(0x17aa, 0x224d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), > + SND_PCI_QUIRK(0x17aa, 0x225c, "Lenovo ThinkPad X1 Carbon 6th Gen", ALC285_LENOVO_DAC_RENAME), > SND_PCI_QUIRK(0x17aa, 0x225d, "Thinkpad T480", ALC269_FIXUP_THINKPAD_LIMIT_INT_MIC_BOOST), > SND_PCI_QUIRK(0x17aa, 0x2288, "Thinkpad X390", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK), > SND_PCI_QUIRK(0x17aa, 0x2292, "Thinkpad X1 Carbon 7th", ALC285_FIXUP_THINKPAD_HEADSET_JACK), Hmm, this patch is broken -- missing the definition of enum ALC285_LENOVO_DAC_RENAME? thanks, Takashi