From nobody Wed Jun 3 08:23:20 2026 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gVggr5JSQz6gJft for ; Wed, 03 Jun 2026 08:23:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gVggr4Mx0z3gKh for ; Wed, 03 Jun 2026 08:23:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1780475000; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Kjn8MAGMa6Stq1zo0IC6MsDJrIGre03LHcXl/Jf6CBk=; b=mS/SobKJEYyuFytcMZuWMIdfcRZshWunnOGctYDCBc6ySXQ+OjxQJZ4W8D899721nC/cSv wyO9L2jA0Y1K02C34W9FxEOAnEYWTwwTUVzkV98bjadjJ8waRX0pc4Usmy3qUpE7iCwp4I 93UWwdPjjOVvMF2Wr+1LnHGw3ppXoQLhTb8dJNBpNSdjxfBZQ6cs6Krkk5fX9b8vW/m36U UUwV5ZIu/7PvGmOBDyh/oBvHtpcTjJRTw4ytY0fb3kcRxfEuH99vcgxXmqORsDprZdiS6h IgfVsfbtYU+M5XfPVAcam5Ad6OI0732djyyYKDpjTk+9Jv8gsRdv61TOEZCY6Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1780475000; a=rsa-sha256; cv=none; b=C9wmh1tQpNYWPVUtgz1WS3/SRa8gMFjDB6B7Z56SFYj7jViH3V4hmk34jE8Xj1H1AQrX9g SlMworCYtbwybdFBd86GNLFqJe7+ckAQOeMSR1hROUy6Tjd8wFXRemRje/e2qXDzhJqpiK 52yVcZoB8BIMNY/Li4yrUgk3Dp2+im4nDumZ/CMuPyJB5BO4Ad6QLCBSIVYZIC8WUkRpsD P1N2unip3Wo7TV8eOlSvohdOUN4/4AGjx4TBcxdijD5ULqwIUgi7pbCPMl+XCCTL59RXQl r+30PzfcPaTokQ+pe88ylmX1Kuyfmt+9oHYHlEZS4Ocw/Ym0k2YvtUyhpVL3dg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1780475000; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Kjn8MAGMa6Stq1zo0IC6MsDJrIGre03LHcXl/Jf6CBk=; b=LHDL/bILsYGUFKkcuYr6k9TMrzhEU6WpcwpeozA42EEb9bmL8ItYUkPwpcuBtYE4C+QcA5 D/Ul31/Rc1pIX1puudrfHXn3n2er6ot2YXc2tryLSo6C3Qf2a8ICY2w0r8gN/0BE/9tTo3 n40XF3XK+oqb5Ov5VU7e+a+uPk7Jk8zz2YO9X44eVxJtf80HbQ2AWayCzxy5/5sxOLzz68 2YcYFdn0hoeZyO1dQ85OYbPirpQzPbEAvQetq1pxVTcA3RxPIRpmPDzYAUNS7qfWkMmHNn AGVS2DGMPOFuRVuc42AMRc2GtYJzit5rse2agVfSjloyGxoTCo8WlnbX3VrDJA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gVggr3tCTz13Kj for ; Wed, 03 Jun 2026 08:23:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3a949 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 03 Jun 2026 08:23:20 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Christos Margiolis Subject: git: 65029fee7837 - stable/15 - sndctl(8): Implement EQ controls List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: christos X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 65029fee78371398e0d978a0f08307c1dd23f7b8 Auto-Submitted: auto-generated Date: Wed, 03 Jun 2026 08:23:20 +0000 Message-Id: <6a1fe478.3a949.7bf2ac84@gitrepo.freebsd.org> The branch stable/15 has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=65029fee78371398e0d978a0f08307c1dd23f7b8 commit 65029fee78371398e0d978a0f08307c1dd23f7b8 Author: Christos Margiolis AuthorDate: 2026-04-17 16:10:48 +0000 Commit: Christos Margiolis CommitDate: 2026-06-03 08:22:23 +0000 sndctl(8): Implement EQ controls Sponsored by: The FreeBSD Foundation MFC after: 1 week Pull Request: https://ron-dev.freebsd.org/FreeBSD/src/pulls/15 (cherry picked from commit 8b8dbc6bbe391fd95a19bd1d9f0aac47bac085f8) --- usr.sbin/sndctl/sndctl.8 | 4 +++- usr.sbin/sndctl/sndctl.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/usr.sbin/sndctl/sndctl.8 b/usr.sbin/sndctl/sndctl.8 index 73414bd95325..44dcb791ca51 100644 --- a/usr.sbin/sndctl/sndctl.8 +++ b/usr.sbin/sndctl/sndctl.8 @@ -27,7 +27,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd December 2, 2025 +.Dd April 17, 2026 .Dt SNDCTL 8 .Os .Sh NAME @@ -82,6 +82,8 @@ The device controls are as follows: .It bitperfect Ta Boolean Ta Read/Write Ta Bit-perfect mode enabled .It autoconv Ta Boolean Ta Read/Write Ta Auto-conversions enabled .It realtime Ta Boolean Ta Read/Write Ta Real-time mode enabled +.It eq Ta Boolean Ta Read/Write Ta Equalization enabled +.It eq_preamp Ta String Ta Read/Write Ta Equalization preamp value (in dB) .It play Ta Group Ta Read Ta Playback properties .It play.format Ta String Ta Read/Write Ta Playback format .It play.rate Ta Number Ta Read/Write Ta Playback sample rate diff --git a/usr.sbin/sndctl/sndctl.c b/usr.sbin/sndctl/sndctl.c index bbc2da6a4ab9..778643a2a978 100644 --- a/usr.sbin/sndctl/sndctl.c +++ b/usr.sbin/sndctl/sndctl.c @@ -97,6 +97,8 @@ struct snd_dev { int bitperfect; int realtime; int autoconv; + int eq; + char eq_preamp[BUFSIZ]; struct { char format[FMTSTR_LEN]; int rate; @@ -130,6 +132,8 @@ struct map { static int mod_bitperfect(struct snd_dev *, void *); static int mod_autoconv(struct snd_dev *, void *); static int mod_realtime(struct snd_dev *, void *); +static int mod_eq(struct snd_dev *, void *); +static int mod_eq_preamp(struct snd_dev *, void *); static int mod_play_vchans(struct snd_dev *, void *); static int mod_play_rate(struct snd_dev *, void *); static int mod_play_format(struct snd_dev *, void *); @@ -149,6 +153,8 @@ static struct snd_ctl dev_ctls[] = { { "bitperfect", F(bitperfect), NUM, mod_bitperfect }, { "autoconv", F(autoconv), NUM, mod_autoconv }, { "realtime", F(realtime), NUM, mod_realtime }, + { "eq", F(eq), NUM, mod_eq }, + { "eq_preamp", F(eq_preamp), STR, mod_eq_preamp }, { "play", F(play), GRP, NULL }, { "play.format", F(play.format), STR, mod_play_format }, { "play.rate", F(play.rate), NUM, mod_play_rate }, @@ -436,6 +442,7 @@ read_dev(char *path) struct sndstioc_nv_arg arg; struct snd_dev *dp = NULL; struct snd_chan *ch; + char buf[64]; size_t nitems, nchans, i, j; int fd, caps, unit, t1, t2, t3; @@ -557,6 +564,14 @@ read_dev(char *path) if (t1 == 0 && t2 == 0 && t3 == 0) dp->realtime = 1; + snprintf(buf, sizeof(buf), "dev.pcm.%d.eq", dp->unit); + if (sysctl_int(buf, NULL, &dp->eq)) + xo_err(1, "%s: sysctl", dp->name); + + snprintf(buf, sizeof(buf), "dev.pcm.%d.eq_preamp", dp->unit); + if (sysctl_str(buf, NULL, dp->eq_preamp, sizeof(dp->eq_preamp))) + xo_err(1, "%s: sysctl", dp->name); + if (!nvlist_exists(nvlist_get_nvlist(di[i], SNDST_DSPS_PROVIDER_INFO), SNDST_DSPS_SOUND4_CHAN_INFO)) xo_errx(1, "%s: channel info list empty", dp->name); @@ -842,6 +857,32 @@ mod_realtime(struct snd_dev *dp, void *arg) return (rc); } +static int +mod_eq(struct snd_dev *dp, void *arg) +{ + char buf[64]; + + if (dp->from_user) + return (-1); + + snprintf(buf, sizeof(buf), "dev.pcm.%d.eq", dp->unit); + + return (sysctl_int(buf, arg, &dp->eq)); +} + +static int +mod_eq_preamp(struct snd_dev *dp, void *arg) +{ + char buf[64]; + + if (dp->from_user) + return (-1); + + snprintf(buf, sizeof(buf), "dev.pcm.%d.eq_preamp", dp->unit); + + return (sysctl_str(buf, arg, dp->eq_preamp, sizeof(dp->eq_preamp))); +} + static int mod_play_vchans(struct snd_dev *dp, void *arg) {