Skip to content

Commit

Permalink
ALSA: hda/realtek - Fix DAC assignments of multiple speakers
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
tiwai committed Oct 21, 2011
1 parent c146623 commit 716eef0
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions sound/pci/hda/patch_realtek.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit 716eef0

Please sign in to comment.