summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjosef <josef@FreeBSD.org>2004-06-20 15:38:11 +0000
committerjosef <josef@FreeBSD.org>2004-06-20 15:38:11 +0000
commit95e075acdf0e7f3132fc69e2b3c182153cacb0f7 (patch)
treec1358091d9861d393106739061b1e4de7feac00f
parentb4270222737075920906beecd1fa07c11dc87a36 (diff)
downloadFreeBSD-src-95e075acdf0e7f3132fc69e2b3c182153cacb0f7.zip
FreeBSD-src-95e075acdf0e7f3132fc69e2b3c182153cacb0f7.tar.gz
Enable pcm to read kenv variables to set default values for
mixer channels. e.g.: pcm0.line=0 to muten input line per default. Approved by: cg Reviewed by: le, stefanf Requested by: Eugene Grosbein <eugen@grosbein.pp.ru> (implicitly) PR: kern/63771
-rw-r--r--sys/dev/sound/pcm/mixer.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/dev/sound/pcm/mixer.c b/sys/dev/sound/pcm/mixer.c
index 135a628..7075a00 100644
--- a/sys/dev/sound/pcm/mixer.c
+++ b/sys/dev/sound/pcm/mixer.c
@@ -25,6 +25,7 @@
*/
#include <dev/sound/pcm/sound.h>
+#include <sys/kernel.h>
#include "mixer_if.h"
@@ -189,9 +190,10 @@ mixer_init(device_t dev, kobj_class_t cls, void *devinfo)
{
struct snddev_info *snddev;
struct snd_mixer *m;
+ char devname[20];
u_int16_t v;
struct cdev *pdev;
- int i, unit;
+ int i, unit, val;
m = (struct snd_mixer *)kobj_create(cls, M_MIXER, M_WAITOK | M_ZERO);
snprintf(m->name, MIXER_NAMELEN, "%s:mixer", device_get_nameunit(dev));
@@ -204,7 +206,14 @@ mixer_init(device_t dev, kobj_class_t cls, void *devinfo)
goto bad;
for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
- v = snd_mixerdefaults[i];
+ snprintf(devname, sizeof(devname), "%s.%s", device_get_nameunit(dev), snd_mixernames[i]);
+ TUNABLE_INT_FETCH(devname, &val);
+
+ if (val >= 0 && val <= 100)
+ v = (u_int16_t) val;
+ else
+ v = snd_mixerdefaults[i];
+
mixer_set(m, i, v | (v << 8));
}
OpenPOWER on IntegriCloud