aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2011-10-21 09:07:42 -0400
committerTakashi Iwai <tiwai@suse.de>2011-10-21 09:07:42 -0400
commit716eef032cdc7604ae3a1a5ad80521f4afa4b3e6 (patch)
treecca8f48d2fb249d974127844e039916d13afdda0 /sound/pci
parentc146623884c471295c50c740787df6f86dbdd395 (diff)
ALSA: hda/realtek - Fix DAC assignments of multiple speakers
When a device has multiple speakers and still has the auto-mute support, the driver copies line_outs[] to speaker_outs[]. And then it tries to assign DACs for both. This ended up with the assignment only to the primary DAC to all speakers. This patch fixes the situation by checking the duplicated LO/SPK case appropriately. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/patch_realtek.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index f9d24c33ce93..f7762005db1e 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -2996,9 +2996,11 @@ static int alc_auto_fill_dac_nids(struct hda_codec *codec)
2996 } 2996 }
2997 } 2997 }
2998 2998
2999 alc_auto_fill_extra_dacs(codec, cfg->hp_outs, cfg->hp_pins, 2999 if (cfg->line_out_type != AUTO_PIN_HP_OUT)
3000 alc_auto_fill_extra_dacs(codec, cfg->hp_outs, cfg->hp_pins,
3000 spec->multiout.hp_out_nid); 3001 spec->multiout.hp_out_nid);
3001 alc_auto_fill_extra_dacs(codec, cfg->speaker_outs, cfg->speaker_pins, 3002 if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
3003 alc_auto_fill_extra_dacs(codec, cfg->speaker_outs, cfg->speaker_pins,
3002 spec->multiout.extra_out_nid); 3004 spec->multiout.extra_out_nid);
3003 3005
3004 return 0; 3006 return 0;
@@ -3315,6 +3317,8 @@ static void alc_auto_init_extra_out(struct hda_codec *codec)
3315 hda_nid_t pin, dac; 3317 hda_nid_t pin, dac;
3316 3318
3317 for (i = 0; i < spec->autocfg.hp_outs; i++) { 3319 for (i = 0; i < spec->autocfg.hp_outs; i++) {
3320 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
3321 break;
3318 pin = spec->autocfg.hp_pins[i]; 3322 pin = spec->autocfg.hp_pins[i];
3319 if (!pin) 3323 if (!pin)
3320 break; 3324 break;
@@ -3328,6 +3332,8 @@ static void alc_auto_init_extra_out(struct hda_codec *codec)
3328 alc_auto_set_output_and_unmute(codec, pin, PIN_HP, dac); 3332 alc_auto_set_output_and_unmute(codec, pin, PIN_HP, dac);
3329 } 3333 }
3330 for (i = 0; i < spec->autocfg.speaker_outs; i++) { 3334 for (i = 0; i < spec->autocfg.speaker_outs; i++) {
3335 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
3336 break;
3331 pin = spec->autocfg.speaker_pins[i]; 3337 pin = spec->autocfg.speaker_pins[i];
3332 if (!pin) 3338 if (!pin)
3333 break; 3339 break;