git: e9df33a044ec - stable/15 - sound: Retire SD_F_VPC and related settings

From: Christos Margiolis <christos_at_FreeBSD.org>
Date: Sat, 27 Jun 2026 09:55:56 UTC
The branch stable/15 has been updated by christos:

URL: https://cgit.FreeBSD.org/src/commit/?id=e9df33a044ecd34f4b007f70a1416b0d0544321e

commit e9df33a044ecd34f4b007f70a1416b0d0544321e
Author:     Christos Margiolis <christos@FreeBSD.org>
AuthorDate: 2026-06-20 17:32:21 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2026-06-27 09:55:19 +0000

    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
    
    (cherry picked from commit f70a687bb071cdee60dc7420d75fa1dd122af51a)
---
 share/man/man4/pcm.4             | 22 +---------------------
 sys/dev/sound/pcm/dsp.c          |  2 +-
 sys/dev/sound/pcm/feeder_chain.c |  4 ++--
 sys/dev/sound/pcm/sound.c        |  4 ----
 sys/dev/sound/pcm/sound.h        |  4 ++--
 5 files changed, 6 insertions(+), 30 deletions(-)

diff --git a/share/man/man4/pcm.4 b/share/man/man4/pcm.4
index 14d7e52eed5d..7a0059f43f73 100644
--- 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 May 15, 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
diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c
index 7e4b4ae2df24..0557b03484dc 100644
--- a/sys/dev/sound/pcm/dsp.c
+++ b/sys/dev/sound/pcm/dsp.c
@@ -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);
diff --git a/sys/dev/sound/pcm/feeder_chain.c b/sys/dev/sound/pcm/feeder_chain.c
index 35bb12a062ec..1dbdf2fcc0e4 100644
--- a/sys/dev/sound/pcm/feeder_chain.c
+++ b/sys/dev/sound/pcm/feeder_chain.c
@@ -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;
 
diff --git a/sys/dev/sound/pcm/sound.c b/sys/dev/sound/pcm/sound.c
index 235142eb5209..101b38367873 100644
--- a/sys/dev/sound/pcm/sound.c
+++ b/sys/dev/sound/pcm/sound.c
@@ -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;
diff --git a/sys/dev/sound/pcm/sound.h b/sys/dev/sound/pcm/sound.h
index 06de95e461ec..becd787a456a 100644
--- a/sys/dev/sound/pcm/sound.h
+++ b/sys/dev/sound/pcm/sound.h
@@ -101,7 +101,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 */
@@ -117,7 +117,7 @@ struct snd_mixer;
 				"\005MPSAFE"				\
 				"\006REGISTERED"			\
 				"\007BITPERFECT"			\
-				"\010VPC"				\
+				/* "\010 */				\
 				/* "\011 */				\
 				"\012EQ_ENABLED"			\
 				/* "\013 */				\