|
@@ -2142,6 +2142,10 @@ static struct snd_kcontrol_new ad1988_spdif_in_mixers[] = {
|
|
|
{ } /* end */
|
|
|
};
|
|
|
|
|
|
+static struct snd_kcontrol_new ad1989_spdif_out_mixers[] = {
|
|
|
+ HDA_CODEC_VOLUME("IEC958 Playback Volume", 0x1b, 0x0, HDA_OUTPUT),
|
|
|
+ { } /* end */
|
|
|
+};
|
|
|
|
|
|
/*
|
|
|
* initialization verbs
|
|
@@ -2242,6 +2246,13 @@ static struct hda_verb ad1988_spdif_init_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)
|
|
|
*/
|
|
@@ -2949,10 +2960,19 @@ static int patch_ad1988(struct hda_codec *codec)
|
|
|
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;
|
|
@@ -4184,5 +4204,7 @@ struct hda_codec_preset snd_hda_preset_analog[] = {
|
|
|
{ .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 */
|
|
|
};
|