Commit 3e8e93cb authored by Jonas Rebmann's avatar Jonas Rebmann Committed by Guenter Roeck
Browse files

hwmon: (ina238) Report energy in microjoules



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: 6daaf15a ("hwmon: (ina238) Add support for SQ52206")
Signed-off-by: default avatarJonas Rebmann <jre@pengutronix.de>
Link: https://lore.kernel.org/r/20250715-hwmon-ina238-microjoules-v1-1-9df678568a41@pengutronix.de


Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 495a4f0d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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)
======================= =======================================================
+4 −4
Original line number Diff line number Diff line
@@ -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);
}