aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2011-06-20 06:47:45 -0400
committerTakashi Iwai <tiwai@suse.de>2011-06-20 10:24:12 -0400
commit370bafbdae3d78c9081ebe3028a3ff5f0e91357b (patch)
tree001eba76685c47454edac41d859e5c77220f889a
parent4a918ffeaadd6a2269b9c6575478c102382c7702 (diff)
ALSA: hda - Create virtual-master control for VIA codecs
Now let's add the missing Master control to VIA codecs. Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/pci/hda/patch_via.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index 1edcd3221c98..deb33ae109c8 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -1308,6 +1308,31 @@ static const struct hda_pcm_stream via_pcm_digital_capture = {
1308 .channels_max = 2, 1308 .channels_max = 2,
1309}; 1309};
1310 1310
1311/*
1312 * slave controls for virtual master
1313 */
1314static const char * const via_slave_vols[] = {
1315 "Front Playback Volume",
1316 "Surround Playback Volume",
1317 "Center Playback Volume",
1318 "LFE Playback Volume",
1319 "Side Playback Volume",
1320 "Headphone Playback Volume",
1321 "Speaker Playback Volume",
1322 NULL,
1323};
1324
1325static const char * const via_slave_sws[] = {
1326 "Front Playback Switch",
1327 "Surround Playback Switch",
1328 "Center Playback Switch",
1329 "LFE Playback Switch",
1330 "Side Playback Switch",
1331 "Headphone Playback Switch",
1332 "Speaker Playback Switch",
1333 NULL,
1334};
1335
1311static int via_build_controls(struct hda_codec *codec) 1336static int via_build_controls(struct hda_codec *codec)
1312{ 1337{
1313 struct via_spec *spec = codec->spec; 1338 struct via_spec *spec = codec->spec;
@@ -1343,6 +1368,23 @@ static int via_build_controls(struct hda_codec *codec)
1343 return err; 1368 return err;
1344 } 1369 }
1345 1370
1371 /* if we have no master control, let's create it */
1372 if (!snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
1373 unsigned int vmaster_tlv[4];
1374 snd_hda_set_vmaster_tlv(codec, spec->multiout.dac_nids[0],
1375 HDA_OUTPUT, vmaster_tlv);
1376 err = snd_hda_add_vmaster(codec, "Master Playback Volume",
1377 vmaster_tlv, via_slave_vols);
1378 if (err < 0)
1379 return err;
1380 }
1381 if (!snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
1382 err = snd_hda_add_vmaster(codec, "Master Playback Switch",
1383 NULL, via_slave_sws);
1384 if (err < 0)
1385 return err;
1386 }
1387
1346 /* assign Capture Source enums to NID */ 1388 /* assign Capture Source enums to NID */
1347 kctl = snd_hda_find_mixer_ctl(codec, "Input Source"); 1389 kctl = snd_hda_find_mixer_ctl(codec, "Input Source");
1348 for (i = 0; kctl && i < kctl->count; i++) { 1390 for (i = 0; kctl && i < kctl->count; i++) {