aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_realtek.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r--sound/pci/hda/patch_realtek.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 694327ae8b71..e125c60fe352 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -895,13 +895,15 @@ static void alc_init_auto_hp(struct hda_codec *codec)
895 if (present == 3) 895 if (present == 3)
896 spec->automute_hp_lo = 1; /* both HP and LO automute */ 896 spec->automute_hp_lo = 1; /* both HP and LO automute */
897 897
898 if (!cfg->speaker_pins[0]) { 898 if (!cfg->speaker_pins[0] &&
899 cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
899 memcpy(cfg->speaker_pins, cfg->line_out_pins, 900 memcpy(cfg->speaker_pins, cfg->line_out_pins,
900 sizeof(cfg->speaker_pins)); 901 sizeof(cfg->speaker_pins));
901 cfg->speaker_outs = cfg->line_outs; 902 cfg->speaker_outs = cfg->line_outs;
902 } 903 }
903 904
904 if (!cfg->hp_pins[0]) { 905 if (!cfg->hp_pins[0] &&
906 cfg->line_out_type == AUTO_PIN_HP_OUT) {
905 memcpy(cfg->hp_pins, cfg->line_out_pins, 907 memcpy(cfg->hp_pins, cfg->line_out_pins,
906 sizeof(cfg->hp_pins)); 908 sizeof(cfg->hp_pins));
907 cfg->hp_outs = cfg->line_outs; 909 cfg->hp_outs = cfg->line_outs;
@@ -920,6 +922,7 @@ static void alc_init_auto_hp(struct hda_codec *codec)
920 spec->automute_mode = ALC_AUTOMUTE_PIN; 922 spec->automute_mode = ALC_AUTOMUTE_PIN;
921 } 923 }
922 if (spec->automute && cfg->line_out_pins[0] && 924 if (spec->automute && cfg->line_out_pins[0] &&
925 cfg->speaker_pins[0] &&
923 cfg->line_out_pins[0] != cfg->hp_pins[0] && 926 cfg->line_out_pins[0] != cfg->hp_pins[0] &&
924 cfg->line_out_pins[0] != cfg->speaker_pins[0]) { 927 cfg->line_out_pins[0] != cfg->speaker_pins[0]) {
925 for (i = 0; i < cfg->line_outs; i++) { 928 for (i = 0; i < cfg->line_outs; i++) {
@@ -1911,7 +1914,7 @@ static int alc_build_controls(struct hda_codec *codec)
1911 return err; 1914 return err;
1912 } 1915 }
1913 } 1916 }
1914 if (spec->cap_mixer) { 1917 if (spec->cap_mixer && spec->adc_nids) {
1915 const char *kname = kctl ? kctl->id.name : NULL; 1918 const char *kname = kctl ? kctl->id.name : NULL;
1916 for (knew = spec->cap_mixer; knew->name; knew++) { 1919 for (knew = spec->cap_mixer; knew->name; knew++) {
1917 if (kname && strcmp(knew->name, kname) == 0) 1920 if (kname && strcmp(knew->name, kname) == 0)
@@ -3677,7 +3680,7 @@ static int patch_alc880(struct hda_codec *codec)
3677 if (board_config != ALC_MODEL_AUTO) 3680 if (board_config != ALC_MODEL_AUTO)
3678 setup_preset(codec, &alc880_presets[board_config]); 3681 setup_preset(codec, &alc880_presets[board_config]);
3679 3682
3680 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 3683 if (!spec->no_analog && !spec->adc_nids) {
3681 alc_auto_fill_adc_caps(codec); 3684 alc_auto_fill_adc_caps(codec);
3682 alc_rebuild_imux_for_auto_mic(codec); 3685 alc_rebuild_imux_for_auto_mic(codec);
3683 alc_remove_invalid_adc_nids(codec); 3686 alc_remove_invalid_adc_nids(codec);
@@ -3804,7 +3807,7 @@ static int patch_alc260(struct hda_codec *codec)
3804 if (board_config != ALC_MODEL_AUTO) 3807 if (board_config != ALC_MODEL_AUTO)
3805 setup_preset(codec, &alc260_presets[board_config]); 3808 setup_preset(codec, &alc260_presets[board_config]);
3806 3809
3807 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 3810 if (!spec->no_analog && !spec->adc_nids) {
3808 alc_auto_fill_adc_caps(codec); 3811 alc_auto_fill_adc_caps(codec);
3809 alc_rebuild_imux_for_auto_mic(codec); 3812 alc_rebuild_imux_for_auto_mic(codec);
3810 alc_remove_invalid_adc_nids(codec); 3813 alc_remove_invalid_adc_nids(codec);
@@ -3983,7 +3986,7 @@ static int patch_alc882(struct hda_codec *codec)
3983 if (board_config != ALC_MODEL_AUTO) 3986 if (board_config != ALC_MODEL_AUTO)
3984 setup_preset(codec, &alc882_presets[board_config]); 3987 setup_preset(codec, &alc882_presets[board_config]);
3985 3988
3986 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 3989 if (!spec->no_analog && !spec->adc_nids) {
3987 alc_auto_fill_adc_caps(codec); 3990 alc_auto_fill_adc_caps(codec);
3988 alc_rebuild_imux_for_auto_mic(codec); 3991 alc_rebuild_imux_for_auto_mic(codec);
3989 alc_remove_invalid_adc_nids(codec); 3992 alc_remove_invalid_adc_nids(codec);
@@ -4137,7 +4140,7 @@ static int patch_alc262(struct hda_codec *codec)
4137 if (board_config != ALC_MODEL_AUTO) 4140 if (board_config != ALC_MODEL_AUTO)
4138 setup_preset(codec, &alc262_presets[board_config]); 4141 setup_preset(codec, &alc262_presets[board_config]);
4139 4142
4140 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 4143 if (!spec->no_analog && !spec->adc_nids) {
4141 alc_auto_fill_adc_caps(codec); 4144 alc_auto_fill_adc_caps(codec);
4142 alc_rebuild_imux_for_auto_mic(codec); 4145 alc_rebuild_imux_for_auto_mic(codec);
4143 alc_remove_invalid_adc_nids(codec); 4146 alc_remove_invalid_adc_nids(codec);
@@ -4293,7 +4296,7 @@ static int patch_alc268(struct hda_codec *codec)
4293 (0 << AC_AMPCAP_MUTE_SHIFT)); 4296 (0 << AC_AMPCAP_MUTE_SHIFT));
4294 } 4297 }
4295 4298
4296 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 4299 if (!spec->no_analog && !spec->adc_nids) {
4297 alc_auto_fill_adc_caps(codec); 4300 alc_auto_fill_adc_caps(codec);
4298 alc_rebuild_imux_for_auto_mic(codec); 4301 alc_rebuild_imux_for_auto_mic(codec);
4299 alc_remove_invalid_adc_nids(codec); 4302 alc_remove_invalid_adc_nids(codec);
@@ -4705,7 +4708,7 @@ static int patch_alc269(struct hda_codec *codec)
4705 if (board_config != ALC_MODEL_AUTO) 4708 if (board_config != ALC_MODEL_AUTO)
4706 setup_preset(codec, &alc269_presets[board_config]); 4709 setup_preset(codec, &alc269_presets[board_config]);
4707 4710
4708 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 4711 if (!spec->no_analog && !spec->adc_nids) {
4709 alc_auto_fill_adc_caps(codec); 4712 alc_auto_fill_adc_caps(codec);
4710 alc_rebuild_imux_for_auto_mic(codec); 4713 alc_rebuild_imux_for_auto_mic(codec);
4711 alc_remove_invalid_adc_nids(codec); 4714 alc_remove_invalid_adc_nids(codec);
@@ -4843,7 +4846,7 @@ static int patch_alc861(struct hda_codec *codec)
4843 if (board_config != ALC_MODEL_AUTO) 4846 if (board_config != ALC_MODEL_AUTO)
4844 setup_preset(codec, &alc861_presets[board_config]); 4847 setup_preset(codec, &alc861_presets[board_config]);
4845 4848
4846 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 4849 if (!spec->no_analog && !spec->adc_nids) {
4847 alc_auto_fill_adc_caps(codec); 4850 alc_auto_fill_adc_caps(codec);
4848 alc_rebuild_imux_for_auto_mic(codec); 4851 alc_rebuild_imux_for_auto_mic(codec);
4849 alc_remove_invalid_adc_nids(codec); 4852 alc_remove_invalid_adc_nids(codec);
@@ -4984,7 +4987,7 @@ static int patch_alc861vd(struct hda_codec *codec)
4984 add_verb(spec, alc660vd_eapd_verbs); 4987 add_verb(spec, alc660vd_eapd_verbs);
4985 } 4988 }
4986 4989
4987 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 4990 if (!spec->no_analog && !spec->adc_nids) {
4988 alc_auto_fill_adc_caps(codec); 4991 alc_auto_fill_adc_caps(codec);
4989 alc_rebuild_imux_for_auto_mic(codec); 4992 alc_rebuild_imux_for_auto_mic(codec);
4990 alc_remove_invalid_adc_nids(codec); 4993 alc_remove_invalid_adc_nids(codec);
@@ -5200,7 +5203,7 @@ static int patch_alc662(struct hda_codec *codec)
5200 if (board_config != ALC_MODEL_AUTO) 5203 if (board_config != ALC_MODEL_AUTO)
5201 setup_preset(codec, &alc662_presets[board_config]); 5204 setup_preset(codec, &alc662_presets[board_config]);
5202 5205
5203 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 5206 if (!spec->no_analog && !spec->adc_nids) {
5204 alc_auto_fill_adc_caps(codec); 5207 alc_auto_fill_adc_caps(codec);
5205 alc_rebuild_imux_for_auto_mic(codec); 5208 alc_rebuild_imux_for_auto_mic(codec);
5206 alc_remove_invalid_adc_nids(codec); 5209 alc_remove_invalid_adc_nids(codec);
@@ -5336,7 +5339,7 @@ static int patch_alc680(struct hda_codec *codec)
5336#endif 5339#endif
5337 } 5340 }
5338 5341
5339 if (!spec->no_analog && !spec->adc_nids && spec->input_mux) { 5342 if (!spec->no_analog && !spec->adc_nids) {
5340 alc_auto_fill_adc_caps(codec); 5343 alc_auto_fill_adc_caps(codec);
5341 alc_rebuild_imux_for_auto_mic(codec); 5344 alc_rebuild_imux_for_auto_mic(codec);
5342 alc_remove_invalid_adc_nids(codec); 5345 alc_remove_invalid_adc_nids(codec);