| From 223a3b82834f036a62aa831f67cbf1f1d644c6e2 Mon Sep 17 00:00:00 2001 |
| From: Henrik Grimler <henrik@grimler.se> |
| Date: Wed, 29 Sep 2021 20:14:17 +0200 |
| Subject: power: supply: max17042_battery: use VFSOC for capacity when no rsns |
| |
| From: Henrik Grimler <henrik@grimler.se> |
| |
| commit 223a3b82834f036a62aa831f67cbf1f1d644c6e2 upstream. |
| |
| On Galaxy S3 (i9300/i9305), which has the max17047 fuel gauge and no |
| current sense resistor (rsns), the RepSOC register does not provide an |
| accurate state of charge value. The reported value is wrong, and does |
| not change over time. VFSOC however, which uses the voltage fuel gauge |
| to determine the state of charge, always shows an accurate value. |
| |
| For devices without current sense, VFSOC is already used for the |
| soc-alert (0x0003 is written to MiscCFG register), so with this change |
| the source of the alert and the PROP_CAPACITY value match. |
| |
| Fixes: 359ab9f5b154 ("power_supply: Add MAX17042 Fuel Gauge Driver") |
| Cc: <stable@vger.kernel.org> |
| Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> |
| Suggested-by: Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> |
| Signed-off-by: Henrik Grimler <henrik@grimler.se> |
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> |
| Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/power/supply/max17042_battery.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/power/supply/max17042_battery.c |
| +++ b/drivers/power/supply/max17042_battery.c |
| @@ -312,7 +312,10 @@ static int max17042_get_property(struct |
| val->intval = data * 625 / 8; |
| break; |
| case POWER_SUPPLY_PROP_CAPACITY: |
| - ret = regmap_read(map, MAX17042_RepSOC, &data); |
| + if (chip->pdata->enable_current_sense) |
| + ret = regmap_read(map, MAX17042_RepSOC, &data); |
| + else |
| + ret = regmap_read(map, MAX17042_VFSOC, &data); |
| if (ret < 0) |
| return ret; |
| |