From 297becd74741351a65580b38a0503e3136652550 Mon Sep 17 00:00:00 2001 From: CVMagic <546352+CVMagic@users.noreply.github.com> Date: Wed, 29 May 2024 00:07:57 -0400 Subject: [PATCH 1/5] Adding HDA Pin fix for Ayaneo AIR Plus Thank you Lightforce for providing his validated HDA Jack Retask configuration for this fix. --- sound/pci/hda/patch_realtek.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 398deb60fb6738..aa71bf48df1352 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -7305,6 +7305,7 @@ enum { ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A, ALC269VB_FIXUP_ASUS_MIC_NO_PRESENCE, ALC269VB_FIXUP_AYN_LOKI_MINI_PRO, + ALC269VB_FIXUP_AYANEO_AIR_PLUS, ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED, ALC269VB_FIXUP_ORDISSIMO_EVE2, ALC283_FIXUP_CHROME_BOOK, @@ -8034,6 +8035,22 @@ static const struct hda_fixup alc269_fixups[] = { { } }, }, + [ALC269VB_FIXUP_AYANEO_AIR_PLUS] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl[]) { + { 0x12, 0x90a60130 }, + { 0x14, 0x90170110 }, + { 0x17, 0x40000000 }, + { 0x18, 0x04a19040 }, + { 0x19, 0x411111f0 }, + { 0x1a, 0x90170110 }, + { 0x1b, 0x411111f0 }, + { 0x1d, 0x40e69945 }, + { 0x1e, 0x411111f0 }, + { 0x21, 0x04214020 }, + { } + }, + }, [ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED] = { .type = HDA_FIXUP_FUNC, .v.func = alc269_fixup_limit_int_mic_boost, @@ -10644,6 +10661,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x1f66, 0x0101, "Loki MiniPro", ALC269VB_FIXUP_AYN_LOKI_MINI_PRO), SND_PCI_QUIRK(0x1f66, 0x0101, "AYANEO 2", ALC269_FIXUP_HEADSET_AYA_2), SND_PCI_QUIRK(0x1f66, 0x0101, "GEEK", ALC269_FIXUP_HEADSET_AYA_GEEK), + SND_PCI_QUIRK(0x1f66, 0x0103, "AIR Plus", ALC269VB_FIXUP_AYANEO_AIR_PLUS), SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC), SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED), SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10), @@ -10767,6 +10785,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = { {.id = ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A, .name = "asus-zenbook-ux31a"}, {.id = ALC269VB_FIXUP_ORDISSIMO_EVE2, .name = "ordissimo"}, {.id = ALC269VB_FIXUP_AYN_LOKI_MINI_PRO, .name = "ayn-loki-minipro"}, + {.id = ALC269VB_FIXUP_AYANEO_AIR_PLUS, .name = "ayaneo-air-plus"}, {.id = ALC282_FIXUP_ASUS_TX300, .name = "asus-tx300"}, {.id = ALC283_FIXUP_INT_MIC, .name = "alc283-int-mic"}, {.id = ALC290_FIXUP_MONO_SPEAKERS_HSJACK, .name = "mono-speakers"}, From ea82022242e40e2d1bad032f25416000fba9fe84 Mon Sep 17 00:00:00 2001 From: CVMagic <546352+CVMagic@users.noreply.github.com> Date: Wed, 29 May 2024 10:34:20 -0400 Subject: [PATCH 2/5] Per request reusing Loki MiniPro pins on Ayaneo Air Plus --- sound/pci/hda/patch_realtek.c | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index aa71bf48df1352..6a0536ec20dab8 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -7305,7 +7305,6 @@ enum { ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A, ALC269VB_FIXUP_ASUS_MIC_NO_PRESENCE, ALC269VB_FIXUP_AYN_LOKI_MINI_PRO, - ALC269VB_FIXUP_AYANEO_AIR_PLUS, ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED, ALC269VB_FIXUP_ORDISSIMO_EVE2, ALC283_FIXUP_CHROME_BOOK, @@ -8022,32 +8021,8 @@ static const struct hda_fixup alc269_fixups[] = { [ALC269VB_FIXUP_AYN_LOKI_MINI_PRO] = { .type = HDA_FIXUP_PINS, .v.pins = (const struct hda_pintbl[]) { - { 0x12, 0x90a60130 }, { 0x14, 0x40f000f0 }, /* not connected */ - { 0x17, 0x40000000 }, - { 0x18, 0x04a19040 }, - { 0x19, 0x411111f0 }, { 0x1a, 0x90170150 }, /* speaker */ - { 0x1b, 0x411111f0 }, - { 0x1d, 0x40e69945 }, - { 0x1e, 0x411111f0 }, - { 0x21, 0x04214020 }, - { } - }, - }, - [ALC269VB_FIXUP_AYANEO_AIR_PLUS] = { - .type = HDA_FIXUP_PINS, - .v.pins = (const struct hda_pintbl[]) { - { 0x12, 0x90a60130 }, - { 0x14, 0x90170110 }, - { 0x17, 0x40000000 }, - { 0x18, 0x04a19040 }, - { 0x19, 0x411111f0 }, - { 0x1a, 0x90170110 }, - { 0x1b, 0x411111f0 }, - { 0x1d, 0x40e69945 }, - { 0x1e, 0x411111f0 }, - { 0x21, 0x04214020 }, { } }, }, @@ -10661,7 +10636,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x1f66, 0x0101, "Loki MiniPro", ALC269VB_FIXUP_AYN_LOKI_MINI_PRO), SND_PCI_QUIRK(0x1f66, 0x0101, "AYANEO 2", ALC269_FIXUP_HEADSET_AYA_2), SND_PCI_QUIRK(0x1f66, 0x0101, "GEEK", ALC269_FIXUP_HEADSET_AYA_GEEK), - SND_PCI_QUIRK(0x1f66, 0x0103, "AIR Plus", ALC269VB_FIXUP_AYANEO_AIR_PLUS), + SND_PCI_QUIRK(0x1f66, 0x0103, "AIR Plus", ALC269VB_FIXUP_AYN_LOKI_MINI_PRO), SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC), SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED), SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10), @@ -10785,7 +10760,6 @@ static const struct hda_model_fixup alc269_fixup_models[] = { {.id = ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A, .name = "asus-zenbook-ux31a"}, {.id = ALC269VB_FIXUP_ORDISSIMO_EVE2, .name = "ordissimo"}, {.id = ALC269VB_FIXUP_AYN_LOKI_MINI_PRO, .name = "ayn-loki-minipro"}, - {.id = ALC269VB_FIXUP_AYANEO_AIR_PLUS, .name = "ayaneo-air-plus"}, {.id = ALC282_FIXUP_ASUS_TX300, .name = "asus-tx300"}, {.id = ALC283_FIXUP_INT_MIC, .name = "alc283-int-mic"}, {.id = ALC290_FIXUP_MONO_SPEAKERS_HSJACK, .name = "mono-speakers"}, From 6dcedb294f8eeddffdc325bf4d1e1fab91c30127 Mon Sep 17 00:00:00 2001 From: CVMagic <546352+CVMagic@users.noreply.github.com> Date: Mon, 3 Jun 2024 01:53:25 -0400 Subject: [PATCH 3/5] Update patch_realtek.c Removed the PCI Vendor/Device ID conflict and added helper function to match against DMI entries instead. --- sound/pci/hda/patch_realtek.c | 86 ++++++++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 12 deletions(-) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 6a0536ec20dab8..46c76d0b2c1ac5 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -7289,8 +7290,8 @@ enum { ALC269_FIXUP_DELL4_MIC_NO_PRESENCE, ALC269_FIXUP_DELL4_MIC_NO_PRESENCE_QUIET, ALC269_FIXUP_HEADSET_MODE, - ALC269_FIXUP_HEADSET_AYA_2, - ALC269_FIXUP_HEADSET_AYA_GEEK, + ALC269_FIXUP_DMI_MATCH, + ALC269_FIXUP_AYA_HEADSET_VOLUME, ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, ALC269_FIXUP_ASPIRE_HEADSET_MIC, ALC269_FIXUP_ASUS_X101_FUNC, @@ -7304,7 +7305,7 @@ enum { ALC269VB_FIXUP_ASUS_ZENBOOK, ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A, ALC269VB_FIXUP_ASUS_MIC_NO_PRESENCE, - ALC269VB_FIXUP_AYN_LOKI_MINI_PRO, + ALC269VB_FIXUP_AYN_SPKR_PIN_FIX, ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED, ALC269VB_FIXUP_ORDISSIMO_EVE2, ALC283_FIXUP_CHROME_BOOK, @@ -7539,6 +7540,69 @@ enum { ALC256_FIXUP_CHROME_BOOK, }; +static const struct dmi_system_id alc269_fixup_dmi_tbl[] = { + { + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "AYANEO 2"), + }, + .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, + }, + { + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "AYANEO 2S"), + }, + .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, + }, + { + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "AIR"), + }, + .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, + }, + { + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "AIR Pro"), + }, + .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, + }, + { + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "GEEK"), + }, + .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, + }, + { + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "AYN"), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "LOKI MINIPRO"), + }, + .driver_data = (void *)ALC269VB_FIXUP_AYN_SPKR_PIN_FIX, + }, + {}, +}; + +static void alc269_fixup_match_via_dmi(struct hda_codec *codec, + const struct hda_fixup *fix, int action) +{ + const struct dmi_system_id *dmi_entry; + int alc269_fix_id; + + dmi_entry = dmi_first_match(alc269_fixup_dmi_tbl); + + if (!dmi_entry) + return; + + alc269_fix_id = *((int *)dmi_entry->driver_data); + + __snd_hda_apply_fixup(codec, alc269_fix_id, action, 0); + +} + /* A special fixup for Lenovo C940 and Yoga Duet 7; * both have the very same PCI SSID, and we need to apply different fixups * depending on the codec ID @@ -8018,7 +8082,7 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id = ALC269_FIXUP_HEADSET_MIC }, - [ALC269VB_FIXUP_AYN_LOKI_MINI_PRO] = { + [ALC269VB_FIXUP_AYN_SPKR_PIN_FIX] = { .type = HDA_FIXUP_PINS, .v.pins = (const struct hda_pintbl[]) { { 0x14, 0x40f000f0 }, /* not connected */ @@ -8799,11 +8863,11 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE }, - [ALC269_FIXUP_HEADSET_AYA_2] = { + [ALC269_FIXUP_DMI_MATCH] = { .type = HDA_FIXUP_FUNC, - .v.func = alc269_fixup_headphone_volume, + .v.func = alc269_fixup_match_via_dmi, }, - [ALC269_FIXUP_HEADSET_AYA_GEEK] = { + [ALC269_FIXUP_AYA_HEADSET_VOLUME] = { .type = HDA_FIXUP_FUNC, .v.func = alc269_fixup_headphone_volume, }, @@ -10633,10 +10697,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x1d72, 0x1947, "RedmiBook Air", ALC255_FIXUP_XIAOMI_HEADSET_MIC), SND_PCI_QUIRK(0x2782, 0x0232, "CHUWI CoreBook XPro", ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO), SND_PCI_QUIRK(0x2782, 0x1707, "Vaio VJFE-ADL", ALC298_FIXUP_SPK_VOLUME), - SND_PCI_QUIRK(0x1f66, 0x0101, "Loki MiniPro", ALC269VB_FIXUP_AYN_LOKI_MINI_PRO), - SND_PCI_QUIRK(0x1f66, 0x0101, "AYANEO 2", ALC269_FIXUP_HEADSET_AYA_2), - SND_PCI_QUIRK(0x1f66, 0x0101, "GEEK", ALC269_FIXUP_HEADSET_AYA_GEEK), - SND_PCI_QUIRK(0x1f66, 0x0103, "AIR Plus", ALC269VB_FIXUP_AYN_LOKI_MINI_PRO), + SND_PCI_QUIRK(0x1f66, 0x0101, "Multiple Vendors", ALC269_FIXUP_DMI_MATCH), + SND_PCI_QUIRK(0x1f66, 0x0103, "AIR Plus", ALC269VB_FIXUP_AYN_SPKR_PIN_FIX), SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC), SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED), SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10), @@ -10759,7 +10821,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = { {.id = ALC269VB_FIXUP_ASUS_ZENBOOK, .name = "asus-zenbook"}, {.id = ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A, .name = "asus-zenbook-ux31a"}, {.id = ALC269VB_FIXUP_ORDISSIMO_EVE2, .name = "ordissimo"}, - {.id = ALC269VB_FIXUP_AYN_LOKI_MINI_PRO, .name = "ayn-loki-minipro"}, + {.id = ALC269VB_FIXUP_AYN_SPKR_PIN_FIX, .name = "ayn-speaker-pin-fix"}, {.id = ALC282_FIXUP_ASUS_TX300, .name = "asus-tx300"}, {.id = ALC283_FIXUP_INT_MIC, .name = "alc283-int-mic"}, {.id = ALC290_FIXUP_MONO_SPEAKERS_HSJACK, .name = "mono-speakers"}, From 40cd2b02e9e1091941f1161f1ae9bdae62c3e42f Mon Sep 17 00:00:00 2001 From: CVMagic <546352+CVMagic@users.noreply.github.com> Date: Wed, 5 Jun 2024 13:45:25 -0400 Subject: [PATCH 4/5] Replaced DMI Matching via struct and just using vendor matching. --- sound/pci/hda/patch_realtek.c | 64 ++++++----------------------------- 1 file changed, 10 insertions(+), 54 deletions(-) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 46c76d0b2c1ac5..df85b59a5ab26a 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -7540,67 +7540,23 @@ enum { ALC256_FIXUP_CHROME_BOOK, }; -static const struct dmi_system_id alc269_fixup_dmi_tbl[] = { - { - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), - DMI_EXACT_MATCH(DMI_BOARD_NAME, "AYANEO 2"), - }, - .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, - }, - { - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), - DMI_EXACT_MATCH(DMI_BOARD_NAME, "AYANEO 2S"), - }, - .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, - }, - { - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), - DMI_EXACT_MATCH(DMI_BOARD_NAME, "AIR"), - }, - .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, - }, - { - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), - DMI_EXACT_MATCH(DMI_BOARD_NAME, "AIR Pro"), - }, - .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, - }, - { - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"), - DMI_EXACT_MATCH(DMI_BOARD_NAME, "GEEK"), - }, - .driver_data = (void *)ALC269_FIXUP_AYA_HEADSET_VOLUME, - }, - { - .matches = { - DMI_MATCH(DMI_BOARD_VENDOR, "AYN"), - DMI_EXACT_MATCH(DMI_BOARD_NAME, "LOKI MINIPRO"), - }, - .driver_data = (void *)ALC269VB_FIXUP_AYN_SPKR_PIN_FIX, - }, - {}, -}; - +/* A special fixup for AYN and AYANEO handhelds as both +* have the same PCI SSID as well as the same codec, but +* require different quirks, falling back to DMI matching. +*/ static void alc269_fixup_match_via_dmi(struct hda_codec *codec, const struct hda_fixup *fix, int action) { - const struct dmi_system_id *dmi_entry; int alc269_fix_id; - dmi_entry = dmi_first_match(alc269_fixup_dmi_tbl); - - if (!dmi_entry) - return; - - alc269_fix_id = *((int *)dmi_entry->driver_data); + if(dmi_name_in_vendors("AYANEO")) + alc269_fix_id = ALC269_FIXUP_AYA_HEADSET_VOLUME; + else if (dmi_name_in_vendors("ayn")) + alc269_fix_id = ALC269VB_FIXUP_AYN_SPKR_PIN_FIX; + else + return; __snd_hda_apply_fixup(codec, alc269_fix_id, action, 0); - } /* A special fixup for Lenovo C940 and Yoga Duet 7; From 8a7e51cda9423dd732cd2eb83916bcdc99362e6b Mon Sep 17 00:00:00 2001 From: CVMagic <546352+CVMagic@users.noreply.github.com> Date: Tue, 25 Jun 2024 03:31:13 -0400 Subject: [PATCH 5/5] Update patch_realtek.c Added DMI matching to DMI_BOARD_NAME, while this compiles and briefly tested with the Ayn Loki Mini pro, for all of the impacted Ayaneo devices if I dont have your actual DMI Board name, not to be confused with the product name please let me know. --- sound/pci/hda/patch_realtek.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index df85b59a5ab26a..70786d85eccd06 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -7547,16 +7547,23 @@ enum { static void alc269_fixup_match_via_dmi(struct hda_codec *codec, const struct hda_fixup *fix, int action) { - int alc269_fix_id; + int alc269_fix_id; + const char *board_name = dmi_get_system_info(DMI_BOARD_NAME); - if(dmi_name_in_vendors("AYANEO")) - alc269_fix_id = ALC269_FIXUP_AYA_HEADSET_VOLUME; - else if (dmi_name_in_vendors("ayn")) + if (dmi_name_in_vendors("AYANEO") || dmi_name_in_vendors("AYADEVICE") || dmi_name_in_vendors("AYA DEVICE")) { + if (board_name && (strcmp(board_name, "AIR 1S Limited") || strcmp(board_name, "AIR 1S") || strcmp(board_name, "AB05-Mendocino") || strcmp(board_name, "AIR Plus"))) { alc269_fix_id = ALC269VB_FIXUP_AYN_SPKR_PIN_FIX; - else + } else if (board_name && (strcmp(board_name, "AYANEO 2") || strcmp(board_name, "AYANEO 2S") || strcmp(board_name, "GEEK") || strcmp(board_name, "GEEK 1S"))) { + alc269_fix_id = ALC269_FIXUP_AYA_HEADSET_VOLUME; + } else { + return; + } + } else if (dmi_name_in_vendors("ayn") && strcmp(board_name, "Loki MiniPro")) { + alc269_fix_id = ALC269VB_FIXUP_AYN_SPKR_PIN_FIX; + } else { return; - - __snd_hda_apply_fixup(codec, alc269_fix_id, action, 0); + } + __snd_hda_apply_fixup(codec, alc269_fix_id, action, 0); } /* A special fixup for Lenovo C940 and Yoga Duet 7; @@ -10654,7 +10661,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x2782, 0x0232, "CHUWI CoreBook XPro", ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO), SND_PCI_QUIRK(0x2782, 0x1707, "Vaio VJFE-ADL", ALC298_FIXUP_SPK_VOLUME), SND_PCI_QUIRK(0x1f66, 0x0101, "Multiple Vendors", ALC269_FIXUP_DMI_MATCH), - SND_PCI_QUIRK(0x1f66, 0x0103, "AIR Plus", ALC269VB_FIXUP_AYN_SPKR_PIN_FIX), + SND_PCI_QUIRK(0x1f66, 0x0103, "Multiple Vendors", ALC269_FIXUP_DMI_MATCH), SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC), SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED), SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10),