Now we begin to update the charge_now value immediately after connecting or disconnecting the charger. No more hidden mAh buffer when the battery is fully charged or discharged. Signed-off-by: Arthur Demchenkov <spinal.by@xxxxxxxxx> --- drivers/power/supply/cpcap-battery.c | 44 +++++++++++++++--------------------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/drivers/power/supply/cpcap-battery.c b/drivers/power/supply/cpcap-battery.c index 938117638983..4e872bd36ccf 100644 --- a/drivers/power/supply/cpcap-battery.c +++ b/drivers/power/supply/cpcap-battery.c @@ -468,35 +468,27 @@ static int cpcap_battery_update_status(struct cpcap_battery_ddata *ddata) if (cpcap_battery_full(ddata)) { full = cpcap_battery_get_full(ddata); - /* Update full state value? */ - if (!full->voltage) { - memcpy(full, latest, sizeof(*full)); - - empty = cpcap_battery_get_empty(ddata); - if (empty->voltage) { - ddata->charge_full = - empty->counter_uah - full->counter_uah; - empty->voltage = -1; - } else if (ddata->charge_full) { - /* Initialize with user provided data */ - empty->counter_uah = - full->counter_uah + ddata->charge_full; - /* Mark it as initialized */ - empty->voltage = -1; - } + memcpy(full, latest, sizeof(*full)); + + empty = cpcap_battery_get_empty(ddata); + if (empty->voltage && empty->voltage != -1) { + empty->voltage = -1; + ddata->charge_full = + empty->counter_uah - full->counter_uah; + } else if (ddata->charge_full) { + empty->voltage = -1; + empty->counter_uah = + full->counter_uah + ddata->charge_full; } } else if (cpcap_battery_low(ddata)) { empty = cpcap_battery_get_empty(ddata); - /* Update empty state value? */ - if (!empty->voltage || empty->voltage == -1) { - memcpy(empty, latest, sizeof(*empty)); - - full = cpcap_battery_get_full(ddata); - if (full->voltage) { - ddata->charge_full = - empty->counter_uah - full->counter_uah; - full->voltage = 0; - } + memcpy(empty, latest, sizeof(*empty)); + + full = cpcap_battery_get_full(ddata); + if (full->voltage) { + full->voltage = 0; + ddata->charge_full = + empty->counter_uah - full->counter_uah; } } -- 2.11.0