aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda
diff options
context:
space:
mode:
authorDavid Henningsson <david.henningsson@canonical.com>2014-10-16 09:33:45 -0400
committerTakashi Iwai <tiwai@suse.de>2014-10-20 07:37:50 -0400
commit03ad6a8c93b6df2d65c305b5b5f9474068b45bfb (patch)
tree90f53699d3a5ef3d513c18ef1b92c950eeaec2ed /sound/pci/hda
parentc8b00fd2f4c504a564adcad5b8bd6952ab850b02 (diff)
ALSA: hda - Fix "PCM" name being used on one DAC when there are two DACs
In the scenario where there is one "Line Out", one "Speaker" and one "Headphone", and there are only two DACs, two outputs will share a DAC. Currently any mixer on such a DAC will get the "PCM" name, which is misleading. Instead use "Headphone+LO" or "Speaker+LO" to better specify what the volume actually controls. [fixed missing slave string additions by tiwai] Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda')
-rw-r--r--sound/pci/hda/hda_generic.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index 64220c08bd98..dc13cce70932 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -1038,6 +1038,19 @@ static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
1038 break; 1038 break;
1039 *index = ch; 1039 *index = ch;
1040 return "Headphone"; 1040 return "Headphone";
1041 case AUTO_PIN_LINE_OUT:
1042 /* This deals with the case where we have two DACs and
1043 * one LO, one HP and one Speaker */
1044 if (!ch && cfg->speaker_outs && cfg->hp_outs) {
1045 bool hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
1046 bool spk_lo_shared = !path_has_mixer(codec, spec->speaker_paths[0], ctl_type);
1047 if (hp_lo_shared && spk_lo_shared)
1048 return spec->vmaster_mute.hook ? "PCM" : "Master";
1049 if (hp_lo_shared)
1050 return "Headphone+LO";
1051 if (spk_lo_shared)
1052 return "Speaker+LO";
1053 }
1041 } 1054 }
1042 1055
1043 /* for a single channel output, we don't have to name the channel */ 1056 /* for a single channel output, we don't have to name the channel */
@@ -4524,7 +4537,7 @@ static const char * const slave_pfxs[] = {
4524 "CLFE", "Bass Speaker", "PCM", 4537 "CLFE", "Bass Speaker", "PCM",
4525 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side", 4538 "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4526 "Headphone Front", "Headphone Surround", "Headphone CLFE", 4539 "Headphone Front", "Headphone Surround", "Headphone CLFE",
4527 "Headphone Side", 4540 "Headphone Side", "Headphone+LO", "Speaker+LO",
4528 NULL, 4541 NULL,
4529}; 4542};
4530 4543