Comment 859 for bug 1958019

Revision history for this message
In , kernel (kernel-linux-kernel-bugs) wrote :

(In reply to Gergo K from comment #840)
> There is an ID collision.
>
> Your audio controller's PCI SSID (17aa:3802) is the same as the "Lenovo Yoga
> DuetITL 2021" Codec SSID. The snd_hda_pick_fixup() function searches the PCI
> SSID before the Codec SSID in the same table. So it picks the
> ALC287_FIXUP_YOGA7_14ITL_SPEAKERS fixup not the ALC287_FIXUP_TAS2781_I2C.
>
>
> !!PCI Soundcards installed in the system
> !!--------------------------------------
>
> 00:1f.3 Multimedia audio controller [0401]: Intel Corporation Device
> [8086:51cf] (rev 01)
> Subsystem: Lenovo Device [17aa:3802]
>
> I think a common fixup can be figured out, or a better solution from someone
> who knows this subsystem well.

Hm I see, not sure if this is the right place to talk about the code, but is there a reason for the fixup table to be the same for PCI and Codec SSIDs? (I know it's not like it could be separated at this point). Also, is there a reason to match by PCI before Codec? A few ideas I was thinking:

1. Just check if the PCI and Codec SSID match the exact SSIDs of this device - not elegant
2. For every lookup, check with both PCI and Codec SSID and see if they match the same entry, add a debug to these cases and use the Codec entry - not sure how common this is and if this will break other cases

Depending on how hard this problem is I may want to help with the code if possible.

(sorry for the dupe, I pressed the save changes by mistake before)