mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 21:53:44 +00:00
ALSA: hda: Allow model option to specify PCI SSID alias
There are tons of quirks for HD-audio and many of them are without model string, hence it's not trivial to apply the same quirk for a new device. This patch makes it easier: namely, the model string accepts a form as "XXXX:YYYY" (a pair of hex numbers of the subsystem-vendor and subsystem-device IDs), to specify the alias of PCI (or codec) SSID. e.g. passing model=1234:abcd would apply the quirk that matches with the given SSID 1234:abcd instead of the actual SSID. Link: https://lore.kernel.org/r/20210823073722.14873-3-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
73355ddd87
commit
a235d5b8e5
@ -971,6 +971,8 @@ EXPORT_SYMBOL_GPL(snd_hda_pick_pin_fixup);
|
||||
* When a special model string "nofixup" is given, also no fixup is applied.
|
||||
*
|
||||
* The function tries to find the matching model name at first, if given.
|
||||
* If the model string contains the SSID alias, try to look up with the given
|
||||
* alias ID.
|
||||
* If nothing matched, try to look up the PCI SSID.
|
||||
* If still nothing matched, try to look up the codec SSID.
|
||||
*/
|
||||
@ -983,6 +985,7 @@ void snd_hda_pick_fixup(struct hda_codec *codec,
|
||||
int id = HDA_FIXUP_ID_NOT_SET;
|
||||
const char *name = NULL;
|
||||
const char *type = NULL;
|
||||
int vendor, device;
|
||||
|
||||
if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET)
|
||||
return;
|
||||
@ -1013,6 +1016,16 @@ void snd_hda_pick_fixup(struct hda_codec *codec,
|
||||
if (!quirk)
|
||||
return;
|
||||
|
||||
/* match with the SSID alias given by the model string "XXXX:YYYY" */
|
||||
if (codec->modelname &&
|
||||
sscanf(codec->modelname, "%04x:%04x", &vendor, &device) == 2) {
|
||||
q = snd_pci_quirk_lookup_id(vendor, device, quirk);
|
||||
if (q) {
|
||||
type = "alias SSID";
|
||||
goto found_device;
|
||||
}
|
||||
}
|
||||
|
||||
/* match with the PCI SSID */
|
||||
q = snd_pci_quirk_lookup(codec->bus->pci, quirk);
|
||||
if (q) {
|
||||
|
Loading…
Reference in New Issue
Block a user