From 1f925d91616a0a6530a9d84907b1f3e75ae70fd6 Mon Sep 17 00:00:00 2001 From: Alexander Motin Date: Sun, 23 Nov 2008 20:19:35 +0000 Subject: [PATCH] Do not use soft PCM volume for digital outputs to allow SPDIF AC3 bypass to work. Soft PCM volume (and vchans) unable to bypass AC3 stream now. --- sys/dev/sound/pci/hda/hdac.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c index dfd6cb151385..0b71e8afa333 100644 --- a/sys/dev/sound/pci/hda/hdac.c +++ b/sys/dev/sound/pci/hda/hdac.c @@ -83,7 +83,7 @@ #include "mixer_if.h" -#define HDA_DRV_TEST_REV "20081122_0117" +#define HDA_DRV_TEST_REV "20081123_0118" SND_DECLARE_FILE("$FreeBSD$"); @@ -3549,8 +3549,8 @@ hdac_audio_ctl_ossmixer_init(struct snd_mixer *m) } } - /* Declare soft PCM and master volume if needed. */ - if (pdevinfo->play >= 0) { + /* Declare soft PCM volume if needed. */ + if (pdevinfo->play >= 0 && !pdevinfo->digital) { ctl = NULL; if ((mask & SOUND_MASK_PCM) == 0 || (devinfo->function.audio.quirks & HDA_QUIRK_SOFTPCMVOL)) { @@ -3580,8 +3580,12 @@ hdac_audio_ctl_ossmixer_init(struct snd_mixer *m) (softpcmvol == 1) ? "Forcing" : "Enabling"); ); } + } - if ((mask & SOUND_MASK_VOLUME) == 0) { + /* Declare master volume if needed. */ + if (pdevinfo->play >= 0) { + if ((mask & (SOUND_MASK_VOLUME | SOUND_MASK_PCM)) == + SOUND_MASK_PCM) { mask |= SOUND_MASK_VOLUME; mix_setparentchild(m, SOUND_MIXER_VOLUME, SOUND_MASK_PCM);