summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2010-07-12 16:27:24 +0200
committerTakashi Iwai <tiwai@suse.de>2010-07-12 17:25:27 +0200
commit395c61d19621e80b763810cc988416dc1b6bfd3e (patch)
treebcc953c5284c1df6b9281bcdf5755662dcb7e545 /sound
parentd32d552e665dc07384208108165592d0b524dba2 (diff)
downloadop-kernel-dev-395c61d19621e80b763810cc988416dc1b6bfd3e.zip
op-kernel-dev-395c61d19621e80b763810cc988416dc1b6bfd3e.tar.gz
ALSA: via82xx: allow changing the initial DXS volume
As per-stream volume controls, the DXS controls are not intended to adjust the overall sound level and so are initialized every time a stream is opened. However, there are special situations where one wants to reduce the overall volume in the digital domain, i.e., before the AC'97 codec's PCM volume control. To allow this, add a module parameter that sets the initial DXS volume. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Tested-by: Soeren D. Schulze <soeren.d.schulze@gmx.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/via82xx.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c
index 7e494b6..8c5f8b5 100644
--- a/sound/pci/via82xx.c
+++ b/sound/pci/via82xx.c
@@ -85,6 +85,7 @@ static int joystick;
static int ac97_clock = 48000;
static char *ac97_quirk;
static int dxs_support;
+static int dxs_init_volume = 31;
static int nodelay;
module_param(index, int, 0444);
@@ -103,6 +104,8 @@ module_param(ac97_quirk, charp, 0444);
MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware.");
module_param(dxs_support, int, 0444);
MODULE_PARM_DESC(dxs_support, "Support for DXS channels (0 = auto, 1 = enable, 2 = disable, 3 = 48k only, 4 = no VRA, 5 = enable any sample rate)");
+module_param(dxs_init_volume, int, 0644);
+MODULE_PARM_DESC(dxs_init_volume, "initial DXS volume (0-31)");
module_param(nodelay, int, 0444);
MODULE_PARM_DESC(nodelay, "Disable 500ms init delay");
@@ -1245,8 +1248,10 @@ static int snd_via8233_playback_open(struct snd_pcm_substream *substream)
return err;
stream = viadev->reg_offset / 0x10;
if (chip->dxs_controls[stream]) {
- chip->playback_volume[stream][0] = 0;
- chip->playback_volume[stream][1] = 0;
+ chip->playback_volume[stream][0] =
+ VIA_DXS_MAX_VOLUME - (dxs_init_volume & 31);
+ chip->playback_volume[stream][1] =
+ VIA_DXS_MAX_VOLUME - (dxs_init_volume & 31);
chip->dxs_controls[stream]->vd[0].access &=
~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE |
OpenPOWER on IntegriCloud