hwmon: (ina238) Report energy in microjoules
authorJonas Rebmann <jre@pengutronix.de>
Tue, 15 Jul 2025 13:02:41 +0000 (15:02 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Fri, 18 Jul 2025 16:50:51 +0000 (09:50 -0700)
The hwmon sysfs interface specifies that energy values should be
reported in microjoules. This is also what tools such as lmsensors
expect, reporting wrong values otherwise.

Adjust the driver to scale the output accordingly and adjust ina238
driver documentation.

Fixes: 6daaf15a1173 ("hwmon: (ina238) Add support for SQ52206")
Signed-off-by: Jonas Rebmann <jre@pengutronix.de>
Link: https://lore.kernel.org/r/20250715-hwmon-ina238-microjoules-v1-1-9df678568a41@pengutronix.de
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Documentation/hwmon/ina238.rst
drivers/hwmon/ina238.c

index d1b93cf..9a24da4 100644 (file)
@@ -65,7 +65,7 @@ Additional sysfs entries for sq52206
 ------------------------------------
 
 ======================= =======================================================
-energy1_input          Energy measurement (mJ)
+energy1_input          Energy measurement (uJ)
 
 power1_input_highest   Peak Power (uW)
 ======================= =======================================================
index a4a4174..9a5fd16 100644 (file)
@@ -97,7 +97,7 @@
  *  Power (mW) = 0.2 * register value * 20000 / rshunt / 4 * gain
  *  (Specific for SQ52206)
  *  Power (mW) = 0.24 * register value * 20000 / rshunt / 4 * gain
- *  Energy (mJ) = 16 * 0.24 * register value * 20000 / rshunt / 4 * gain
+ *  Energy (uJ) = 16 * 0.24 * register value * 20000 / rshunt / 4 * gain * 1000
  */
 #define INA238_CALIBRATION_VALUE       16384
 #define INA238_FIXED_SHUNT             20000
@@ -500,9 +500,9 @@ static ssize_t energy1_input_show(struct device *dev,
        if (ret)
                return ret;
 
-       /* result in mJ */
-       energy = div_u64(regval * INA238_FIXED_SHUNT *  data->gain * 16 *
-                               data->config->power_calculate_factor, 4 * 100 * data->rshunt);
+       /* result in uJ */
+       energy = div_u64(regval * INA238_FIXED_SHUNT *  data->gain * 16 * 10 *
+                               data->config->power_calculate_factor, 4 * data->rshunt);
 
        return sysfs_emit(buf, "%llu\n", energy);
 }