From c59b3bad6fd83a42c73ec6ef6609af4882dfbcb3 Mon Sep 17 00:00:00 2001 From: Tony Lindgren Date: Wed, 9 Oct 2019 14:06:18 -0700 Subject: 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 Signed-off-by: Tony Lindgren Acked-by: Pavel Machek Signed-off-by: Sebastian Reichel --- drivers/power/supply/cpcap-battery.c | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) (limited to 'drivers/power/supply/cpcap-battery.c') 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 #include -#include - /* * 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 */ -- cgit v1.2.3-59-g8ed1b