diff options
author | Tony Lindgren <tony@atomide.com> | 2019-10-09 23:06:18 +0200 |
---|---|---|
committer | Sebastian Reichel <sre@kernel.org> | 2019-10-20 20:30:43 +0200 |
commit | c59b3bad6fd83a42c73ec6ef6609af4882dfbcb3 (patch) | |
tree | 0840b84f77d1def980d2044a1ffdc006cf2c79e7 /drivers/power | |
parent | power: supply: cpcap-battery: Move coulomb counter units per lsb to ddata (diff) | |
download | linux-c59b3bad6fd83a42c73ec6ef6609af4882dfbcb3.tar.xz linux-c59b3bad6fd83a42c73ec6ef6609af4882dfbcb3.zip |
power: supply: cpcap-battery: Simplify coulomb counter calculation with div_s64
We can simplify cpcap_battery_cc_raw_div() with div_s64.
Cc: Merlijn Wajer <merlijn@wizzup.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/supply/cpcap-battery.c | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/drivers/power/supply/cpcap-battery.c b/drivers/power/supply/cpcap-battery.c index 914e3ddfd80b..5e5be424196a 100644 --- a/drivers/power/supply/cpcap-battery.c +++ b/drivers/power/supply/cpcap-battery.c @@ -33,8 +33,6 @@ #include <linux/iio/types.h> #include <linux/mfd/motorola-cpcap.h> -#include <asm/div64.h> - /* * Register bit defines for CPCAP_REG_BPEOL. Some of these seem to * map to MC13783UG.pdf "Table 5-19. Register 13, Power Control 0" @@ -219,28 +217,17 @@ static int cpcap_battery_cc_raw_div(struct cpcap_battery_ddata *ddata, s16 offset, u32 divider) { s64 acc; - u64 tmp; - int avg_current; if (!divider) return 0; acc = accumulator; - acc = acc - ((s64)sample * offset); - - if (acc >= 0) - tmp = acc; - else - tmp = acc * -1; + acc -= (s64)sample * offset; + acc *= ddata->cc_lsb; + acc *= -1; + acc = div_s64(acc, divider); - tmp = tmp * ddata->cc_lsb; - do_div(tmp, divider); - avg_current = tmp; - - if (acc >= 0) - return -avg_current; - else - return avg_current; + return acc; } /* 3600000μAms = 1μAh */ |