hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];
 
        unsigned int jack_present :1;
-       unsigned int inv_jack_detect:1;
+       unsigned int inv_jack_detect:1; /* inverted jack-detection */
+       unsigned int inv_eapd:1;        /* inverted EAPD implementation */
 
 #ifdef CONFIG_SND_HDA_POWER_SAVE
        struct hda_loopback_check loopback;
 
 /*
  * EAPD control
- * the private value = nid | (invert << 8)
+ * the private value = nid
  */
 #define ad198x_eapd_info       snd_ctl_boolean_mono_info
 
 {
        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
        struct ad198x_spec *spec = codec->spec;
-       int invert = (kcontrol->private_value >> 8) & 1;
-       if (invert)
+       if (spec->inv_eapd)
                ucontrol->value.integer.value[0] = ! spec->cur_eapd;
        else
                ucontrol->value.integer.value[0] = spec->cur_eapd;
 {
        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
        struct ad198x_spec *spec = codec->spec;
-       int invert = (kcontrol->private_value >> 8) & 1;
        hda_nid_t nid = kcontrol->private_value & 0xff;
        unsigned int eapd;
        eapd = !!ucontrol->value.integer.value[0];
-       if (invert)
+       if (spec->inv_eapd)
                eapd = !eapd;
        if (eapd == spec->cur_eapd)
                return 0;
                .info = ad198x_eapd_info,
                .get = ad198x_eapd_get,
                .put = ad198x_eapd_put,
-               .private_value = 0x1b | (1 << 8), /* port-D, inversed */
+               .private_value = 0x1b, /* port-D */
        },
        { } /* end */
 };
        spec->loopback.amplist = ad1986a_loopbacks;
 #endif
        spec->vmaster_nid = 0x1b;
+       spec->inv_eapd = 1; /* AD1986A has the inverted EAPD implementation */
 
        codec->patch_ops = ad198x_patch_ops;
 
                .info = ad198x_eapd_info,
                .get = ad198x_eapd_get,
                .put = ad198x_eapd_put,
-               .private_value = 0x12 | (1 << 8), /* port-D, inversed */
+               .private_value = 0x12, /* port-D */
        },
 
        { } /* end */
                spec->input_mux = &ad1988_laptop_capture_source;
                spec->num_mixers = 1;
                spec->mixers[0] = ad1988_laptop_mixers;
+               spec->inv_eapd = 1; /* inverted EAPD */
                spec->num_init_verbs = 1;
                spec->init_verbs[0] = ad1988_laptop_init_verbs;
                if (board_config == AD1988_LAPTOP_DIG)