Re: [PATCH] hwmon: (cros_ec): Hide unconfigured temperature thresholds
Thomas Weißschuh <[email protected]> Wed, 29 Jul 2026 17:35:15 +0200
| Newsgroups | dev.linux.lists.chrome-platform,org.kernel.vger.linux-hwmon,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 2026-07-29 00:38:16+0800, Daniel Schaefer via B4 Relay wrote: > From: Daniel Schaefer <[email protected]> Welcome to upstream! > The EC reports a threshold of 0 K for host thresholds that are not > configured. Most Framework Computer systems don't use all thresholds. > E.g. temp_host_warn is left unset and stays at its -273 C / 0 K > default), see the EC code in zephyr/shim/src/thermal.c: > > DT_PROP_OR(node_id, temp_host_warn, -273) > > Previously these unconfigured thresholds were exposed as sysfs limits > that read back as -273.15 C, which userspace (e.g. s-tui) interpreted as > a real, permanently-exceeded limit. In current hwmon-next this should read back as -273C. See commit 9f14280c5ef3 ("hwmon: (cros_ec) Implement custom kelvin to celsius conversions") > To avoid this we can hide the sysfs attribute for that threshold. "Avoid this by hiding ..." > See truncated example below. > > Before: > > > sensors cros_ec-isa-000c > cpu_f75303@4d: +36.9°C (crit = +74.8°C, emerg = +84.8°C) > > After: > > > sensors cros_ec-isa-000c > cpu_f75303@4d: +36.9°C (high = -273.1°C, crit = +74.8°C) > (emerg = +84.8°C) "Before:" and "After:" are swapped? > Cc: Tzung-Bi Shih <[email protected]> > Cc: Thomas Weißschuh <[email protected]> > Cc: [email protected] > Signed-off-by: Daniel Schaefer <[email protected]> > --- > drivers/hwmon/cros_ec_hwmon.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/hwmon/cros_ec_hwmon.c b/drivers/hwmon/cros_ec_hwmon.c > index 03bfcc40bb7c..57158443dafe 100644 > --- a/drivers/hwmon/cros_ec_hwmon.c > +++ b/drivers/hwmon/cros_ec_hwmon.c > @@ -319,6 +319,7 @@ static umode_t cros_ec_hwmon_is_visible(const void *data, enum hwmon_sensor_type > u32 attr, int channel) > { > const struct cros_ec_hwmon_priv *priv = data; > + u32 threshold; > u16 speed; > > if (type == hwmon_fan) { > @@ -334,8 +335,17 @@ static umode_t cros_ec_hwmon_is_visible(const void *data, enum hwmon_sensor_type > } else if (type == hwmon_temp) { > if (priv->temp_sensor_names[channel]) { > if (cros_ec_hwmon_attr_is_temp_threshold(attr)) { > - if (priv->temp_threshold_supported) > - return 0444; > + if (!priv->temp_threshold_supported) > + return 0; > + > + if (cros_ec_hwmon_read_temp_threshold(priv->cros_ec, channel, > + cros_ec_hwmon_attr_to_thres(attr), > + &threshold) != 0) Probing would be a bit faster by not calling this for each threshold, but only doing it once. cros_ec_hwmon_priv::temp_threshold_supported could become a bitmask for supported thresholds to be read in is_visible(). This can also replace is_cros_ec_cmd_available(EC_CMD_THERMAL_GET_THRESHOLD). > + return 0; > + if (threshold == 0) > + return 0; > + > + return 0444; > } else { > return 0444; > }