|
@@ -4297,6 +4297,26 @@ static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
|
|
|
return AC_PWRST_D3;
|
|
|
}
|
|
|
|
|
|
+/* mute all aamix inputs initially; parse up to the first leaves */
|
|
|
+static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix)
|
|
|
+{
|
|
|
+ int i, nums;
|
|
|
+ const hda_nid_t *conn;
|
|
|
+ bool has_amp;
|
|
|
+
|
|
|
+ nums = snd_hda_get_conn_list(codec, mix, &conn);
|
|
|
+ has_amp = nid_has_mute(codec, mix, HDA_INPUT);
|
|
|
+ for (i = 0; i < nums; i++) {
|
|
|
+ if (has_amp)
|
|
|
+ snd_hda_codec_amp_stereo(codec, mix,
|
|
|
+ HDA_INPUT, i,
|
|
|
+ 0xff, HDA_AMP_MUTE);
|
|
|
+ else if (nid_has_volume(codec, conn[i], HDA_OUTPUT))
|
|
|
+ snd_hda_codec_amp_stereo(codec, conn[i],
|
|
|
+ HDA_OUTPUT, 0,
|
|
|
+ 0xff, HDA_AMP_MUTE);
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
/*
|
|
|
* Parse the given BIOS configuration and set up the hda_gen_spec
|
|
@@ -4435,6 +4455,10 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /* mute all aamix input initially */
|
|
|
+ if (spec->mixer_nid)
|
|
|
+ mute_all_mixer_nid(codec, spec->mixer_nid);
|
|
|
+
|
|
|
dig_only:
|
|
|
parse_digital(codec);
|
|
|
|