summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2011-10-21 15:07:42 +0200
committerTakashi Iwai <tiwai@suse.de>2011-10-21 15:07:42 +0200
commit716eef032cdc7604ae3a1a5ad80521f4afa4b3e6 (patch)
treecca8f48d2fb249d974127844e039916d13afdda0
parentc146623884c471295c50c740787df6f86dbdd395 (diff)
downloadop-kernel-dev-716eef032cdc7604ae3a1a5ad80521f4afa4b3e6.zip
op-kernel-dev-716eef032cdc7604ae3a1a5ad80521f4afa4b3e6.tar.gz
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>
-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 f9d24c3..f776200 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)
}
}
- alc_auto_fill_extra_dacs(codec, cfg->hp_outs, cfg->hp_pins,
+ if (cfg->line_out_type != AUTO_PIN_HP_OUT)
+ alc_auto_fill_extra_dacs(codec, cfg->hp_outs, cfg->hp_pins,
spec->multiout.hp_out_nid);
- alc_auto_fill_extra_dacs(codec, cfg->speaker_outs, cfg->speaker_pins,
+ if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
+ alc_auto_fill_extra_dacs(codec, cfg->speaker_outs, cfg->speaker_pins,
spec->multiout.extra_out_nid);
return 0;
@@ -3315,6 +3317,8 @@ static void alc_auto_init_extra_out(struct hda_codec *codec)
hda_nid_t pin, dac;
for (i = 0; i < spec->autocfg.hp_outs; i++) {
+ if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
+ break;
pin = spec->autocfg.hp_pins[i];
if (!pin)
break;
@@ -3328,6 +3332,8 @@ static void alc_auto_init_extra_out(struct hda_codec *codec)
alc_auto_set_output_and_unmute(codec, pin, PIN_HP, dac);
}
for (i = 0; i < spec->autocfg.speaker_outs; i++) {
+ if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
+ break;
pin = spec->autocfg.speaker_pins[i];
if (!pin)
break;
OpenPOWER on IntegriCloud