diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/hda_generic.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index c4671d00babd..249cd4615908 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c | |||
@@ -4297,6 +4297,26 @@ static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec, | |||
4297 | return AC_PWRST_D3; | 4297 | return AC_PWRST_D3; |
4298 | } | 4298 | } |
4299 | 4299 | ||
4300 | /* mute all aamix inputs initially; parse up to the first leaves */ | ||
4301 | static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix) | ||
4302 | { | ||
4303 | int i, nums; | ||
4304 | const hda_nid_t *conn; | ||
4305 | bool has_amp; | ||
4306 | |||
4307 | nums = snd_hda_get_conn_list(codec, mix, &conn); | ||
4308 | has_amp = nid_has_mute(codec, mix, HDA_INPUT); | ||
4309 | for (i = 0; i < nums; i++) { | ||
4310 | if (has_amp) | ||
4311 | snd_hda_codec_amp_stereo(codec, mix, | ||
4312 | HDA_INPUT, i, | ||
4313 | 0xff, HDA_AMP_MUTE); | ||
4314 | else if (nid_has_volume(codec, conn[i], HDA_OUTPUT)) | ||
4315 | snd_hda_codec_amp_stereo(codec, conn[i], | ||
4316 | HDA_OUTPUT, 0, | ||
4317 | 0xff, HDA_AMP_MUTE); | ||
4318 | } | ||
4319 | } | ||
4300 | 4320 | ||
4301 | /* | 4321 | /* |
4302 | * Parse the given BIOS configuration and set up the hda_gen_spec | 4322 | * 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, | |||
4435 | } | 4455 | } |
4436 | } | 4456 | } |
4437 | 4457 | ||
4458 | /* mute all aamix input initially */ | ||
4459 | if (spec->mixer_nid) | ||
4460 | mute_all_mixer_nid(codec, spec->mixer_nid); | ||
4461 | |||
4438 | dig_only: | 4462 | dig_only: |
4439 | parse_digital(codec); | 4463 | parse_digital(codec); |
4440 | 4464 | ||