Message ID | 20210929181418.4221-1-henrik@grimler.se (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | [v2,1/2] power: supply: max17042_battery: use VFSOC for capacity when no rsns | expand |
Hi, On 9/29/21 8:14 PM, Henrik Grimler wrote: > 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> > --- > Changes in v2: > Re-write commit message to highlight that VFSOC is already used for > alert, after Krzysztof's comments Thanks, both patches looks good to me: Reviewed-by: Hans de Goede <hdegoede@redhat.com> for the series. Regards, Hans > --- > drivers/power/supply/max17042_battery.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c > index 8dffae76b6a3..5809ba997093 100644 > --- a/drivers/power/supply/max17042_battery.c > +++ b/drivers/power/supply/max17042_battery.c > @@ -313,7 +313,10 @@ static int max17042_get_property(struct power_supply *psy, > 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; > > > base-commit: 5816b3e6577eaa676ceb00a848f0fd65fe2adc29 >
Hi, On Wed, Sep 29, 2021 at 09:43:25PM +0200, Hans de Goede wrote: > On 9/29/21 8:14 PM, Henrik Grimler wrote: > > 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> > > --- > > Changes in v2: > > Re-write commit message to highlight that VFSOC is already used for > > alert, after Krzysztof's comments > > Thanks, both patches looks good to me: > > Reviewed-by: Hans de Goede <hdegoede@redhat.com> > > for the series. Thanks, both queued. -- Sebastian > > > Regards, > > Hans > > > > --- > > drivers/power/supply/max17042_battery.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c > > index 8dffae76b6a3..5809ba997093 100644 > > --- a/drivers/power/supply/max17042_battery.c > > +++ b/drivers/power/supply/max17042_battery.c > > @@ -313,7 +313,10 @@ static int max17042_get_property(struct power_supply *psy, > > 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; > > > > > > base-commit: 5816b3e6577eaa676ceb00a848f0fd65fe2adc29 > > >
diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c index 8dffae76b6a3..5809ba997093 100644 --- a/drivers/power/supply/max17042_battery.c +++ b/drivers/power/supply/max17042_battery.c @@ -313,7 +313,10 @@ static int max17042_get_property(struct power_supply *psy, 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;