From nobody Sat Sep 05 23:32:24 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 4hcqPP36vYz6rJjB for ; Sat, 05 Sep 2026 23:32:25 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hcqPN658cz47ld for ; Sat, 05 Sep 2026 23:32:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788651144; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=2A+ePcofd3bDJYlFcSISaNSr8cRCBcOcQtuknqenjO0=; b=AMr1WxCUpRLJe+zcxYIRl/LUlG6+B47AM6gHv/GhUyeMyqHZNgwLgk3apxq+s6g8cMb4K5 //azg+FKVLuPcH7VjqDelWg3ru1WsmocQ8aEnwaiH69Lq9BgO04xv3GsgrN+Lsw6UbcR/6 PgfsqsXEpiuQOBoYK5+YEmBSyncxbJE5cGe5ZaRRkT1N0haJ8LS72pDneofZ41vNErwQxZ ceAGaWFicIuFFy9hfilic4u+7n8u7Fs7Gg+GHSuosP8gERsJhAzHws3b1rNyi6gOKLfY6O SOmUfJJCAOIDrj1TtFIPehD5RWZ3gJDcplKregmpgGe8IRgpvL+vvfM8I6yOVg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788651144; a=rsa-sha256; cv=none; b=uZDmrOJWj2UqJPOK0NJvpsV0zvqpnDgDEpXjATTWm/Ogh/HiZ5J3Skzexqg3Hgn0W33ENW gzAxG1hOePViB9/ebBTz8p4bHA2RNGLTO0uxVcRCv5sJMPvM9NASlylQh8jWoHOp9Dlj4o qVz5UQivT7FciIyBcA02uBa6qbV6VcIW2wxJjzoSfqlZt5/mloKinVaCPOuzbcWoB8LcgX FApQ2KkS17F7z+qnoxpZCVsgxk//DXIAgf/9H7W8zw3RfY2OXvtWjMzJcIT7FAcZ0Gaern pM30YTvtrbO//Y0fwC/gEdDUhSxU6zM0x6W9fiqGxg1Pt0yxbapBEq4jll2gFw== 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=1788651144; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=2A+ePcofd3bDJYlFcSISaNSr8cRCBcOcQtuknqenjO0=; b=MQoZ+N0SDyoZGyk+22KiUf3R6Jlmyjt8wdrWtuMzLs9w8N1gT6RBWVzSF64S/vPhuGTTnP ooPfLCGMVVPiWzAzL8CLClTbs/ydMYrP1ZzItLUCBtGvi91YAWOwbJ1phWXJRhk/fPGSFZ 5rSXSCurQvuc4VJbR7KtttrL3waxS9KOzebdeuv+xqGGh+4xdwHOSMBJU7+/lR9FShY/2i hUVzQxXYST96fHflkMIoUHtiuegYd8ETV8v5zrBJlGEc8GwSZX14cJoj6kqG4VnYyvCOrN G5MmeEjqQSKOn4PieUVn+brEHPQPYnPyTy3+RJpdLqr3FLmJxxXZJbq4x9Rl6g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hcqPN4SPtz154S for ; Sat, 05 Sep 2026 23:32:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 231b1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 05 Sep 2026 23:32:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Abdelkader Boudih From: Enji Cooper Subject: git: 5a7ff2eb7d0d - stable/14 - asmc: Refactor sensor detection and sysctl registration 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: ngie X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 5a7ff2eb7d0dcc7d8b7f08663fc2e65ac7ef1ebe Auto-Submitted: auto-generated Date: Sat, 05 Sep 2026 23:32:24 +0000 Message-Id: <6a9ca688.231b1.b456b1f@gitrepo.freebsd.org> The branch stable/14 has been updated by ngie: URL: https://cgit.FreeBSD.org/src/commit/?id=5a7ff2eb7d0dcc7d8b7f08663fc2e65ac7ef1ebe commit 5a7ff2eb7d0dcc7d8b7f08663fc2e65ac7ef1ebe Author: Abdelkader Boudih AuthorDate: 2026-06-25 02:06:34 +0000 Commit: Enji Cooper CommitDate: 2026-09-05 23:31:46 +0000 asmc: Refactor sensor detection and sysctl registration Replace repeated per-sensor-type blocks for voltage, current, power, and ambient light sensors with table-driven loops. Reviewed by: ngie, adrian Differential Revision: https://reviews.freebsd.org/D57595 (cherry picked from commit 104b311a03e45ebb8fd7a93e4ac26644bbae9bae) --- sys/dev/asmc/asmc.c | 147 ++++++++++++++++++++++++---------------------------- 1 file changed, 67 insertions(+), 80 deletions(-) diff --git a/sys/dev/asmc/asmc.c b/sys/dev/asmc/asmc.c index b55196e69c15..055f98e06892 100644 --- a/sys/dev/asmc/asmc.c +++ b/sys/dev/asmc/asmc.c @@ -1659,32 +1659,36 @@ asmc_detect_sensors(device_t dev) } } - /* Voltage sensors: V..W range */ - error = asmc_key_search(dev, "V\0\0\0", &start); - if (error == 0) - error = asmc_key_search(dev, "W\0\0\0", &end); - if (error == 0) - asmc_scan_sensor_range(dev, start, end, 'V', - &sc->sc_voltage_count, sc->sc_voltage_sensors, - ASMC_MAX_SENSORS); - - /* Current sensors: I..J range */ - error = asmc_key_search(dev, "I\0\0\0", &start); - if (error == 0) - error = asmc_key_search(dev, "J\0\0\0", &end); - if (error == 0) - asmc_scan_sensor_range(dev, start, end, 'I', - &sc->sc_current_count, sc->sc_current_sensors, - ASMC_MAX_SENSORS); - - /* Power sensors: P..Q range */ - error = asmc_key_search(dev, "P\0\0\0", &start); - if (error == 0) - error = asmc_key_search(dev, "Q\0\0\0", &end); - if (error == 0) - asmc_scan_sensor_range(dev, start, end, 'P', - &sc->sc_power_count, sc->sc_power_sensors, - ASMC_MAX_SENSORS); + /* Voltage/Current/Power sensors */ + static const struct { + const char *range_start; + const char *range_end; + char prefix; + } sensor_ranges[] = { + { "V\0\0\0", "W\0\0\0", 'V' }, /* Voltage */ + { "I\0\0\0", "J\0\0\0", 'I' }, /* Current */ + { "P\0\0\0", "Q\0\0\0", 'P' }, /* Power */ + }; + static const size_t nsensor_ranges = nitems(sensor_ranges); + + int *sensor_counts[] = { + &sc->sc_voltage_count, &sc->sc_current_count, + &sc->sc_power_count }; + char **sensor_arrays[] = { + sc->sc_voltage_sensors, sc->sc_current_sensors, + sc->sc_power_sensors }; + + for (unsigned int r = 0; r < nsensor_ranges; r++) { + error = asmc_key_search(dev, sensor_ranges[r].range_start, + &start); + if (error == 0) + error = asmc_key_search(dev, + sensor_ranges[r].range_end, &end); + if (error == 0) + asmc_scan_sensor_range(dev, start, end, + sensor_ranges[r].prefix, sensor_counts[r], + sensor_arrays[r], ASMC_MAX_SENSORS); + } /* Ambient light sensors: AL* in A..B range */ error = asmc_key_search(dev, "A\0\0\0", &start); @@ -1722,63 +1726,46 @@ asmc_detect_sensors(device_t dev) /* Register sysctls for detected sensors */ sysctlctx = device_get_sysctl_ctx(dev); - /* Voltage sensors */ - if (sc->sc_voltage_count > 0) { - tree_node = SYSCTL_ADD_NODE(sysctlctx, - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, - "voltage", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "Voltage sensors (millivolts)"); - - for (i = 0; i < sc->sc_voltage_count; i++) { - SYSCTL_ADD_PROC(sysctlctx, SYSCTL_CHILDREN(tree_node), - OID_AUTO, sc->sc_voltage_sensors[i], - CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, - dev, ('V' << 8) | i, asmc_sensor_sysctl, "I", - "Voltage sensor (millivolts)"); - } - } - - /* Current sensors */ - if (sc->sc_current_count > 0) { - tree_node = SYSCTL_ADD_NODE(sysctlctx, - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, - "current", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "Current sensors (milliamps)"); - - for (i = 0; i < sc->sc_current_count; i++) { - SYSCTL_ADD_PROC(sysctlctx, SYSCTL_CHILDREN(tree_node), - OID_AUTO, sc->sc_current_sensors[i], - CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, - dev, ('I' << 8) | i, asmc_sensor_sysctl, "I", - "Current sensor (milliamps)"); - } - } - - /* Power sensors */ - if (sc->sc_power_count > 0) { - tree_node = SYSCTL_ADD_NODE(sysctlctx, - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, - "power", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "Power sensors (milliwatts)"); - - for (i = 0; i < sc->sc_power_count; i++) { - SYSCTL_ADD_PROC(sysctlctx, SYSCTL_CHILDREN(tree_node), - OID_AUTO, sc->sc_power_sensors[i], - CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, - dev, ('P' << 8) | i, asmc_sensor_sysctl, "I", - "Power sensor (milliwatts)"); - } - } - - /* Ambient light sensors */ - if (sc->sc_light_count > 0) { + static const struct { + const char *node_name; + const char *node_desc; + char tag; + const char *leaf_desc; + } sensor_sysctl[] = { + { "voltage", "Voltage sensors (millivolts)", 'V', + "Voltage sensor (millivolts)" }, + { "current", "Current sensors (milliamps)", 'I', + "Current sensor (milliamps)" }, + { "power", "Power sensors (milliwatts)", 'P', + "Power sensor (milliwatts)" }, + { "ambient", "Ambient light sensors", 'L', + "Light sensor value" }, + }; + + int *sysctl_counts[] = { + &sc->sc_voltage_count, &sc->sc_current_count, + &sc->sc_power_count, &sc->sc_light_count }; + char **sysctl_arrays[] = { + sc->sc_voltage_sensors, sc->sc_current_sensors, + sc->sc_power_sensors, sc->sc_light_sensors }; + + for (unsigned int s = 0; s < nitems(sensor_sysctl); s++) { + int count = *sysctl_counts[s]; + if (count <= 0) + continue; tree_node = SYSCTL_ADD_NODE(sysctlctx, SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, - "ambient", CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "Ambient light sensors"); - - for (i = 0; i < sc->sc_light_count; i++) { - SYSCTL_ADD_PROC(sysctlctx, SYSCTL_CHILDREN(tree_node), - OID_AUTO, sc->sc_light_sensors[i], + sensor_sysctl[s].node_name, + CTLFLAG_RD | CTLFLAG_MPSAFE, 0, + sensor_sysctl[s].node_desc); + for (i = 0; i < count; i++) { + SYSCTL_ADD_PROC(sysctlctx, + SYSCTL_CHILDREN(tree_node), + OID_AUTO, sysctl_arrays[s][i], CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, - dev, ('L' << 8) | i, asmc_sensor_sysctl, "I", - "Light sensor value"); + dev, (sensor_sysctl[s].tag << 8) | i, + asmc_sensor_sysctl, "I", + sensor_sysctl[s].leaf_desc); } }