]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ALSA: hda: Avoid quirk matching with zero PCI SSID
authorTakashi Iwai <tiwai@suse.de>
Fri, 15 May 2026 10:56:59 +0000 (12:56 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sat, 16 May 2026 13:45:02 +0000 (15:45 +0200)
Heiko reported that BIOS on some recent machines doesn't set up PCI
SSID properly but leave with zero (e.g. on HP Dragonfly Folio 13.5
inch G3 with SSID 103c:8a05/8a06), which confuses the quirk table
matching and results in the non-functional state.

Fix it by skipping the PCI SSID matching when either vendor or device
ID is zero and falling back to the codec SSID that is supposed to be
more stable for those cases.

Reported-by: Heiko Schmid <heiko@future-machines.org>
Tested-by: Heiko Schmid <heiko@future-machines.org>
Closes: https://lore.kernel.org/20260514133110.12302-1-heiko@future-machines.org
Link: https://patch.msgid.link/20260515105700.276420-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/hda/common/auto_parser.c

index 8923813ce4247d579e60ca30a7f3fb10995b4d59..5bc95d3116ff051624adea921f360f88c0a11971 100644 (file)
@@ -1013,7 +1013,7 @@ void snd_hda_pick_fixup(struct hda_codec *codec,
        const char *name = NULL;
        const char *type = NULL;
        unsigned int vendor, device;
-       u16 pci_vendor, pci_device;
+       u16 pci_vendor = 0, pci_device = 0;
        u16 codec_vendor, codec_device;
 
        if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET)
@@ -1066,7 +1066,7 @@ void snd_hda_pick_fixup(struct hda_codec *codec,
        /* match primarily with the PCI SSID */
        for (q = quirk; q->subvendor || q->subdevice; q++) {
                /* if the entry is specific to codec SSID, check with it */
-               if (!codec->bus->pci || q->match_codec_ssid) {
+               if (!pci_vendor || !pci_device || q->match_codec_ssid) {
                        if (hda_quirk_match(codec_vendor, codec_device, q)) {
                                type = "codec SSID";
                                goto found_device;