The stereo downmix control was dropped during the transition to the generic parser. Let's re-add it.
Signed-off-by: Takashi Iwai tiwai@suse.de --- sound/pci/hda/patch_analog.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 7a426ed491f2..11ec27a60276 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c @@ -349,6 +349,12 @@ static int patch_ad1986a(struct hda_codec *codec) 0x1e, 0x03, 0 }; + static const struct hda_verb downmix_verbs[] = { + { 0x09, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080 }, /* downmix off */ + {} + }; + static const struct snd_kcontrol_new downmix_mixer = + HDA_CODEC_MUTE("Stereo Downmix Switch", 0x09, 0x0, HDA_OUTPUT);
err = alloc_ad_spec(codec); if (err < 0) @@ -380,14 +386,27 @@ static int patch_ad1986a(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
err = ad198x_parse_auto_config(codec, false); - if (err < 0) { - snd_hda_gen_free(codec); - return err; + if (err < 0) + goto error; + + /* stereo downmix control */ + err = snd_hda_add_verbs(codec, downmix_verbs); + if (err < 0) + goto error; + if (spec->gen.multiout.num_dacs > 1) { + if (!snd_hda_gen_add_kctl(&spec->gen, NULL, &downmix_mixer)) { + err = -ENOMEM; + goto error; + } }
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
return 0; + + error: + snd_hda_gen_free(codec); + return err; }