]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
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 d1b93cf8627f352612f17953c62efc5ef5596fe5..9a24da4786a43f7493b364b005b2ae9992c3b10d 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 a4a41742786bd19e1c5dab34c7d71973527161a1..9a5fd16a4ec2a6d5a6cd5e8070d0442e1ef0135a 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);
 }