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>
This commit is contained in:
parent
ae6ff61e43
commit
c48a8fb0d3
1 changed files with 5 additions and 2 deletions
|
@ -895,13 +895,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;
|
||||||
|
@ -920,6 +922,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++) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue