{ } /* end */
 };
 
+static struct snd_kcontrol_new ad1989_spdif_out_mixers[] = {
+       HDA_CODEC_VOLUME("IEC958 Playback Volume", 0x1b, 0x0, HDA_OUTPUT),
+       { } /* end */
+};
 
 /*
  * initialization verbs
        { }
 };
 
+/* AD1989 has no ADC -> SPDIF route */
+static struct hda_verb ad1989_spdif_init_verbs[] = {
+       /* SPDIF out pin */
+       {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE | 0x27}, /* 0dB */
+       { }
+};
+
 /*
  * verbs for 3stack (+dig)
  */
        spec->mixers[spec->num_mixers++] = ad1988_capture_mixers;
        spec->init_verbs[spec->num_init_verbs++] = ad1988_capture_init_verbs;
        if (spec->multiout.dig_out_nid) {
-               spec->mixers[spec->num_mixers++] = ad1988_spdif_out_mixers;
-               spec->init_verbs[spec->num_init_verbs++] = ad1988_spdif_init_verbs;
+               if (codec->vendor_id >= 0x11d4989a) {
+                       spec->mixers[spec->num_mixers++] =
+                               ad1989_spdif_out_mixers;
+                       spec->init_verbs[spec->num_init_verbs++] =
+                               ad1989_spdif_init_verbs;
+               } else {
+                       spec->mixers[spec->num_mixers++] =
+                               ad1988_spdif_out_mixers;
+                       spec->init_verbs[spec->num_init_verbs++] =
+                               ad1988_spdif_init_verbs;
+               }
        }
-       if (spec->dig_in_nid)
+       if (spec->dig_in_nid && codec->vendor_id < 0x11d4989a)
                spec->mixers[spec->num_mixers++] = ad1988_spdif_in_mixers;
 
        codec->patch_ops = ad198x_patch_ops;
        { .id = 0x11d41986, .name = "AD1986A", .patch = patch_ad1986a },
        { .id = 0x11d41988, .name = "AD1988", .patch = patch_ad1988 },
        { .id = 0x11d4198b, .name = "AD1988B", .patch = patch_ad1988 },
+       { .id = 0x11d4989a, .name = "AD1989A", .patch = patch_ad1988 },
+       { .id = 0x11d4989b, .name = "AD1989B", .patch = patch_ad1988 },
        {} /* terminator */
 };