}
 }
 
+static void alc285_fixup_hp_spectre_x360(struct hda_codec *codec,
+                                         const struct hda_fixup *fix, int action)
+{
+       static const hda_nid_t conn[] = { 0x02 };
+       static const struct hda_pintbl pincfgs[] = {
+               { 0x14, 0x90170110 },  /* rear speaker */
+               { }
+       };
+
+       switch (action) {
+       case HDA_FIXUP_ACT_PRE_PROBE:
+               snd_hda_apply_pincfgs(codec, pincfgs);
+               /* force front speaker to DAC1 */
+               snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
+               break;
+       }
+}
+
 /* for hda_fixup_thinkpad_acpi() */
 #include "thinkpad_helper.c"
 
                .chain_id = ALC269_FIXUP_HP_LINE1_MIC1_LED,
        },
        [ALC285_FIXUP_HP_SPECTRE_X360] = {
-               .type = HDA_FIXUP_PINS,
-               .v.pins = (const struct hda_pintbl[]) {
-                       { 0x14, 0x90170110 }, /* enable top speaker */
-                       {}
-               },
-               .chained = true,
-               .chain_id = ALC285_FIXUP_SPEAKER2_TO_DAC1,
+               .type = HDA_FIXUP_FUNC,
+               .v.func = alc285_fixup_hp_spectre_x360,
        },
        [ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP] = {
                .type = HDA_FIXUP_FUNC,