Re: [PATCH REQUEST] hda/realtek: Add fixup for HP Spectre x360 16-f1xxx (103c:891c, ALC245)
Takashi Iwai <[email protected]> Tue, 09 Jun 2026 12:59:44 +0200
| Newsgroups | org.alsa-project.alsa-devel,org.kernel.vger.linux-sound |
|---|---|
| Message-ID | <[email protected]> |
On Sun, 07 Jun 2026 21:16:47 +0200, Gigi Furnari wrote: > > > The HP Spectre x360 2-in-1 Laptop 16-f1xxx (PCI SSID 103c:891c) uses > a Realtek ALC245 codec. Without a fixup, the upper speakers (node 0x14) > are silent because their pin configuration is set to N/A (0x411111f0) > and the amplifier GPIO is not initialized. > > The codec layout is: > Node 0x14: upper speakers, connected to DAC 0x02, EAPD present > Node 0x17: lower speakers, connected to DAC 0x06 (active) > Node 0x21: headphone out, connected to DAC 0x03 (active) > > The fix overrides the pin default config for node 0x14 to mark it as > an internal fixed speaker, and chains to the existing > ALC245_FIXUP_HP_X360_AMP fixup which toggles GPIO0 to enable the > amplifier -- the same mechanism used by the HP Spectre x360 14 > (103c:87f7). > > Note: the driver currently reads PCI SSID as 103c:0000 instead of the > correct 103c:891c (the codec reports Subsystem Id: 0x103c891c correctly > in /proc/asound/card0/codec#0). This means no device-specific fixup is > applied without an explicit model parameter. This patch adds the quirk > entry so the correct fixup is applied automatically once the SSID > reading issue is resolved, and can be used with model= in the meantime. > > Signed-off-by: [Your Name] <[email protected]> > --- > > HOW TO APPLY (context lines abbreviated; apply against current mainline): > > In sound/pci/hda/patch_realtek.c: > > 1) In the enum (near ALC245_FIXUP_HP_X360_AMP), add: > ALC245_FIXUP_HP_SPECTRE_X360_16, > > 2) In alc269_fixups[], after the ALC245_FIXUP_HP_X360_AMP entry, add: > > [ALC245_FIXUP_HP_SPECTRE_X360_16] = { > .type = HDA_FIXUP_PINS, > .v.pins = (const struct hda_pintbl[]) { > { 0x14, 0x90170110 }, /* upper speakers */ > { } > }, > .chained = true, > .chain_id = ALC245_FIXUP_HP_X360_AMP, > }, > > 3) In alc269_fixup_tbl[] (keep sorted by PCI SSID), add: > > SND_PCI_QUIRK(0x103c, 0x891c, "HP Spectre x360 16-f1xxx", > ALC245_FIXUP_HP_SPECTRE_X360_16), > > --- > Full diff (line numbers are approximate; verify against current tree): > > sound/pci/hda/patch_realtek.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c > --- a/sound/pci/hda/patch_realtek.c > +++ b/sound/pci/hda/patch_realtek.c > @@ enum (around ALC245_FIXUP_HP_X360_AMP line) @@ > ALC245_FIXUP_HP_X360_AMP, > + ALC245_FIXUP_HP_SPECTRE_X360_16, > > @@ alc269_fixups[] (after ALC245_FIXUP_HP_X360_AMP block) @@ > + [ALC245_FIXUP_HP_SPECTRE_X360_16] = { > + .type = HDA_FIXUP_PINS, > + .v.pins = (const struct hda_pintbl[]) { > + { 0x14, 0x90170110 }, /* upper speakers */ > + { } > + }, > + .chained = true, > + .chain_id = ALC245_FIXUP_HP_X360_AMP, > + }, > > @@ alc269_fixup_tbl[] (sorted position after 0x891b if present, else near > 0x891c) @@ > + SND_PCI_QUIRK(0x103c, 0x891c, "HP Spectre x360 16-f1xxx", > + ALC245_FIXUP_HP_SPECTRE_X360_16), The code change itself looks OK, so could you try to resubmit in a proper format with sign-off? The spaces in the patches got broken by your mailer, and you might need to fix the mailer setup (at best submit via git-send-email). As a last resort, you can use an attachment, too. > ADDITIONAL NOTE FOR MAINTAINER: > > The codec correctly reports Subsystem Id: 0x103c891c in > /proc/asound/card0/codec#0, but dmesg shows: > snd_hda_codec_alc269: ALC245: picked fixup for PCI SSID 103c:0000 > > This SSID mismatch (0000 vs 891c) means the quirk table is never > consulted. The root cause appears to be in how the HDA subsystem ID > is read on this Alder Lake platform -- a separate bug that may need > investigation in hda_codec.c or the Intel HDA driver. This should have been already addressed recently by the fix commit 0aacce7c32e4 ("ALSA: hda: Avoid quirk matching with zero PCI SSID"). Let me know if the issue still persists even with this fix. thanks, Takashi