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