From nobody Thu Jun 25 02:21:26 2026 X-Original-To: dev-commits-src-all@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 4gm2cD6lHLz6hGyg for ; Thu, 25 Jun 2026 02:21:32 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gm2cD15RMz3pZW for ; Thu, 25 Jun 2026 02:21:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782354092; 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=H3qenkkmyLhWGdyYOD4nuwQWbR+0rLhid/SDl0ZwDhk=; b=AXtL4a9po1AjJCWeReBpf0CoQ3PcPdTXE5TihZwbSlcnGrfwSgVrdsAJRxHjJv0fknbmjo 5eP3p/K+T8wXmtNnPyDgvBA7VC6j1e/RmFi8mqCdfcDhryEo7Zhoj1ntpHH9vk8TLHibEb OaVz7YtmXPCSvW4poV/ut11srKm6b9Af1omdi/53ujES8THqvHDuN83ob1M90lnoz1Klwk 61dSmDjNoelF9gCbmFmVBklNbIDM60kyY7vKAK6E2a76b/aIPXkNMwxWmuyrrOD3K4SST/ msobjjUDFf6W4HprsgY1wA408mlWFFIG57iyC9eAoIKd11lFoSOdtHuhdwWXYw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782354092; a=rsa-sha256; cv=none; b=oaahMxufd+FkaKWSmFnz20n8noalrggTPU53lXkBT6DZeEUlwK8c6v7UhnDrd32Y3+0rwv bS0CNQ5ovUFxXbeE1ck8uy6P2BsGv1ktsh/bNSi1N/4juN7Qwr+i68f7dSQG36v3RCqme4 A3WE0ce4Hz73/7/SztKkAwxX8fo+70ZJsUJf6pK1oGm2tI2CIfc5etBE70gw3c2IPRD/GA 2M4sAJjApBsK9h0A5EWayWkbid/JB2r8hKtl4bCysISaB3Bbu0b1Q4ytFwNnHGBAqu7F/l fEO8qul+niXgFhnkTcN/MGyJ63Kxgq6mktjRNvC+N8mF1iRpMaYTjtTgUbEgLw== 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=1782354092; 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=H3qenkkmyLhWGdyYOD4nuwQWbR+0rLhid/SDl0ZwDhk=; b=kemlkGJwoQgIGtLhF9oFfXbkHP4IcLYJQRHOmu8T9vUXIga+2TSAv/i7lCGA4i5KU8qYI5 Cg035B70GjFsF5Hl1UNR74JkCFjlKsCheuBq3idnJyZA1KaNgW4z+zh3wK3sjogIL61gMT c7aFdUcVLBKoYCLBB3Fanot4IqpvNo3soMaS2LN2EFRLVSSHIl920fsrSyTybAZkpub9NU SyCjlH+S3wuIoyw3cF+RBS+q5+HrkaQtX/L1LDgpmXUfX9iVerzgfes6d7qvT+04xv4aV0 YgLQBi3KzEiPxOJ0C0wlSlLfR89DmpilqcjbaBUgjXa6LYRV+pK3ExX2Cv5XLQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gm2cC4Gdwzn7j for ; Thu, 25 Jun 2026 02:21:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46073 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 25 Jun 2026 02:21:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: 104b311a03e4 - main - asmc: Refactor sensor detection and sysctl registration List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 104b311a03e45ebb8fd7a93e4ac26644bbae9bae Auto-Submitted: auto-generated Date: Thu, 25 Jun 2026 02:21:26 +0000 Message-Id: <6a3c90a6.46073.2f935987@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=104b311a03e45ebb8fd7a93e4ac26644bbae9bae commit 104b311a03e45ebb8fd7a93e4ac26644bbae9bae Author: Abdelkader Boudih AuthorDate: 2026-06-25 02:06:34 +0000 Commit: Adrian Chadd CommitDate: 2026-06-25 02:06:51 +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 --- 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); } }