ALSA: hda - Enable stereo mix as default for AD and VIA codecs
authorTakashi Iwai <tiwai@suse.de>
Mon, 9 Dec 2013 15:02:24 +0000 (16:02 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 9 Dec 2013 15:02:24 +0000 (16:02 +0100)
AD and VIA codecs had stereo mixer input enabled as default before
moving to the generic parser, and people think the lack of such a
regression.  In this patch, the stereo mixer input is added back to
the input selection if no auto-mic is available, and if it's not
disabled explicitly via hint.  This should satisfy most of demands,
i.e. stereo mix on desktop machines like what it worked before, and it
still keeps the new auto-mic feature on laptops.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_generic.c
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_via.c

index 058318de1af42dcfbeb3f59fc3f920d73fbac831..44be167d1cad713f9bf619b54f05888b9322a8f1 100644 (file)
@@ -3033,6 +3033,8 @@ static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
                        spec->imux_pins[imux->num_items] = pin;
                        snd_hda_add_imux_item(imux, label, cfg_idx, NULL);
                        imux_added = true;
+                       if (spec->dyn_adc_switch)
+                               spec->dyn_adc_idx[imux_idx] = c;
                }
        }
 
@@ -3130,7 +3132,9 @@ static int create_input_ctls(struct hda_codec *codec)
                }
        }
 
-       if (mixer && spec->add_stereo_mix_input) {
+       /* add stereo mix when explicitly enabled via hint */
+       if (mixer && spec->add_stereo_mix_input &&
+           snd_hda_get_bool_hint(codec, "add_stereo_mix_input") > 0) {
                err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
                                           "Stereo Mix", 0);
                if (err < 0)
@@ -4403,6 +4407,19 @@ int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
        if (err < 0)
                return err;
 
+       /* add stereo mix if available and not enabled yet */
+       if (!spec->auto_mic && spec->mixer_nid &&
+           spec->add_stereo_mix_input &&
+           spec->input_mux.num_items > 1 &&
+           snd_hda_get_bool_hint(codec, "add_stereo_mix_input") < 0) {
+               err = parse_capture_source(codec, spec->mixer_nid,
+                                          CFG_IDX_MIX, spec->num_all_adcs,
+                                          "Stereo Mix", 0);
+               if (err < 0)
+                       return err;
+       }
+
+
        err = create_capture_mixers(codec);
        if (err < 0)
                return err;
index 34d86ec5d3dd06738227d766a0526a424e5ac691..05280033c30263cccd6283c3f6d08dc1ec98e5ee 100644 (file)
@@ -194,6 +194,7 @@ static int ad198x_parse_auto_config(struct hda_codec *codec)
        codec->no_sticky_stream = 1;
 
        spec->gen.indep_hp = 1;
+       spec->gen.add_stereo_mix_input = 1;
 
        err = snd_hda_parse_pin_defcfg(codec, cfg, NULL, 0);
        if (err < 0)
index 0bc20ef5687ac3558996ca3fd56a741c75bc042b..f84195f3ea31e2f6bac3c1c5f79355e1ec24c0fb 100644 (file)
@@ -138,6 +138,7 @@ static struct via_spec *via_new_spec(struct hda_codec *codec)
        spec->gen.indep_hp = 1;
        spec->gen.keep_eapd_on = 1;
        spec->gen.pcm_playback_hook = via_playback_pcm_hook;
+       spec->gen.add_stereo_mix_input = 1;
        return spec;
 }