aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/backport-5.10/872-v5.13-02-hwmon-tps23861-set-current-shunt-value.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/backport-5.10/872-v5.13-02-hwmon-tps23861-set-current-shunt-value.patch')
-rw-r--r--target/linux/generic/backport-5.10/872-v5.13-02-hwmon-tps23861-set-current-shunt-value.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/target/linux/generic/backport-5.10/872-v5.13-02-hwmon-tps23861-set-current-shunt-value.patch b/target/linux/generic/backport-5.10/872-v5.13-02-hwmon-tps23861-set-current-shunt-value.patch
new file mode 100644
index 0000000000..f1051f77d5
--- /dev/null
+++ b/target/linux/generic/backport-5.10/872-v5.13-02-hwmon-tps23861-set-current-shunt-value.patch
@@ -0,0 +1,57 @@
+From 9bca598d4a86e88afb29fdb516c68b2519bd0fb9 Mon Sep 17 00:00:00 2001
+From: Robert Marko <robert.marko@sartura.hr>
+Date: Thu, 10 Jun 2021 00:07:27 +0200
+Subject: [PATCH 3/4] hwmon: (tps23861) set current shunt value
+
+TPS23861 has a configuration bit for setting of the
+current shunt value used on the board.
+Its bit 0 of the General Mask 1 register.
+
+According to the datasheet bit values are:
+0 for 255 mOhm (Default)
+1 for 250 mOhm
+
+So, configure the bit before registering the hwmon
+device according to the value passed in the DTS or
+default one if none is passed.
+
+This caused potentially reading slightly skewed values
+due to max current value being 1.02A when 250mOhm shunt
+is used instead of 1.0A when 255mOhm is used.
+
+Fixes: fff7b8ab2255 ("hwmon: add Texas Instruments TPS23861 driver")
+Signed-off-by: Robert Marko <robert.marko@sartura.hr>
+Link: https://lore.kernel.org/r/20210609220728.499879-2-robert.marko@sartura.hr
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+---
+ drivers/hwmon/tps23861.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- a/drivers/hwmon/tps23861.c
++++ b/drivers/hwmon/tps23861.c
+@@ -99,6 +99,9 @@
+ #define POWER_ENABLE 0x19
+ #define TPS23861_NUM_PORTS 4
+
++#define TPS23861_GENERAL_MASK_1 0x17
++#define TPS23861_CURRENT_SHUNT_MASK BIT(0)
++
+ #define TEMPERATURE_LSB 652 /* 0.652 degrees Celsius */
+ #define VOLTAGE_LSB 3662 /* 3.662 mV */
+ #define SHUNT_RESISTOR_DEFAULT 255000 /* 255 mOhm */
+@@ -561,6 +564,15 @@ static int tps23861_probe(struct i2c_cli
+ else
+ data->shunt_resistor = SHUNT_RESISTOR_DEFAULT;
+
++ if (data->shunt_resistor == SHUNT_RESISTOR_DEFAULT)
++ regmap_clear_bits(data->regmap,
++ TPS23861_GENERAL_MASK_1,
++ TPS23861_CURRENT_SHUNT_MASK);
++ else
++ regmap_set_bits(data->regmap,
++ TPS23861_GENERAL_MASK_1,
++ TPS23861_CURRENT_SHUNT_MASK);
++
+ hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,
+ data, &tps23861_chip_info,
+ NULL);