aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2011-07-27 10:41:57 -0400
committerTakashi Iwai <tiwai@suse.de>2011-07-27 10:44:40 -0400
commitc48a8fb0d31d6147d8d76b8e2ad7f51a2fbb5c4d (patch)
tree4afd898435facd1ca0fbba933c0a563d4bbf810a /sound
parentae6ff61e43fe4f348a7f764ff0c13fb4240da7b8 (diff)
ALSA: hda - Fix duplicated DAC assignments for Realtek
Copying hp_pins and speaker_pins from line_out_pins may confuse the parser, and it can lead to duplicated initializations for the same pin with a wrong DAC assignment. The problem appears in 3.0 kernel code. Cc: <stable@kernel.org> (for 3.0) Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/patch_realtek.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 0383dd8a11df..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++) {