Commit cb1d0a1e authored by Takashi Iwai's avatar Takashi Iwai Committed by Greg Kroah-Hartman

ALSA: hda - Fix duplicated DAC assignments for Realtek

commit c48a8fb0 upstream.

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.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 2415d01c
...@@ -1578,13 +1578,15 @@ static void alc_init_auto_hp(struct hda_codec *codec) ...@@ -1578,13 +1578,15 @@ static void alc_init_auto_hp(struct hda_codec *codec)
if (present == 3) if (present == 3)
spec->automute_hp_lo = 1; /* both HP and LO automute */ spec->automute_hp_lo = 1; /* both HP and LO automute */
if (!cfg->speaker_pins[0]) { if (!cfg->speaker_pins[0] &&
cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
memcpy(cfg->speaker_pins, cfg->line_out_pins, memcpy(cfg->speaker_pins, cfg->line_out_pins,
sizeof(cfg->speaker_pins)); sizeof(cfg->speaker_pins));
cfg->speaker_outs = cfg->line_outs; cfg->speaker_outs = cfg->line_outs;
} }
if (!cfg->hp_pins[0]) { if (!cfg->hp_pins[0] &&
cfg->line_out_type == AUTO_PIN_HP_OUT) {
memcpy(cfg->hp_pins, cfg->line_out_pins, memcpy(cfg->hp_pins, cfg->line_out_pins,
sizeof(cfg->hp_pins)); sizeof(cfg->hp_pins));
cfg->hp_outs = cfg->line_outs; cfg->hp_outs = cfg->line_outs;
...@@ -1603,6 +1605,7 @@ static void alc_init_auto_hp(struct hda_codec *codec) ...@@ -1603,6 +1605,7 @@ static void alc_init_auto_hp(struct hda_codec *codec)
spec->automute_mode = ALC_AUTOMUTE_PIN; spec->automute_mode = ALC_AUTOMUTE_PIN;
} }
if (spec->automute && cfg->line_out_pins[0] && if (spec->automute && cfg->line_out_pins[0] &&
cfg->speaker_pins[0] &&
cfg->line_out_pins[0] != cfg->hp_pins[0] && cfg->line_out_pins[0] != cfg->hp_pins[0] &&
cfg->line_out_pins[0] != cfg->speaker_pins[0]) { cfg->line_out_pins[0] != cfg->speaker_pins[0]) {
for (i = 0; i < cfg->line_outs; i++) { for (i = 0; i < cfg->line_outs; i++) {
......
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