From 53c07ddb44ed9b15a9e0d0d696e676006d16d4ea Mon Sep 17 00:00:00 2001 From: Bruno Sampaio Leite Date: Mon, 5 Jun 2023 11:10:29 -0300 Subject: [PATCH] Update battery status before reading Capacity is not getting updated because of wrong status being checked by update capacity. Force updating battery status before reading it to decide about updating capacity. Change-Id: I1d8f68d7fb855aa878284b34303d04ccf1c5c2ab signed-off-by: brunosmp@motorola.com Reviewed-on: https://gerrit.mot.com/2633986 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Rafael Ortolan Reviewed-by: litong Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../cw2217b_fg_mmi/cw2217B_fuel_gauge_base.c | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/drivers/power/cw2217b_fg_mmi/cw2217B_fuel_gauge_base.c b/drivers/power/cw2217b_fg_mmi/cw2217B_fuel_gauge_base.c index 91d46fbba766..50af28eb7807 100644 --- a/drivers/power/cw2217b_fg_mmi/cw2217B_fuel_gauge_base.c +++ b/drivers/power/cw2217b_fg_mmi/cw2217B_fuel_gauge_base.c @@ -406,6 +406,30 @@ static int cw_get_ui_full(struct cw_battery *cw_bat, int *ui_full) { } #endif +static void cw_get_batt_status(struct cw_battery *cw_bat) +{ + long batt_curr = 0; + batt_curr = cw_bat->cw_current * CW_CUR_UNIT * (-1); + batt_curr *= cw_bat->ibat_polority; + + if (cw_bat->voltage <= 0 || cw_bat->temp <= CW_BPD_TEMP) + cw_bat->present = 0; + else + cw_bat->present = 1; + + if (!cw_bat->present) { + cw_bat->batt_status = POWER_SUPPLY_STATUS_UNKNOWN; + } else if (cw_bat->ui_soc == CW_UI_FULL) { + cw_bat->batt_status = POWER_SUPPLY_STATUS_FULL; + } else if (abs(batt_curr) < CW_CUR_ACCURACY) { + cw_bat->batt_status = POWER_SUPPLY_STATUS_NOT_CHARGING; + } else if (batt_curr > 0) { + cw_bat->batt_status = POWER_SUPPLY_STATUS_CHARGING; + } else { + cw_bat->batt_status = POWER_SUPPLY_STATUS_DISCHARGING; + } +} + static int cw_get_capacity(struct cw_battery *cw_bat) { int ret; @@ -423,6 +447,8 @@ static int cw_get_capacity(struct cw_battery *cw_bat) int ui_full_temp = 0; #endif + cw_get_batt_status(cw_bat); + if (cw_bat->batt_status == POWER_SUPPLY_STATUS_CHARGING) chr_st_now = 1; else @@ -1074,30 +1100,6 @@ static int cw_battery_set_property(struct power_supply *psy, return ret; } -static void cw_get_batt_status(struct cw_battery *cw_bat) -{ - long batt_curr = 0; - batt_curr = cw_bat->cw_current * CW_CUR_UNIT * (-1); - batt_curr *= cw_bat->ibat_polority; - - if (cw_bat->voltage <= 0 || cw_bat->temp <= CW_BPD_TEMP) - cw_bat->present = 0; - else - cw_bat->present = 1; - - if (!cw_bat->present) { - cw_bat->batt_status = POWER_SUPPLY_STATUS_UNKNOWN; - } else if (cw_bat->ui_soc == CW_UI_FULL) { - cw_bat->batt_status = POWER_SUPPLY_STATUS_FULL; - } else if (abs(batt_curr) < CW_CUR_ACCURACY) { - cw_bat->batt_status = POWER_SUPPLY_STATUS_NOT_CHARGING; - } else if (batt_curr > 0) { - cw_bat->batt_status = POWER_SUPPLY_STATUS_CHARGING; - } else { - cw_bat->batt_status = POWER_SUPPLY_STATUS_DISCHARGING; - } -} - static unsigned int cw_get_charge_counter(struct cw_battery *cw_bat) { int charge_counter;