diff options
author | Takashi Iwai <tiwai@suse.de> | 2011-07-27 16:41:57 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-08-04 21:58:37 -0700 |
commit | cb1d0a1e91079d22cedc6d66d9c94d53ce0b0199 (patch) | |
tree | 4481e1751c0597b21d13616842f20883639e8518 | |
parent | 2415d01c0cb11b5471ee640b0ba5a1254be9a708 (diff) | |
download | kernel_samsung_crespo-cb1d0a1e91079d22cedc6d66d9c94d53ce0b0199.zip kernel_samsung_crespo-cb1d0a1e91079d22cedc6d66d9c94d53ce0b0199.tar.gz kernel_samsung_crespo-cb1d0a1e91079d22cedc6d66d9c94d53ce0b0199.tar.bz2 |
ALSA: hda - Fix duplicated DAC assignments for Realtek
commit c48a8fb0d31d6147d8d76b8e2ad7f51a2fbb5c4d 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: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index b48fb43..524ff26 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -1578,13 +1578,15 @@ static void alc_init_auto_hp(struct hda_codec *codec) if (present == 3) 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, sizeof(cfg->speaker_pins)); 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, sizeof(cfg->hp_pins)); cfg->hp_outs = cfg->line_outs; @@ -1603,6 +1605,7 @@ static void alc_init_auto_hp(struct hda_codec *codec) spec->automute_mode = ALC_AUTOMUTE_PIN; } 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->speaker_pins[0]) { for (i = 0; i < cfg->line_outs; i++) { |