|
@@ -9196,19 +9196,13 @@ static struct hda_verb alc268_base_init_verbs[] = {
|
|
|
{0x1c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
|
|
|
{0x1d, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))},
|
|
|
|
|
|
- /* FIXME: use matrix-type input source selection */
|
|
|
- /* Mixer elements: 0x18, 19, 1a, 1c, 14, 15, 0b */
|
|
|
- /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */
|
|
|
- /* Input mixer2 */
|
|
|
- {0x23, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))},
|
|
|
- {0x23, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))},
|
|
|
- {0x23, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x02 << 8))},
|
|
|
- {0x23, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x03 << 8))},
|
|
|
+ /* Unmute Selector 23h,24h and set the default input to mic-in */
|
|
|
+
|
|
|
+ {0x23, AC_VERB_SET_CONNECT_SEL, 0x00},
|
|
|
+ {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
|
|
+ {0x24, AC_VERB_SET_CONNECT_SEL, 0x00},
|
|
|
+ {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
|
|
|
|
|
- {0x24, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))},
|
|
|
- {0x24, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))},
|
|
|
- {0x24, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x02 << 8))},
|
|
|
- {0x24, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x03 << 8))},
|
|
|
{ }
|
|
|
};
|
|
|
|
|
@@ -9253,29 +9247,14 @@ static int alc268_mux_enum_put(struct snd_kcontrol *kcontrol,
|
|
|
{
|
|
|
struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- const struct hda_input_mux *imux = spec->input_mux;
|
|
|
+
|
|
|
unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
|
|
|
static hda_nid_t capture_mixers[3] = { 0x23, 0x24 };
|
|
|
hda_nid_t nid = capture_mixers[adc_idx];
|
|
|
- unsigned int *cur_val = &spec->cur_mux[adc_idx];
|
|
|
- unsigned int i, idx;
|
|
|
|
|
|
- idx = ucontrol->value.enumerated.item[0];
|
|
|
- if (idx >= imux->num_items)
|
|
|
- idx = imux->num_items - 1;
|
|
|
- if (*cur_val == idx)
|
|
|
- return 0;
|
|
|
- for (i = 0; i < imux->num_items; i++) {
|
|
|
- unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE;
|
|
|
- snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT,
|
|
|
- imux->items[i].index,
|
|
|
- HDA_AMP_MUTE, v);
|
|
|
- snd_hda_codec_write_cache(codec, nid, 0,
|
|
|
- AC_VERB_SET_CONNECT_SEL,
|
|
|
- idx );
|
|
|
- }
|
|
|
- *cur_val = idx;
|
|
|
- return 1;
|
|
|
+ return snd_hda_input_mux_put(codec, spec->input_mux, ucontrol,
|
|
|
+ nid,
|
|
|
+ &spec->cur_mux[adc_idx]);
|
|
|
}
|
|
|
|
|
|
static struct snd_kcontrol_new alc268_capture_alt_mixer[] = {
|