mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
power: supply: max17042_battery: Fix SOC threshold calc w/ no current sense
Commit223a3b8283
("power: supply: max17042_battery: use VFSOC for capacity when no rsns") made it so that capacity on systems without current sensing would be read from VFSOC instead of RepSOC. However, the SOC threshold calculation still read RepSOC to get the SOC regardless of the current sensing option state. Fix this by applying the same conditional to determine which register should be read. This also seems to be the intended behavior as per the datasheet - SOC alert config value in MiscCFG on setups without current sensing is set to a value of 0b11, indicating SOC alerts being generated based on VFSOC, instead of 0b00 which indicates SOC alerts being generated based on RepSOC. This fixes an issue on the Galaxy S3/Midas boards, where the alert interrupt would be constantly retriggered, causing high CPU usage on idle (around ~12%-15%). Fixes:e5f3872d20
("max17042: Add support for signalling change in SOC") Signed-off-by: Artur Weber <aweber.kernel@gmail.com> Reviewed-by: Henrik Grimler <henrik@grimler.se> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Link: https://lore.kernel.org/r/20240817-max17042-soc-threshold-fix-v1-1-72b45899c3cc@gmail.com Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
dc123a1a80
commit
3a3acf839b
@ -853,7 +853,10 @@ static void max17042_set_soc_threshold(struct max17042_chip *chip, u16 off)
|
||||
/* program interrupt thresholds such that we should
|
||||
* get interrupt for every 'off' perc change in the soc
|
||||
*/
|
||||
regmap_read(map, MAX17042_RepSOC, &soc);
|
||||
if (chip->pdata->enable_current_sense)
|
||||
regmap_read(map, MAX17042_RepSOC, &soc);
|
||||
else
|
||||
regmap_read(map, MAX17042_VFSOC, &soc);
|
||||
soc >>= 8;
|
||||
soc_tr = (soc + off) << 8;
|
||||
if (off < soc)
|
||||
|
Loading…
Reference in New Issue
Block a user