]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - sound/pci/hda/patch_realtek.c
ALSA: hda - add an instance to use snd_hda_pick_pin_fixup
[mirror_ubuntu-bionic-kernel.git] / sound / pci / hda / patch_realtek.c
index 5f7c765391f111f70970239b0a486a03c0aab99f..951017168e37c3af4b4ceab0eb13c32d6b5e261c 100644 (file)
@@ -951,7 +951,9 @@ static struct alc_codec_rename_pci_table rename_pci_tbl[] = {
        { 0x10ec0280, 0x1028, 0, "ALC3220" },
        { 0x10ec0282, 0x1028, 0, "ALC3221" },
        { 0x10ec0283, 0x1028, 0, "ALC3223" },
+       { 0x10ec0288, 0x1028, 0, "ALC3263" },
        { 0x10ec0292, 0x1028, 0, "ALC3226" },
+       { 0x10ec0293, 0x1028, 0, "ALC3235" },
        { 0x10ec0255, 0x1028, 0, "ALC3234" },
        { 0x10ec0668, 0x1028, 0, "ALC3661" },
        { } /* terminator */
@@ -3522,6 +3524,7 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
                /* Direct Drive HP Amp control */
                alc_write_coefex_idx(codec, 0x57, 0x03, 0x8aa6);
                break;
+       case 0x10ec0233:
        case 0x10ec0283:
                alc_write_coef_idx(codec, 0x1b, 0x0c0b);
                alc_write_coef_idx(codec, 0x45, 0xc429);
@@ -3538,6 +3541,25 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
                alc_write_coef_idx(codec, 0x18, 0x7308);
                alc_write_coef_idx(codec, 0x6b, 0xc429);
                break;
+       case 0x10ec0293:
+               /* SET Line1 JD to 0 */
+               val = alc_read_coef_idx(codec, 0x10);
+               alc_write_coef_idx(codec, 0x10, (val & ~(7<<8)) | 6<<8);
+               /* SET charge pump by verb */
+               val = alc_read_coefex_idx(codec, 0x57, 0x05);
+               alc_write_coefex_idx(codec, 0x57, 0x05, (val & ~(1<<15|1<<13)) | 0x0);
+               /* SET EN_OSW to 1 */
+               val = alc_read_coefex_idx(codec, 0x57, 0x03);
+               alc_write_coefex_idx(codec, 0x57, 0x03, (val & ~(1<<10)) | (1<<10) );
+               /* Combo JD gating with LINE1-VREFO */
+               val = alc_read_coef_idx(codec, 0x1a);
+               alc_write_coef_idx(codec, 0x1a, (val & ~(1<<3)) | (1<<3));
+               /* Set to TRS type */
+               alc_write_coef_idx(codec, 0x45, 0xc429);
+               /* Combo Jack auto detect */
+               val = alc_read_coef_idx(codec, 0x4a);
+               alc_write_coef_idx(codec, 0x4a, (val & 0xfff0) | 0x000e);
+               break;
        case 0x10ec0668:
                alc_write_coef_idx(codec, 0x15, 0x0d40);
                alc_write_coef_idx(codec, 0xb7, 0x802b);
@@ -3561,6 +3583,7 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
                alc_write_coef_idx(codec, 0x06, 0x6100);
                snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
                break;
+       case 0x10ec0233:
        case 0x10ec0283:
                alc_write_coef_idx(codec, 0x45, 0xc429);
                snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
@@ -3576,6 +3599,21 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
                alc_write_coef_idx(codec, 0x19, 0xa208);
                alc_write_coef_idx(codec, 0x2e, 0xacf0);
                break;
+       case 0x10ec0293:
+               /* Set to TRS mode */
+               alc_write_coef_idx(codec, 0x45, 0xc429);
+               snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
+               /* SET charge pump by verb */
+               val = alc_read_coefex_idx(codec, 0x57, 0x05);
+               alc_write_coefex_idx(codec, 0x57, 0x05, (val & ~(1<<15|1<<13)) | (1<<15|1<<13));
+               /* SET EN_OSW to 0 */
+               val = alc_read_coefex_idx(codec, 0x57, 0x03);
+               alc_write_coefex_idx(codec, 0x57, 0x03, (val & ~(1<<10)) | 0x0);
+               /* Combo JD gating without LINE1-VREFO */
+               val = alc_read_coef_idx(codec, 0x1a);
+               alc_write_coef_idx(codec, 0x1a, (val & ~(1<<3)) | 0x0);
+               snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
+               break;
        case 0x10ec0668:
                alc_write_coef_idx(codec, 0x11, 0x0001);
                snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
@@ -3591,6 +3629,8 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
 
 static void alc_headset_mode_default(struct hda_codec *codec)
 {
+       int val;
+
        switch (codec->vendor_id) {
        case 0x10ec0255:
                alc_write_coef_idx(codec, 0x45, 0xc089);
@@ -3598,6 +3638,7 @@ static void alc_headset_mode_default(struct hda_codec *codec)
                alc_write_coefex_idx(codec, 0x57, 0x03, 0x8ea6);
                alc_write_coef_idx(codec, 0x49, 0x0049);
                break;
+       case 0x10ec0233:
        case 0x10ec0283:
                alc_write_coef_idx(codec, 0x06, 0x2100);
                alc_write_coef_idx(codec, 0x32, 0x4ea3);
@@ -3608,6 +3649,16 @@ static void alc_headset_mode_default(struct hda_codec *codec)
                alc_write_coef_idx(codec, 0x6b, 0xc429);
                alc_write_coef_idx(codec, 0x18, 0x7308);
                break;
+       case 0x10ec0293:
+               /* Combo Jack auto detect */
+               val = alc_read_coef_idx(codec, 0x4a);
+               alc_write_coef_idx(codec, 0x4a, (val & 0xfff0) | 0x000e);
+               /* Set to TRS type */
+               alc_write_coef_idx(codec, 0x45, 0xC429);
+               /* Combo JD gating without LINE1-VREFO */
+               val = alc_read_coef_idx(codec, 0x1a);
+               alc_write_coef_idx(codec, 0x1a, (val & ~(1<<3)) | 0x0);
+               break;
        case 0x10ec0668:
                alc_write_coef_idx(codec, 0x11, 0x0041);
                alc_write_coef_idx(codec, 0x15, 0x0d40);
@@ -3620,6 +3671,8 @@ static void alc_headset_mode_default(struct hda_codec *codec)
 /* Iphone type */
 static void alc_headset_mode_ctia(struct hda_codec *codec)
 {
+       int val;
+
        switch (codec->vendor_id) {
        case 0x10ec0255:
                /* Set to CTIA type */
@@ -3627,6 +3680,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
                alc_write_coef_idx(codec, 0x1b, 0x0c2b);
                alc_write_coefex_idx(codec, 0x57, 0x03, 0x8ea6);
                break;
+       case 0x10ec0233:
        case 0x10ec0283:
                alc_write_coef_idx(codec, 0x45, 0xd429);
                alc_write_coef_idx(codec, 0x1b, 0x0c2b);
@@ -3637,6 +3691,13 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
                alc_write_coef_idx(codec, 0x76, 0x0008);
                alc_write_coef_idx(codec, 0x18, 0x7388);
                break;
+       case 0x10ec0293:
+               /* Set to ctia type */
+               alc_write_coef_idx(codec, 0x45, 0xd429);
+               /* SET Line1 JD to 1 */
+               val = alc_read_coef_idx(codec, 0x10);
+               alc_write_coef_idx(codec, 0x10, (val & ~(7<<8)) | 7<<8);
+               break;
        case 0x10ec0668:
                alc_write_coef_idx(codec, 0x11, 0x0001);
                alc_write_coef_idx(codec, 0x15, 0x0d60);
@@ -3649,6 +3710,8 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
 /* Nokia type */
 static void alc_headset_mode_omtp(struct hda_codec *codec)
 {
+       int val;
+
        switch (codec->vendor_id) {
        case 0x10ec0255:
                /* Set to OMTP Type */
@@ -3656,6 +3719,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
                alc_write_coef_idx(codec, 0x1b, 0x0c2b);
                alc_write_coefex_idx(codec, 0x57, 0x03, 0x8ea6);
                break;
+       case 0x10ec0233:
        case 0x10ec0283:
                alc_write_coef_idx(codec, 0x45, 0xe429);
                alc_write_coef_idx(codec, 0x1b, 0x0c2b);
@@ -3666,6 +3730,13 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
                alc_write_coef_idx(codec, 0x76, 0x0008);
                alc_write_coef_idx(codec, 0x18, 0x7388);
                break;
+       case 0x10ec0293:
+               /* Set to omtp type */
+               alc_write_coef_idx(codec, 0x45, 0xe429);
+               /* SET Line1 JD to 1 */
+               val = alc_read_coef_idx(codec, 0x10);
+               alc_write_coef_idx(codec, 0x10, (val & ~(7<<8)) | 7<<8);
+               break;
        case 0x10ec0668:
                alc_write_coef_idx(codec, 0x11, 0x0001);
                alc_write_coef_idx(codec, 0x15, 0x0d50);
@@ -3691,6 +3762,7 @@ static void alc_determine_headset_type(struct hda_codec *codec)
                val = alc_read_coef_idx(codec, 0x46);
                is_ctia = (val & 0x0070) == 0x0070;
                break;
+       case 0x10ec0233:
        case 0x10ec0283:
                alc_write_coef_idx(codec, 0x45, 0xd029);
                msleep(300);
@@ -3703,6 +3775,16 @@ static void alc_determine_headset_type(struct hda_codec *codec)
                val = alc_read_coef_idx(codec, 0x6c);
                is_ctia = (val & 0x001c) == 0x001c;
                break;
+       case 0x10ec0293:
+               /* Combo Jack auto detect */
+               val = alc_read_coef_idx(codec, 0x4a);
+               alc_write_coef_idx(codec, 0x4a, (val & 0xfff0) | 0x0008);
+               /* Set to ctia type */
+               alc_write_coef_idx(codec, 0x45, 0xD429);
+               msleep(300);
+               val = alc_read_coef_idx(codec, 0x46);
+               is_ctia = (val & 0x0070) == 0x0070;
+               break;
        case 0x10ec0668:
                alc_write_coef_idx(codec, 0x11, 0x0001);
                alc_write_coef_idx(codec, 0xb7, 0x802b);
@@ -3894,6 +3976,16 @@ static void alc_fixup_no_shutup(struct hda_codec *codec,
        }
 }
 
+static void alc_fixup_disable_aamix(struct hda_codec *codec,
+                                   const struct hda_fixup *fix, int action)
+{
+       if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+               struct alc_spec *spec = codec->spec;
+               /* Disable AA-loopback as it causes white noise */
+               spec->gen.mixer_nid = 0;
+       }
+}
+
 static void alc_fixup_headset_mode_alc668(struct hda_codec *codec,
                                const struct hda_fixup *fix, int action)
 {
@@ -4110,6 +4202,7 @@ enum {
        ALC269_FIXUP_ASUS_G73JW,
        ALC269_FIXUP_LENOVO_EAPD,
        ALC275_FIXUP_SONY_HWEQ,
+       ALC275_FIXUP_SONY_DISABLE_AAMIX,
        ALC271_FIXUP_DMIC,
        ALC269_FIXUP_PCM_44K,
        ALC269_FIXUP_STEREO_DMIC,
@@ -4159,6 +4252,8 @@ enum {
        ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
        ALC255_FIXUP_HEADSET_MODE,
        ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC,
+       ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
+       ALC292_FIXUP_TPT440_DOCK,
 };
 
 static const struct hda_fixup alc269_fixups[] = {
@@ -4213,6 +4308,12 @@ static const struct hda_fixup alc269_fixups[] = {
                .chained = true,
                .chain_id = ALC275_FIXUP_SONY_VAIO_GPIO2
        },
+       [ALC275_FIXUP_SONY_DISABLE_AAMIX] = {
+               .type = HDA_FIXUP_FUNC,
+               .v.func = alc_fixup_disable_aamix,
+               .chained = true,
+               .chain_id = ALC269_FIXUP_SONY_VAIO
+       },
        [ALC271_FIXUP_DMIC] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = alc271_fixup_dmic,
@@ -4552,6 +4653,26 @@ static const struct hda_fixup alc269_fixups[] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = alc_fixup_headset_mode_alc255_no_hp_mic,
        },
+       [ALC293_FIXUP_DELL1_MIC_NO_PRESENCE] = {
+               .type = HDA_FIXUP_PINS,
+               .v.pins = (const struct hda_pintbl[]) {
+                       { 0x18, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
+                       { 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
+                       { }
+               },
+               .chained = true,
+               .chain_id = ALC269_FIXUP_HEADSET_MODE
+       },
+       [ALC292_FIXUP_TPT440_DOCK] = {
+               .type = HDA_FIXUP_PINS,
+               .v.pins = (const struct hda_pintbl[]) {
+                       { 0x16, 0x21211010 }, /* dock headphone */
+                       { 0x19, 0x21a11010 }, /* dock mic */
+                       { }
+               },
+               .chained = true,
+               .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
+       },
 };
 
 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -4604,11 +4725,11 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
        SND_PCI_QUIRK(0x1028, 0x061f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x0629, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x062c, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
-       SND_PCI_QUIRK(0x1028, 0x062e, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
-       SND_PCI_QUIRK(0x1028, 0x0632, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
        SND_PCI_QUIRK(0x1028, 0x063e, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x063f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x0640, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x064d, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x0651, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
@@ -4626,6 +4747,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
        SND_PCI_QUIRK(0x1028, 0x067f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
        SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED),
        SND_PCI_QUIRK(0x103c, 0x1973, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1),
@@ -4699,6 +4822,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
        SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2),
        SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
        SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
+       SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX),
        SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
        SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
        SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
@@ -4712,7 +4836,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
        SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
        SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK),
        SND_PCI_QUIRK(0x17aa, 0x2208, "Thinkpad T431s", ALC269_FIXUP_LENOVO_DOCK),
-       SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
+       SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad T440s", ALC292_FIXUP_TPT440_DOCK),
+       SND_PCI_QUIRK(0x17aa, 0x220e, "Thinkpad T440p", ALC292_FIXUP_TPT440_DOCK),
        SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
        SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
        SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
@@ -4790,9 +4915,54 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
        {.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
        {.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
        {.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
+       {.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
        {}
 };
 
+static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
+       {
+               .codec = 0x10ec0293,
+               .subvendor = 0x1028,
+#ifdef CONFIG_SND_DEBUG_VERBOSE
+               .name = "Dell",
+#endif
+               .pins = (const struct hda_pintbl[]) {
+                       {0x12, 0x40000000},
+                       {0x13, 0x90a60140},
+                       {0x14, 0x90170110},
+                       {0x15, 0x0221401f},
+                       {0x16, 0x21014020},
+                       {0x18, 0x411111f0},
+                       {0x19, 0x21a19030},
+                       {0x1a, 0x411111f0},
+                       {0x1b, 0x411111f0},
+                       {0x1d, 0x40700001},
+                       {0x1e, 0x411111f0},
+               },
+               .value = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
+       },
+       {
+               .codec = 0x10ec0255,
+               .subvendor = 0x1028,
+#ifdef CONFIG_SND_DEBUG_VERBOSE
+               .name = "Dell",
+#endif
+               .pins = (const struct hda_pintbl[]) {
+                       {0x12, 0x90a60140},
+                       {0x14, 0x90170110},
+                       {0x17, 0x40000000},
+                       {0x18, 0x411111f0},
+                       {0x19, 0x411111f0},
+                       {0x1a, 0x411111f0},
+                       {0x1b, 0x411111f0},
+                       {0x1d, 0x40700001},
+                       {0x1e, 0x411111f0},
+                       {0x21, 0x02211020},
+               },
+               .value = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
+       },
+       {}
+};
 
 static void alc269_fill_coef(struct hda_codec *codec)
 {
@@ -4854,6 +5024,7 @@ static int patch_alc269(struct hda_codec *codec)
 
        snd_hda_pick_fixup(codec, alc269_fixup_models,
                       alc269_fixup_tbl, alc269_fixups);
+       snd_hda_pick_pin_fixup(codec, alc269_pin_fixup_tbl, alc269_fixups);
        snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
 
        alc_auto_parse_customize_define(codec);
@@ -5310,6 +5481,7 @@ enum {
        ALC662_FIXUP_BASS_1A,
        ALC662_FIXUP_BASS_CHMAP,
        ALC668_FIXUP_AUTO_MUTE,
+       ALC668_FIXUP_DELL_DISABLE_AAMIX,
 };
 
 static const struct hda_fixup alc662_fixups[] = {
@@ -5476,6 +5648,12 @@ static const struct hda_fixup alc662_fixups[] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = alc_fixup_inv_dmic_0x12,
        },
+       [ALC668_FIXUP_DELL_DISABLE_AAMIX] = {
+               .type = HDA_FIXUP_FUNC,
+               .v.func = alc_fixup_disable_aamix,
+               .chained = true,
+               .chain_id = ALC668_FIXUP_DELL_MIC_NO_PRESENCE
+       },
        [ALC668_FIXUP_AUTO_MUTE] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = alc_fixup_auto_mute_via_amp,
@@ -5536,7 +5714,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
        SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
        SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
        SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
-       SND_PCI_QUIRK(0x1028, 0x060a, "Dell XPS 13", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x060a, "Dell XPS 13", ALC668_FIXUP_DELL_DISABLE_AAMIX),
        SND_PCI_QUIRK(0x1028, 0x0623, "Dell", ALC668_FIXUP_AUTO_MUTE),
        SND_PCI_QUIRK(0x1028, 0x0624, "Dell", ALC668_FIXUP_AUTO_MUTE),
        SND_PCI_QUIRK(0x1028, 0x0625, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),