sound: Retire SD_F_VPC and related settings

VPC is enabled by default, and the only way to turn it off is through a
loader hint. That being said, there is no benefit to turning it off in
the first place, because VPC provides more fine-grained volume control,
as well as access to the SNDCTL_DSP_[SET|GET][REC|PLAY]VOL ioctls and
dsp_ioctl_channel().

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
This commit is contained in:
Christos Margiolis committed 2026-06-20 20:32:21 +03:00
1 parent f879eb3feb
commit f70a687bb0
5 files changed
+6 -30

No files matched your search

+1 -21
View File
@@ -23,7 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd June 17, 2026
.Dd June 20, 2026
.Dt SOUND 4
.Os
.Sh NAME
@@ -212,26 +212,6 @@ application, without touching the master
.Nm
volume.
This is sometimes referred to as Volume Per Channel (VPC).
The VPC feature is enabled by default.
.Ss Loader Tunables
The following loader tunables are used to set driver configuration at the
.Xr loader 8
prompt before booting the kernel, or they can be stored in
.Pa /boot/loader.conf
in order to automatically set them before booting the kernel.
It is also possible to use
.Xr kenv 1
to change these tunables before loading the
.Nm
driver.
The following tunables can not be changed during runtime using
.Xr sysctl 8 .
.Bl -tag -width indent
.It Va hint.pcm.%d.vpc
Set to 1 or 0 to explicitly enable (1) or disable (0) the VPC feature.
This tunable is undefined by default.
VPC is however enabled by default.
.El
.Ss Runtime Configuration
There are a number of
.Xr sysctl 8
+1 -1
View File
@@ -542,7 +542,7 @@ dsp_ioctl_channel(struct dsp_cdevpriv *priv, struct pcm_channel *ch,
int j, left, right, center, mute;
d = priv->sc;
if (!PCM_REGISTERED(d) || !(pcm_getflags(d->dev) & SD_F_VPC))
if (!PCM_REGISTERED(d))
return (-1);
PCM_UNLOCKASSERT(d);
+2 -2
View File
@@ -714,8 +714,8 @@ feeder_chain(struct pcm_channel *c)
cdesc.dummy = 1;
if ((softfmt & AFMT_CONVERTIBLE) &&
(((d->flags & SD_F_VPC) && !(c->flags & CHN_F_HAS_VCHAN)) ||
(!(d->flags & SD_F_VPC) && (d->flags & SD_F_SOFTPCMVOL) &&
(!(c->flags & CHN_F_HAS_VCHAN) ||
((d->flags & SD_F_SOFTPCMVOL) &&
!(c->flags & CHN_F_VIRTUAL))))
cdesc.use_volume = 1;
-4
View File
@@ -355,10 +355,6 @@ pcm_init(device_t dev, void *devinfo)
cv_init(&d->cv, device_get_nameunit(dev));
i = 0;
if (resource_int_value(device_get_name(dev), device_get_unit(dev),
"vpc", &i) != 0 || i != 0)
d->flags |= SD_F_VPC;
if (resource_int_value(device_get_name(dev), device_get_unit(dev),
"bitperfect", &i) == 0 && i != 0)
d->flags |= SD_F_BITPERFECT;
+2 -2
View File
@@ -104,7 +104,7 @@ struct snd_mixer;
#define SD_F_MPSAFE 0x00000010
#define SD_F_REGISTERED 0x00000020
#define SD_F_BITPERFECT 0x00000040
#define SD_F_VPC 0x00000080 /* volume-per-channel */
/* unused 0x00000080 */
/* unused 0x00000100 */
#define SD_F_EQ_ENABLED 0x00000200 /* EQ enabled */
/* unused 0x00000400 */
@@ -120,7 +120,7 @@ struct snd_mixer;
"\005MPSAFE" \
"\006REGISTERED" \
"\007BITPERFECT" \
"\010VPC" \
/* "\010 */ \
/* "\011 */ \
"\012EQ_ENABLED" \
/* "\013 */ \