Archived
14
0
Fork 0

ALSA: HDA: Realtek: Take vmaster dac from multiout dac list

With the auto-parser we can choose the dac nid for vmaster from
the DACs we already know, instead of hard-coding it. This is more
future-proof and was actually wrong on one machine.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
David Henningsson 2011-12-09 18:27:42 +08:00 committed by Takashi Iwai
parent ffe7e40639
commit fde48a1f80

View file

@ -3039,6 +3039,8 @@ static int alc_auto_fill_extra_dacs(struct hda_codec *codec, int num_outs,
static int alc_auto_fill_multi_ios(struct hda_codec *codec, static int alc_auto_fill_multi_ios(struct hda_codec *codec,
unsigned int location, int offset); unsigned int location, int offset);
static hda_nid_t alc_look_for_out_vol_nid(struct hda_codec *codec,
hda_nid_t pin, hda_nid_t dac);
/* fill in the dac_nids table from the parsed pin configuration */ /* fill in the dac_nids table from the parsed pin configuration */
static int alc_auto_fill_dac_nids(struct hda_codec *codec) static int alc_auto_fill_dac_nids(struct hda_codec *codec)
@ -3153,6 +3155,10 @@ static int alc_auto_fill_dac_nids(struct hda_codec *codec)
} }
} }
if (cfg->line_out_pins[0])
spec->vmaster_nid =
alc_look_for_out_vol_nid(codec, cfg->line_out_pins[0],
spec->multiout.dac_nids[0]);
return 0; return 0;
} }
@ -4175,8 +4181,10 @@ static int patch_alc880(struct hda_codec *codec)
#endif #endif
} }
if (board_config != ALC_MODEL_AUTO) if (board_config != ALC_MODEL_AUTO) {
spec->vmaster_nid = 0x0c;
setup_preset(codec, &alc880_presets[board_config]); setup_preset(codec, &alc880_presets[board_config]);
}
if (!spec->no_analog && !spec->adc_nids) { if (!spec->no_analog && !spec->adc_nids) {
alc_auto_fill_adc_caps(codec); alc_auto_fill_adc_caps(codec);
@ -4196,8 +4204,6 @@ static int patch_alc880(struct hda_codec *codec)
alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
spec->vmaster_nid = 0x0c;
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
if (board_config == ALC_MODEL_AUTO) if (board_config == ALC_MODEL_AUTO)
spec->init_hook = alc_auto_init_std; spec->init_hook = alc_auto_init_std;
@ -4304,8 +4310,10 @@ static int patch_alc260(struct hda_codec *codec)
#endif #endif
} }
if (board_config != ALC_MODEL_AUTO) if (board_config != ALC_MODEL_AUTO) {
setup_preset(codec, &alc260_presets[board_config]); setup_preset(codec, &alc260_presets[board_config]);
spec->vmaster_nid = 0x08;
}
if (!spec->no_analog && !spec->adc_nids) { if (!spec->no_analog && !spec->adc_nids) {
alc_auto_fill_adc_caps(codec); alc_auto_fill_adc_caps(codec);
@ -4325,8 +4333,6 @@ static int patch_alc260(struct hda_codec *codec)
alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
spec->vmaster_nid = 0x08;
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
if (board_config == ALC_MODEL_AUTO) if (board_config == ALC_MODEL_AUTO)
spec->init_hook = alc_auto_init_std; spec->init_hook = alc_auto_init_std;
@ -4698,8 +4704,10 @@ static int patch_alc882(struct hda_codec *codec)
goto error; goto error;
} }
if (board_config != ALC_MODEL_AUTO) if (board_config != ALC_MODEL_AUTO) {
setup_preset(codec, &alc882_presets[board_config]); setup_preset(codec, &alc882_presets[board_config]);
spec->vmaster_nid = 0x0c;
}
if (!spec->no_analog && !spec->adc_nids) { if (!spec->no_analog && !spec->adc_nids) {
alc_auto_fill_adc_caps(codec); alc_auto_fill_adc_caps(codec);
@ -4719,8 +4727,6 @@ static int patch_alc882(struct hda_codec *codec)
alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
spec->vmaster_nid = 0x0c;
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
if (board_config == ALC_MODEL_AUTO) if (board_config == ALC_MODEL_AUTO)
spec->init_hook = alc_auto_init_std; spec->init_hook = alc_auto_init_std;
@ -4899,8 +4905,6 @@ static int patch_alc262(struct hda_codec *codec)
alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
spec->vmaster_nid = 0x0c;
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
spec->init_hook = alc_auto_init_std; spec->init_hook = alc_auto_init_std;
spec->shutup = alc_eapd_shutup; spec->shutup = alc_eapd_shutup;
@ -5012,8 +5016,6 @@ static int patch_alc268(struct hda_codec *codec)
if (!spec->no_analog && !spec->cap_mixer) if (!spec->no_analog && !spec->cap_mixer)
set_capture_mixer(codec); set_capture_mixer(codec);
spec->vmaster_nid = 0x02;
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
spec->init_hook = alc_auto_init_std; spec->init_hook = alc_auto_init_std;
spec->shutup = alc_eapd_shutup; spec->shutup = alc_eapd_shutup;
@ -5568,8 +5570,6 @@ static int patch_alc269(struct hda_codec *codec)
alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
spec->vmaster_nid = 0x02;
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
#ifdef CONFIG_PM #ifdef CONFIG_PM
codec->patch_ops.resume = alc269_resume; codec->patch_ops.resume = alc269_resume;
@ -5674,8 +5674,6 @@ static int patch_alc861(struct hda_codec *codec)
set_beep_amp(spec, 0x23, 0, HDA_OUTPUT); set_beep_amp(spec, 0x23, 0, HDA_OUTPUT);
} }
spec->vmaster_nid = 0x03;
alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
@ -5800,8 +5798,6 @@ static int patch_alc861vd(struct hda_codec *codec)
set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
} }
spec->vmaster_nid = 0x02;
alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
@ -6184,7 +6180,6 @@ static int patch_alc662(struct hda_codec *codec)
break; break;
} }
} }
spec->vmaster_nid = 0x02;
alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PROBE);
@ -6240,8 +6235,6 @@ static int patch_alc680(struct hda_codec *codec)
if (!spec->no_analog && !spec->cap_mixer) if (!spec->no_analog && !spec->cap_mixer)
set_capture_mixer(codec); set_capture_mixer(codec);
spec->vmaster_nid = 0x02;
codec->patch_ops = alc_patch_ops; codec->patch_ops = alc_patch_ops;
spec->init_hook = alc_auto_init_std; spec->init_hook = alc_auto_init_std;