diff options
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 29 |
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); |