mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-28 11:25:21 +01:00
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:
1 parent
f879eb3feb
commit
f70a687bb0
5 files changed
+6
-30
No files matched your search
+1
-21
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */ \
|
||||
|
||||
Reference in new issue
Block a user