Commit e1406348 authored by Takashi Iwai's avatar Takashi Iwai

[ALSA] hda-codec - Clean up capture source selection of Realtek codecs

Clean up the codes of the capture source selection for Realtek codecs.
Now using common helper functions with the new capsrc_nids field.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent f0824812
...@@ -238,6 +238,7 @@ struct alc_spec { ...@@ -238,6 +238,7 @@ struct alc_spec {
/* capture */ /* capture */
unsigned int num_adc_nids; unsigned int num_adc_nids;
hda_nid_t *adc_nids; hda_nid_t *adc_nids;
hda_nid_t *capsrc_nids;
hda_nid_t dig_in_nid; /* digital-in NID; optional */ hda_nid_t dig_in_nid; /* digital-in NID; optional */
/* capture source */ /* capture source */
...@@ -291,6 +292,7 @@ struct alc_config_preset { ...@@ -291,6 +292,7 @@ struct alc_config_preset {
hda_nid_t hp_nid; /* optional */ hda_nid_t hp_nid; /* optional */
unsigned int num_adc_nids; unsigned int num_adc_nids;
hda_nid_t *adc_nids; hda_nid_t *adc_nids;
hda_nid_t *capsrc_nids;
hda_nid_t dig_in_nid; hda_nid_t dig_in_nid;
unsigned int num_channel_mode; unsigned int num_channel_mode;
const struct hda_channel_mode *channel_mode; const struct hda_channel_mode *channel_mode;
...@@ -337,9 +339,10 @@ static int alc_mux_enum_put(struct snd_kcontrol *kcontrol, ...@@ -337,9 +339,10 @@ static int alc_mux_enum_put(struct snd_kcontrol *kcontrol,
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
unsigned int mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx; unsigned int mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx;
hda_nid_t nid = spec->capsrc_nids ?
spec->capsrc_nids[adc_idx] : spec->adc_nids[adc_idx];
return snd_hda_input_mux_put(codec, &spec->input_mux[mux_idx], ucontrol, return snd_hda_input_mux_put(codec, &spec->input_mux[mux_idx], ucontrol,
spec->adc_nids[adc_idx], nid, &spec->cur_mux[adc_idx]);
&spec->cur_mux[adc_idx]);
} }
...@@ -708,6 +711,7 @@ static void setup_preset(struct alc_spec *spec, ...@@ -708,6 +711,7 @@ static void setup_preset(struct alc_spec *spec,
spec->num_adc_nids = preset->num_adc_nids; spec->num_adc_nids = preset->num_adc_nids;
spec->adc_nids = preset->adc_nids; spec->adc_nids = preset->adc_nids;
spec->capsrc_nids = preset->capsrc_nids;
spec->dig_in_nid = preset->dig_in_nid; spec->dig_in_nid = preset->dig_in_nid;
spec->unsol_event = preset->unsol_event; spec->unsol_event = preset->unsol_event;
...@@ -5219,6 +5223,9 @@ static hda_nid_t alc882_dac_nids[4] = { ...@@ -5219,6 +5223,9 @@ static hda_nid_t alc882_dac_nids[4] = {
#define alc882_adc_nids alc880_adc_nids #define alc882_adc_nids alc880_adc_nids
#define alc882_adc_nids_alt alc880_adc_nids_alt #define alc882_adc_nids_alt alc880_adc_nids_alt
static hda_nid_t alc882_capsrc_nids[3] = { 0x24, 0x23, 0x22 };
static hda_nid_t alc882_capsrc_nids_alt[2] = { 0x23, 0x22 };
/* input MUX */ /* input MUX */
/* FIXME: should be a matrix-type input source selection */ /* FIXME: should be a matrix-type input source selection */
...@@ -5241,15 +5248,10 @@ static int alc882_mux_enum_put(struct snd_kcontrol *kcontrol, ...@@ -5241,15 +5248,10 @@ static int alc882_mux_enum_put(struct snd_kcontrol *kcontrol,
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
const struct hda_input_mux *imux = spec->input_mux; const struct hda_input_mux *imux = spec->input_mux;
unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
static hda_nid_t capture_mixers[3] = { 0x24, 0x23, 0x22 }; hda_nid_t nid = spec->capsrc_nids[adc_idx];
hda_nid_t nid;
unsigned int *cur_val = &spec->cur_mux[adc_idx]; unsigned int *cur_val = &spec->cur_mux[adc_idx];
unsigned int i, idx; unsigned int i, idx;
if (spec->num_adc_nids < 3)
nid = capture_mixers[adc_idx + 1];
else
nid = capture_mixers[adc_idx];
idx = ucontrol->value.enumerated.item[0]; idx = ucontrol->value.enumerated.item[0];
if (idx >= imux->num_items) if (idx >= imux->num_items)
idx = imux->num_items - 1; idx = imux->num_items - 1;
...@@ -6126,6 +6128,7 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -6126,6 +6128,7 @@ static struct alc_config_preset alc882_presets[] = {
.dig_out_nid = ALC882_DIGOUT_NID, .dig_out_nid = ALC882_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc882_adc_nids), .num_adc_nids = ARRAY_SIZE(alc882_adc_nids),
.adc_nids = alc882_adc_nids, .adc_nids = alc882_adc_nids,
.capsrc_nids = alc882_capsrc_nids,
.num_channel_mode = ARRAY_SIZE(alc882_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc882_3ST_6ch_modes),
.channel_mode = alc882_3ST_6ch_modes, .channel_mode = alc882_3ST_6ch_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
...@@ -6142,6 +6145,7 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -6142,6 +6145,7 @@ static struct alc_config_preset alc882_presets[] = {
.dig_out_nid = ALC882_DIGOUT_NID, .dig_out_nid = ALC882_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc882_adc_nids), .num_adc_nids = ARRAY_SIZE(alc882_adc_nids),
.adc_nids = alc882_adc_nids, .adc_nids = alc882_adc_nids,
.capsrc_nids = alc882_capsrc_nids,
.num_channel_mode = ARRAY_SIZE(alc882_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc882_3ST_6ch_modes),
.channel_mode = alc882_3ST_6ch_modes, .channel_mode = alc882_3ST_6ch_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
...@@ -6387,12 +6391,14 @@ static int patch_alc882(struct hda_codec *codec) ...@@ -6387,12 +6391,14 @@ static int patch_alc882(struct hda_codec *codec)
if (wcap != AC_WID_AUD_IN) { if (wcap != AC_WID_AUD_IN) {
spec->adc_nids = alc882_adc_nids_alt; spec->adc_nids = alc882_adc_nids_alt;
spec->num_adc_nids = ARRAY_SIZE(alc882_adc_nids_alt); spec->num_adc_nids = ARRAY_SIZE(alc882_adc_nids_alt);
spec->capsrc_nids = alc882_capsrc_nids_alt;
spec->mixers[spec->num_mixers] = spec->mixers[spec->num_mixers] =
alc882_capture_alt_mixer; alc882_capture_alt_mixer;
spec->num_mixers++; spec->num_mixers++;
} else { } else {
spec->adc_nids = alc882_adc_nids; spec->adc_nids = alc882_adc_nids;
spec->num_adc_nids = ARRAY_SIZE(alc882_adc_nids); spec->num_adc_nids = ARRAY_SIZE(alc882_adc_nids);
spec->capsrc_nids = alc882_capsrc_nids;
spec->mixers[spec->num_mixers] = alc882_capture_mixer; spec->mixers[spec->num_mixers] = alc882_capture_mixer;
spec->num_mixers++; spec->num_mixers++;
} }
...@@ -6435,6 +6441,8 @@ static hda_nid_t alc883_adc_nids[2] = { ...@@ -6435,6 +6441,8 @@ static hda_nid_t alc883_adc_nids[2] = {
0x08, 0x09, 0x08, 0x09,
}; };
static hda_nid_t alc883_capsrc_nids[2] = { 0x23, 0x22 };
/* input MUX */ /* input MUX */
/* FIXME: should be a matrix-type input source selection */ /* FIXME: should be a matrix-type input source selection */
...@@ -6468,33 +6476,8 @@ static struct hda_input_mux alc883_lenovo_nb0763_capture_source = { ...@@ -6468,33 +6476,8 @@ static struct hda_input_mux alc883_lenovo_nb0763_capture_source = {
#define alc883_mux_enum_info alc_mux_enum_info #define alc883_mux_enum_info alc_mux_enum_info
#define alc883_mux_enum_get alc_mux_enum_get #define alc883_mux_enum_get alc_mux_enum_get
/* ALC883 has the ALC882-type input selection */
static int alc883_mux_enum_put(struct snd_kcontrol *kcontrol, #define alc883_mux_enum_put alc882_mux_enum_put
struct snd_ctl_elem_value *ucontrol)
{
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[2] = { 0x23, 0x22 };
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);
}
*cur_val = idx;
return 1;
}
/* /*
* 2ch mode * 2ch mode
...@@ -7667,8 +7650,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7667,8 +7650,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.dig_in_nid = ALC883_DIGIN_NID, .dig_in_nid = ALC883_DIGIN_NID,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
...@@ -7680,8 +7661,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7680,8 +7661,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.dig_in_nid = ALC883_DIGIN_NID, .dig_in_nid = ALC883_DIGIN_NID,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes),
.channel_mode = alc883_3ST_6ch_modes, .channel_mode = alc883_3ST_6ch_modes,
...@@ -7693,8 +7672,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7693,8 +7672,6 @@ static struct alc_config_preset alc883_presets[] = {
.init_verbs = { alc883_init_verbs }, .init_verbs = { alc883_init_verbs },
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes),
.channel_mode = alc883_3ST_6ch_modes, .channel_mode = alc883_3ST_6ch_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
...@@ -7706,8 +7683,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7706,8 +7683,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.dig_in_nid = ALC883_DIGIN_NID, .dig_in_nid = ALC883_DIGIN_NID,
.num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes),
.channel_mode = alc883_sixstack_modes, .channel_mode = alc883_sixstack_modes,
...@@ -7719,8 +7694,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7719,8 +7694,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes),
.channel_mode = alc883_3ST_6ch_modes, .channel_mode = alc883_3ST_6ch_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
...@@ -7734,8 +7707,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7734,8 +7707,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
...@@ -7752,8 +7723,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7752,8 +7723,6 @@ static struct alc_config_preset alc883_presets[] = {
.init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs }, .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs },
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
...@@ -7764,8 +7733,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7764,8 +7733,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
...@@ -7779,8 +7746,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7779,8 +7746,6 @@ static struct alc_config_preset alc883_presets[] = {
alc883_medion_eapd_verbs }, alc883_medion_eapd_verbs },
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes),
.channel_mode = alc883_sixstack_modes, .channel_mode = alc883_sixstack_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
...@@ -7791,8 +7756,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7791,8 +7756,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
...@@ -7804,8 +7767,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7804,8 +7767,6 @@ static struct alc_config_preset alc883_presets[] = {
.init_verbs = { alc883_init_verbs, alc882_eapd_verbs }, .init_verbs = { alc883_init_verbs, alc882_eapd_verbs },
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
...@@ -7815,8 +7776,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7815,8 +7776,6 @@ static struct alc_config_preset alc883_presets[] = {
.init_verbs = { alc883_init_verbs, alc883_lenovo_101e_verbs}, .init_verbs = { alc883_init_verbs, alc883_lenovo_101e_verbs},
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_lenovo_101e_capture_source, .input_mux = &alc883_lenovo_101e_capture_source,
...@@ -7828,8 +7787,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7828,8 +7787,6 @@ static struct alc_config_preset alc883_presets[] = {
.init_verbs = { alc883_init_verbs, alc883_lenovo_nb0763_verbs}, .init_verbs = { alc883_init_verbs, alc883_lenovo_nb0763_verbs},
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
...@@ -7843,8 +7800,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7843,8 +7800,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_modes),
.channel_mode = alc883_3ST_6ch_modes, .channel_mode = alc883_3ST_6ch_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
...@@ -7858,8 +7813,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7858,8 +7813,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
...@@ -7872,8 +7825,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7872,8 +7825,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.dig_in_nid = ALC883_DIGIN_NID, .dig_in_nid = ALC883_DIGIN_NID,
.num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes),
.channel_mode = alc883_sixstack_modes, .channel_mode = alc883_sixstack_modes,
...@@ -7884,8 +7835,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7884,8 +7835,6 @@ static struct alc_config_preset alc883_presets[] = {
.init_verbs = { alc883_init_verbs, alc888_3st_hp_verbs }, .init_verbs = { alc883_init_verbs, alc888_3st_hp_verbs },
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc888_3st_hp_modes), .num_channel_mode = ARRAY_SIZE(alc888_3st_hp_modes),
.channel_mode = alc888_3st_hp_modes, .channel_mode = alc888_3st_hp_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
...@@ -7897,8 +7846,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7897,8 +7846,6 @@ static struct alc_config_preset alc883_presets[] = {
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC883_DIGOUT_NID, .dig_out_nid = ALC883_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.dig_in_nid = ALC883_DIGIN_NID, .dig_in_nid = ALC883_DIGIN_NID,
.num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes),
.channel_mode = alc883_sixstack_modes, .channel_mode = alc883_sixstack_modes,
...@@ -7911,8 +7858,6 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -7911,8 +7858,6 @@ static struct alc_config_preset alc883_presets[] = {
.init_verbs = { alc883_init_verbs, alc883_mitac_verbs }, .init_verbs = { alc883_init_verbs, alc883_mitac_verbs },
.num_dacs = ARRAY_SIZE(alc883_dac_nids), .num_dacs = ARRAY_SIZE(alc883_dac_nids),
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc883_adc_nids),
.adc_nids = alc883_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
...@@ -8072,10 +8017,9 @@ static int patch_alc883(struct hda_codec *codec) ...@@ -8072,10 +8017,9 @@ static int patch_alc883(struct hda_codec *codec)
spec->stream_digital_playback = &alc883_pcm_digital_playback; spec->stream_digital_playback = &alc883_pcm_digital_playback;
spec->stream_digital_capture = &alc883_pcm_digital_capture; spec->stream_digital_capture = &alc883_pcm_digital_capture;
if (!spec->adc_nids && spec->input_mux) { spec->num_adc_nids = ARRAY_SIZE(alc883_adc_nids);
spec->adc_nids = alc883_adc_nids; spec->adc_nids = alc883_adc_nids;
spec->num_adc_nids = ARRAY_SIZE(alc883_adc_nids); spec->capsrc_nids = alc883_capsrc_nids;
}
spec->vmaster_nid = 0x0c; spec->vmaster_nid = 0x0c;
...@@ -9532,6 +9476,8 @@ static hda_nid_t alc268_adc_nids_alt[1] = { ...@@ -9532,6 +9476,8 @@ static hda_nid_t alc268_adc_nids_alt[1] = {
0x08 0x08
}; };
static hda_nid_t alc268_capsrc_nids[2] = { 0x23, 0x24 };
static struct snd_kcontrol_new alc268_base_mixer[] = { static struct snd_kcontrol_new alc268_base_mixer[] = {
/* output mixer control */ /* output mixer control */
HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT), HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT),
...@@ -9787,21 +9733,7 @@ static struct hda_verb alc268_volume_init_verbs[] = { ...@@ -9787,21 +9733,7 @@ static struct hda_verb alc268_volume_init_verbs[] = {
#define alc268_mux_enum_info alc_mux_enum_info #define alc268_mux_enum_info alc_mux_enum_info
#define alc268_mux_enum_get alc_mux_enum_get #define alc268_mux_enum_get alc_mux_enum_get
#define alc268_mux_enum_put alc_mux_enum_put
static int alc268_mux_enum_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
struct alc_spec *spec = codec->spec;
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];
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[] = { static struct snd_kcontrol_new alc268_capture_alt_mixer[] = {
HDA_CODEC_VOLUME("Capture Volume", 0x23, 0x0, HDA_OUTPUT), HDA_CODEC_VOLUME("Capture Volume", 0x23, 0x0, HDA_OUTPUT),
...@@ -10145,6 +10077,7 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -10145,6 +10077,7 @@ static struct alc_config_preset alc268_presets[] = {
.dac_nids = alc268_dac_nids, .dac_nids = alc268_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt), .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
.adc_nids = alc268_adc_nids_alt, .adc_nids = alc268_adc_nids_alt,
.capsrc_nids = alc268_capsrc_nids,
.hp_nid = 0x03, .hp_nid = 0x03,
.dig_out_nid = ALC268_DIGOUT_NID, .dig_out_nid = ALC268_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc268_modes), .num_channel_mode = ARRAY_SIZE(alc268_modes),
...@@ -10159,6 +10092,7 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -10159,6 +10092,7 @@ static struct alc_config_preset alc268_presets[] = {
.dac_nids = alc268_dac_nids, .dac_nids = alc268_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt), .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
.adc_nids = alc268_adc_nids_alt, .adc_nids = alc268_adc_nids_alt,
.capsrc_nids = alc268_capsrc_nids,
.hp_nid = 0x03, .hp_nid = 0x03,
.num_channel_mode = ARRAY_SIZE(alc268_modes), .num_channel_mode = ARRAY_SIZE(alc268_modes),
.channel_mode = alc268_modes, .channel_mode = alc268_modes,
...@@ -10174,6 +10108,7 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -10174,6 +10108,7 @@ static struct alc_config_preset alc268_presets[] = {
.dac_nids = alc268_dac_nids, .dac_nids = alc268_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt), .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
.adc_nids = alc268_adc_nids_alt, .adc_nids = alc268_adc_nids_alt,
.capsrc_nids = alc268_capsrc_nids,
.hp_nid = 0x02, .hp_nid = 0x02,
.num_channel_mode = ARRAY_SIZE(alc268_modes), .num_channel_mode = ARRAY_SIZE(alc268_modes),
.channel_mode = alc268_modes, .channel_mode = alc268_modes,
...@@ -10202,6 +10137,7 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -10202,6 +10137,7 @@ static struct alc_config_preset alc268_presets[] = {
.dac_nids = alc268_dac_nids, .dac_nids = alc268_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt), .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
.adc_nids = alc268_adc_nids_alt, .adc_nids = alc268_adc_nids_alt,
.capsrc_nids = alc268_capsrc_nids,
.hp_nid = 0x03, .hp_nid = 0x03,
.dig_out_nid = ALC268_DIGOUT_NID, .dig_out_nid = ALC268_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc268_modes), .num_channel_mode = ARRAY_SIZE(alc268_modes),
...@@ -10219,6 +10155,7 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -10219,6 +10155,7 @@ static struct alc_config_preset alc268_presets[] = {
.dac_nids = alc268_dac_nids, .dac_nids = alc268_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt), .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
.adc_nids = alc268_adc_nids_alt, .adc_nids = alc268_adc_nids_alt,
.capsrc_nids = alc268_capsrc_nids,
.hp_nid = 0x03, .hp_nid = 0x03,
.dig_out_nid = ALC268_DIGOUT_NID, .dig_out_nid = ALC268_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc268_modes), .num_channel_mode = ARRAY_SIZE(alc268_modes),
...@@ -10294,6 +10231,7 @@ static int patch_alc268(struct hda_codec *codec) ...@@ -10294,6 +10231,7 @@ static int patch_alc268(struct hda_codec *codec)
alc268_capture_mixer; alc268_capture_mixer;
spec->num_mixers++; spec->num_mixers++;
} }
spec->capsrc_nids = alc268_capsrc_nids;
} }
spec->vmaster_nid = 0x02; spec->vmaster_nid = 0x02;
...@@ -11850,6 +11788,8 @@ static hda_nid_t alc861vd_adc_nids[1] = { ...@@ -11850,6 +11788,8 @@ static hda_nid_t alc861vd_adc_nids[1] = {
0x09, 0x09,
}; };
static hda_nid_t alc861vd_capsrc_nids[1] = { 0x22 };
/* input MUX */ /* input MUX */
/* FIXME: should be a matrix-type input source selection */ /* FIXME: should be a matrix-type input source selection */
static struct hda_input_mux alc861vd_capture_source = { static struct hda_input_mux alc861vd_capture_source = {
...@@ -11881,33 +11821,8 @@ static struct hda_input_mux alc861vd_hp_capture_source = { ...@@ -11881,33 +11821,8 @@ static struct hda_input_mux alc861vd_hp_capture_source = {
#define alc861vd_mux_enum_info alc_mux_enum_info #define alc861vd_mux_enum_info alc_mux_enum_info
#define alc861vd_mux_enum_get alc_mux_enum_get #define alc861vd_mux_enum_get alc_mux_enum_get
/* ALC861VD has the ALC882-type input selection (but has only one ADC) */
static int alc861vd_mux_enum_put(struct snd_kcontrol *kcontrol, #define alc861vd_mux_enum_put alc882_mux_enum_put
struct snd_ctl_elem_value *ucontrol)
{
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[1] = { 0x22 };
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);
}
*cur_val = idx;
return 1;
}
/* /*
* 2ch mode * 2ch mode
...@@ -12390,8 +12305,6 @@ static struct alc_config_preset alc861vd_presets[] = { ...@@ -12390,8 +12305,6 @@ static struct alc_config_preset alc861vd_presets[] = {
alc861vd_3stack_init_verbs }, alc861vd_3stack_init_verbs },
.num_dacs = ARRAY_SIZE(alc660vd_dac_nids), .num_dacs = ARRAY_SIZE(alc660vd_dac_nids),
.dac_nids = alc660vd_dac_nids, .dac_nids = alc660vd_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc861vd_adc_nids),
.adc_nids = alc861vd_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes),
.channel_mode = alc861vd_3stack_2ch_modes, .channel_mode = alc861vd_3stack_2ch_modes,
.input_mux = &alc861vd_capture_source, .input_mux = &alc861vd_capture_source,
...@@ -12403,8 +12316,6 @@ static struct alc_config_preset alc861vd_presets[] = { ...@@ -12403,8 +12316,6 @@ static struct alc_config_preset alc861vd_presets[] = {
.num_dacs = ARRAY_SIZE(alc660vd_dac_nids), .num_dacs = ARRAY_SIZE(alc660vd_dac_nids),
.dac_nids = alc660vd_dac_nids, .dac_nids = alc660vd_dac_nids,
.dig_out_nid = ALC861VD_DIGOUT_NID, .dig_out_nid = ALC861VD_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc861vd_adc_nids),
.adc_nids = alc861vd_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes),
.channel_mode = alc861vd_3stack_2ch_modes, .channel_mode = alc861vd_3stack_2ch_modes,
.input_mux = &alc861vd_capture_source, .input_mux = &alc861vd_capture_source,
...@@ -12449,8 +12360,6 @@ static struct alc_config_preset alc861vd_presets[] = { ...@@ -12449,8 +12360,6 @@ static struct alc_config_preset alc861vd_presets[] = {
alc861vd_lenovo_unsol_verbs }, alc861vd_lenovo_unsol_verbs },
.num_dacs = ARRAY_SIZE(alc660vd_dac_nids), .num_dacs = ARRAY_SIZE(alc660vd_dac_nids),
.dac_nids = alc660vd_dac_nids, .dac_nids = alc660vd_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc861vd_adc_nids),
.adc_nids = alc861vd_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes),
.channel_mode = alc861vd_3stack_2ch_modes, .channel_mode = alc861vd_3stack_2ch_modes,
.input_mux = &alc861vd_capture_source, .input_mux = &alc861vd_capture_source,
...@@ -12462,8 +12371,6 @@ static struct alc_config_preset alc861vd_presets[] = { ...@@ -12462,8 +12371,6 @@ static struct alc_config_preset alc861vd_presets[] = {
.init_verbs = { alc861vd_dallas_verbs }, .init_verbs = { alc861vd_dallas_verbs },
.num_dacs = ARRAY_SIZE(alc861vd_dac_nids), .num_dacs = ARRAY_SIZE(alc861vd_dac_nids),
.dac_nids = alc861vd_dac_nids, .dac_nids = alc861vd_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc861vd_adc_nids),
.adc_nids = alc861vd_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes),
.channel_mode = alc861vd_3stack_2ch_modes, .channel_mode = alc861vd_3stack_2ch_modes,
.input_mux = &alc861vd_dallas_capture_source, .input_mux = &alc861vd_dallas_capture_source,
...@@ -12475,9 +12382,7 @@ static struct alc_config_preset alc861vd_presets[] = { ...@@ -12475,9 +12382,7 @@ static struct alc_config_preset alc861vd_presets[] = {
.init_verbs = { alc861vd_dallas_verbs, alc861vd_eapd_verbs }, .init_verbs = { alc861vd_dallas_verbs, alc861vd_eapd_verbs },
.num_dacs = ARRAY_SIZE(alc861vd_dac_nids), .num_dacs = ARRAY_SIZE(alc861vd_dac_nids),
.dac_nids = alc861vd_dac_nids, .dac_nids = alc861vd_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc861vd_adc_nids),
.dig_out_nid = ALC861VD_DIGOUT_NID, .dig_out_nid = ALC861VD_DIGOUT_NID,
.adc_nids = alc861vd_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc861vd_3stack_2ch_modes),
.channel_mode = alc861vd_3stack_2ch_modes, .channel_mode = alc861vd_3stack_2ch_modes,
.input_mux = &alc861vd_hp_capture_source, .input_mux = &alc861vd_hp_capture_source,
...@@ -12779,6 +12684,7 @@ static int patch_alc861vd(struct hda_codec *codec) ...@@ -12779,6 +12684,7 @@ static int patch_alc861vd(struct hda_codec *codec)
spec->adc_nids = alc861vd_adc_nids; spec->adc_nids = alc861vd_adc_nids;
spec->num_adc_nids = ARRAY_SIZE(alc861vd_adc_nids); spec->num_adc_nids = ARRAY_SIZE(alc861vd_adc_nids);
spec->capsrc_nids = alc861vd_capsrc_nids;
spec->mixers[spec->num_mixers] = alc861vd_capture_mixer; spec->mixers[spec->num_mixers] = alc861vd_capture_mixer;
spec->num_mixers++; spec->num_mixers++;
...@@ -12820,9 +12726,11 @@ static hda_nid_t alc662_adc_nids[1] = { ...@@ -12820,9 +12726,11 @@ static hda_nid_t alc662_adc_nids[1] = {
/* ADC1-2 */ /* ADC1-2 */
0x09, 0x09,
}; };
static hda_nid_t alc662_capsrc_nids[1] = { 0x23 };
/* input MUX */ /* input MUX */
/* FIXME: should be a matrix-type input source selection */ /* FIXME: should be a matrix-type input source selection */
static struct hda_input_mux alc662_capture_source = { static struct hda_input_mux alc662_capture_source = {
.num_items = 4, .num_items = 4,
.items = { .items = {
...@@ -12851,33 +12759,8 @@ static struct hda_input_mux alc662_eeepc_capture_source = { ...@@ -12851,33 +12759,8 @@ static struct hda_input_mux alc662_eeepc_capture_source = {
#define alc662_mux_enum_info alc_mux_enum_info #define alc662_mux_enum_info alc_mux_enum_info
#define alc662_mux_enum_get alc_mux_enum_get #define alc662_mux_enum_get alc_mux_enum_get
#define alc662_mux_enum_put alc882_mux_enum_put
static int alc662_mux_enum_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
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[2] = { 0x23, 0x22 };
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);
}
*cur_val = idx;
return 1;
}
/* /*
* 2ch mode * 2ch mode
*/ */
...@@ -13354,8 +13237,6 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -13354,8 +13237,6 @@ static struct alc_config_preset alc662_presets[] = {
.num_dacs = ARRAY_SIZE(alc662_dac_nids), .num_dacs = ARRAY_SIZE(alc662_dac_nids),
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc662_adc_nids),
.adc_nids = alc662_adc_nids,
.dig_in_nid = ALC662_DIGIN_NID, .dig_in_nid = ALC662_DIGIN_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
...@@ -13368,8 +13249,6 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -13368,8 +13249,6 @@ static struct alc_config_preset alc662_presets[] = {
.num_dacs = ARRAY_SIZE(alc662_dac_nids), .num_dacs = ARRAY_SIZE(alc662_dac_nids),
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc662_adc_nids),
.adc_nids = alc662_adc_nids,
.dig_in_nid = ALC662_DIGIN_NID, .dig_in_nid = ALC662_DIGIN_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes),
.channel_mode = alc662_3ST_6ch_modes, .channel_mode = alc662_3ST_6ch_modes,
...@@ -13382,8 +13261,6 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -13382,8 +13261,6 @@ static struct alc_config_preset alc662_presets[] = {
.init_verbs = { alc662_init_verbs }, .init_verbs = { alc662_init_verbs },
.num_dacs = ARRAY_SIZE(alc662_dac_nids), .num_dacs = ARRAY_SIZE(alc662_dac_nids),
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc662_adc_nids),
.adc_nids = alc662_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes),
.channel_mode = alc662_3ST_6ch_modes, .channel_mode = alc662_3ST_6ch_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
...@@ -13396,8 +13273,6 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -13396,8 +13273,6 @@ static struct alc_config_preset alc662_presets[] = {
.num_dacs = ARRAY_SIZE(alc662_dac_nids), .num_dacs = ARRAY_SIZE(alc662_dac_nids),
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_adc_nids = ARRAY_SIZE(alc662_adc_nids),
.adc_nids = alc662_adc_nids,
.dig_in_nid = ALC662_DIGIN_NID, .dig_in_nid = ALC662_DIGIN_NID,
.num_channel_mode = ARRAY_SIZE(alc662_5stack_modes), .num_channel_mode = ARRAY_SIZE(alc662_5stack_modes),
.channel_mode = alc662_5stack_modes, .channel_mode = alc662_5stack_modes,
...@@ -13408,8 +13283,6 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -13408,8 +13283,6 @@ static struct alc_config_preset alc662_presets[] = {
.init_verbs = { alc662_init_verbs, alc662_sue_init_verbs }, .init_verbs = { alc662_init_verbs, alc662_sue_init_verbs },
.num_dacs = ARRAY_SIZE(alc662_dac_nids), .num_dacs = ARRAY_SIZE(alc662_dac_nids),
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc662_adc_nids),
.adc_nids = alc662_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_lenovo_101e_capture_source, .input_mux = &alc662_lenovo_101e_capture_source,
...@@ -13422,8 +13295,6 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -13422,8 +13295,6 @@ static struct alc_config_preset alc662_presets[] = {
alc662_eeepc_sue_init_verbs }, alc662_eeepc_sue_init_verbs },
.num_dacs = ARRAY_SIZE(alc662_dac_nids), .num_dacs = ARRAY_SIZE(alc662_dac_nids),
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc861vd_adc_nids),
.adc_nids = alc662_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source, .input_mux = &alc662_eeepc_capture_source,
...@@ -13437,8 +13308,6 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -13437,8 +13308,6 @@ static struct alc_config_preset alc662_presets[] = {
alc662_eeepc_ep20_sue_init_verbs }, alc662_eeepc_ep20_sue_init_verbs },
.num_dacs = ARRAY_SIZE(alc662_dac_nids), .num_dacs = ARRAY_SIZE(alc662_dac_nids),
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.num_adc_nids = ARRAY_SIZE(alc662_adc_nids),
.adc_nids = alc662_adc_nids,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_6ch_modes),
.channel_mode = alc662_3ST_6ch_modes, .channel_mode = alc662_3ST_6ch_modes,
.input_mux = &alc662_lenovo_101e_capture_source, .input_mux = &alc662_lenovo_101e_capture_source,
...@@ -13750,10 +13619,9 @@ static int patch_alc662(struct hda_codec *codec) ...@@ -13750,10 +13619,9 @@ static int patch_alc662(struct hda_codec *codec)
spec->stream_digital_playback = &alc662_pcm_digital_playback; spec->stream_digital_playback = &alc662_pcm_digital_playback;
spec->stream_digital_capture = &alc662_pcm_digital_capture; spec->stream_digital_capture = &alc662_pcm_digital_capture;
if (!spec->adc_nids && spec->input_mux) { spec->adc_nids = alc662_adc_nids;
spec->adc_nids = alc662_adc_nids; spec->num_adc_nids = ARRAY_SIZE(alc662_adc_nids);
spec->num_adc_nids = ARRAY_SIZE(alc662_adc_nids); spec->capsrc_nids = alc662_capsrc_nids;
}
spec->vmaster_nid = 0x02; spec->vmaster_nid = 0x02;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment