Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153323884
D56504.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D56504.diff
View Options
diff --git a/share/man/man4/pcm.4 b/share/man/man4/pcm.4
--- a/share/man/man4/pcm.4
+++ b/share/man/man4/pcm.4
@@ -23,7 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd February 15, 2025
+.Dd April 18, 2026
.Dt SOUND 4
.Os
.Sh NAME
@@ -270,6 +270,14 @@
.It 1
Always allow PROT_EXEC page mappings.
.El
+.It Va hw.snd.default.*
+Default mixer device volumes for newly attached devices,
+see
+.Xr mixer 8 .
+On attachment of a new
+.Xr snd 4
+device, the volume in the range 0\(en100 is applied to
+both left and right channel of the given mixer device.
.It Va hw.snd.default_auto
Automatically assign the default sound unit.
The following values are supported (default is 1):
diff --git a/sys/dev/sound/pcm/mixer.c b/sys/dev/sound/pcm/mixer.c
--- a/sys/dev/sound/pcm/mixer.c
+++ b/sys/dev/sound/pcm/mixer.c
@@ -87,6 +87,40 @@
static char* snd_mixernames[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES;
+static SYSCTL_NODE(_hw_snd, OID_AUTO, default, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
+ "default settings for newly attached mixer devices");
+
+static int handle_percent(SYSCTL_HANDLER_ARGS);
+
+#define MIXERDEFAULT_SYSCTL(name, i, desc) \
+ SYSCTL_PROC(_hw_snd_default, OID_AUTO, name, CTLTYPE_U16 | CTLFLAG_RW | CTLFLAG_MPSAFE, \
+ &snd_mixerdefaults[i], 0, handle_percent, "SU", desc)
+MIXERDEFAULT_SYSCTL(vol, SOUND_MIXER_VOLUME, "default master output level");
+MIXERDEFAULT_SYSCTL(bass, SOUND_MIXER_BASS, "default bass level");
+MIXERDEFAULT_SYSCTL(treble, SOUND_MIXER_TREBLE, "default treble level");
+MIXERDEFAULT_SYSCTL(synth, SOUND_MIXER_SYNTH, "default synthesizer input volume");
+MIXERDEFAULT_SYSCTL(pcm, SOUND_MIXER_PCM, "default audio device output volume level");
+MIXERDEFAULT_SYSCTL(speaker, SOUND_MIXER_SPEAKER, "default PC speaker volume level");
+MIXERDEFAULT_SYSCTL(line, SOUND_MIXER_LINE, "default line volume level");
+MIXERDEFAULT_SYSCTL(mic, SOUND_MIXER_MIC, "default microphone jack volume");
+MIXERDEFAULT_SYSCTL(cd, SOUND_MIXER_CD, "default CD audio input jack volume");
+MIXERDEFAULT_SYSCTL(mix, SOUND_MIXER_IMIX, "default recording monitor output volume");
+MIXERDEFAULT_SYSCTL(pcm2, SOUND_MIXER_ALTPCM, "default alternative codec device volume");
+MIXERDEFAULT_SYSCTL(rec, SOUND_MIXER_RECLEV, "default global recording level");
+MIXERDEFAULT_SYSCTL(igain, SOUND_MIXER_IGAIN, "default input gain");
+MIXERDEFAULT_SYSCTL(ogain, SOUND_MIXER_OGAIN, "default output gain");
+MIXERDEFAULT_SYSCTL(line1, SOUND_MIXER_LINE1, "default input source 1 (aux1) line level");
+MIXERDEFAULT_SYSCTL(line2, SOUND_MIXER_LINE2, "default input source 2 (aux2) line level");
+MIXERDEFAULT_SYSCTL(line3, SOUND_MIXER_LINE3, "default input source 3 (line) line level");
+MIXERDEFAULT_SYSCTL(dig1, SOUND_MIXER_DIGITAL1, "default digital input 1 volume");
+MIXERDEFAULT_SYSCTL(dig2, SOUND_MIXER_DIGITAL2, "default digital input 2 volume");
+MIXERDEFAULT_SYSCTL(dig3, SOUND_MIXER_DIGITAL3, "default digital input 3 volume");
+MIXERDEFAULT_SYSCTL(phin, SOUND_MIXER_PHONEIN, "default phone input volume");
+MIXERDEFAULT_SYSCTL(phout, SOUND_MIXER_PHONEOUT, "default phone output volume");
+MIXERDEFAULT_SYSCTL(video, SOUND_MIXER_VIDEO, "default video/TV (audio) input volume");
+MIXERDEFAULT_SYSCTL(radio, SOUND_MIXER_RADIO, "default radio input volume");
+MIXERDEFAULT_SYSCTL(monitor, SOUND_MIXER_MONITOR, "default monitor (usually mic) volume");
+
static d_open_t mixer_open;
static d_close_t mixer_close;
static d_ioctl_t mixer_ioctl;
@@ -133,6 +167,31 @@
mtx_lock(&(x)->lock); \
} while (0)
+/*
+ * Handle sysctls that set an uint16_t to a value between 0 and 100.
+ */
+static int
+handle_percent(SYSCTL_HANDLER_ARGS)
+{
+ uint16_t tmpin;
+ int error = 0;
+
+ error = SYSCTL_OUT(req, arg1, sizeof(uint16_t));
+ if (error || !req->newptr)
+ return (error);
+
+ error = SYSCTL_IN(req, &tmpin, sizeof(tmpin));
+ if (error)
+ return (error);
+
+ if (tmpin > 100)
+ return (EINVAL);
+
+ *(uint16_t *)arg1 = tmpin;
+
+ return (0);
+}
+
static int
mixer_set_softpcmvol(struct snd_mixer *m, struct snddev_info *d,
u_int left, u_int right)
@@ -1525,3 +1584,4 @@
{
return (&m->lock);
}
+
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Apr 21, 11:48 AM (1 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31811827
Default Alt Text
D56504.diff (4 KB)
Attached To
Mode
D56504: sound: add hw.snd.default.*
Attached
Detach File
Event Timeline
Log In to Comment