From: Eugene Shalygin <eugene.shalygin@gmail.com>
To: eugene.shalygin@gmail.com
Cc: Guenter Roeck <linux@roeck-us.net>,
linux-hwmon@vger.kernel.org (open list:ASUS EC HARDWARE MONITOR
DRIVER), linux-kernel@vger.kernel.org (open list)
Subject: [PATCH v2 1/1] hwmon: (asus-ec-sensors) detect unconnected physical sensors
Date: Sat, 11 Jul 2026 12:10:36 +0200 [thread overview]
Message-ID: <20260711101143.571191-2-eugene.shalygin@gmail.com> (raw)
In-Reply-To: <20260711101143.571191-1-eugene.shalygin@gmail.com>
When there is no temperature sensor connected, reading EC register
returns one of the special values (-62, -60, -40). Test for them
and return -ENODATA to hwmon.
Signed-off-by: Eugene Shalygin <eugene.shalygin@gmail.com>
---
drivers/hwmon/asus-ec-sensors.c | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
diff --git a/drivers/hwmon/asus-ec-sensors.c b/drivers/hwmon/asus-ec-sensors.c
index 29a23484cbe7..d805de5da7b2 100644
--- a/drivers/hwmon/asus-ec-sensors.c
+++ b/drivers/hwmon/asus-ec-sensors.c
@@ -67,6 +67,13 @@ static char *mutex_path_override;
/* Moniker for the ACPI global lock (':' is not allowed in ASL identifiers) */
#define ACPI_GLOBAL_LOCK_PSEUDO_PATH ":GLOBAL_LOCK"
+/*
+ * The values for temperature sensor readings without physical sensors connected.
+ * The value varies across generations and is seemingly defined by the EC chip
+ * used in the given board.
+ */
+static const s32 temperature_blank_values[] = {-62, -60, -40};
+
typedef union {
u32 value;
struct {
@@ -1291,6 +1298,17 @@ static int get_cached_value_or_update(const struct device *dev,
return 0;
}
+static bool is_blank_temperature_value(s32 value)
+{
+ size_t i;
+
+ for (i = 0; i < ARRAY_SIZE(temperature_blank_values); ++i) {
+ if (value == temperature_blank_values[i])
+ return true;
+ }
+ return false;
+}
+
/*
* Now follow the functions that implement the hwmon interface
*/
@@ -1298,6 +1316,7 @@ static int get_cached_value_or_update(const struct device *dev,
static int asus_ec_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
u32 attr, int channel, long *val)
{
+ const struct ec_sensor_info *sensor_info;
int ret;
s32 value = 0;
@@ -1310,8 +1329,12 @@ static int asus_ec_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
ret = get_cached_value_or_update(dev, sidx, state, &value);
if (!ret) {
- *val = scale_sensor_value(value,
- get_sensor_info(state, sidx)->type);
+ sensor_info = get_sensor_info(state, sidx);
+ if (sensor_info->type == hwmon_temp &&
+ is_blank_temperature_value(value)) {
+ return -ENODATA;
+ }
+ *val = scale_sensor_value(value, sensor_info->type);
}
return ret;
--
2.55.0
next prev parent reply other threads:[~2026-07-11 10:12 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-11 10:10 [PATCH v2 0/1] hwmon: (asus-ec-sensors) detect unconnected physical sensors Eugene Shalygin
2026-07-11 10:10 ` Eugene Shalygin [this message]
2026-07-11 10:18 ` [PATCH v2 1/1] " sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260711101143.571191-2-eugene.shalygin@gmail.com \
--to=eugene.shalygin@gmail.com \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.