Loading drivers/power/supply/qcom/fg-alg.c +25 −2 Original line number Diff line number Diff line Loading @@ -1172,7 +1172,11 @@ static int get_time_to_full_locked(struct ttf *ttf, int *val) cv_estimate: pr_debug("TTF: t_predicted_cc=%d\n", t_predicted); if (charge_type == POWER_SUPPLY_CHARGE_TYPE_TAPER) iterm = max(100, abs(iterm)); else iterm = max(100, abs(iterm) + ttf->iterm_delta); pr_debug("TTF: iterm=%d\n", iterm); if (charge_type == POWER_SUPPLY_CHARGE_TYPE_TAPER) Loading Loading @@ -1246,11 +1250,12 @@ int ttf_get_time_to_full(struct ttf *ttf, int *val) return rc; } #define DELTA_TTF_IBATT_UA 500000 static void ttf_work(struct work_struct *work) { struct ttf *ttf = container_of(work, struct ttf, ttf_work.work); int rc, ibatt_now, vbatt_now, ttf_now, charge_status; int rc, ibatt_now, vbatt_now, ttf_now, charge_status, ibatt_avg; ktime_t ktime_now; mutex_lock(&ttf->lock); Loading Loading @@ -1279,6 +1284,24 @@ static void ttf_work(struct work_struct *work) ttf_circ_buf_add(&ttf->vbatt, vbatt_now); if (charge_status == POWER_SUPPLY_STATUS_CHARGING) { rc = ttf_circ_buf_median(&ttf->ibatt, &ibatt_avg); if (rc < 0) { pr_err("failed to get IBATT AVG rc=%d\n", rc); goto end_work; } /* * While Charging, if Ibatt_now differ from Ibatt_avg by 500mA, * clear Ibatt buffer and refill with settled Ibatt values, to * calculate accurate TTF */ if (ibatt_now < 0 && (abs(ibatt_now - ibatt_avg) >= DELTA_TTF_IBATT_UA)) { pr_debug("Clear Ibatt buffer, Ibatt_avg=%d Ibatt_now=%d\n", ibatt_avg, ibatt_now); ttf_circ_buf_clr(&ttf->ibatt); } rc = get_time_to_full_locked(ttf, &ttf_now); if (rc < 0) { pr_err("failed to get ttf, rc=%d\n", rc); Loading drivers/power/supply/qcom/qpnp-fg-gen4.c +26 −2 Original line number Diff line number Diff line Loading @@ -791,10 +791,21 @@ static int fg_gen4_get_cell_impedance(struct fg_gen4_chip *chip, int *val) { struct fg_dev *fg = &chip->fg; int rc, esr_uohms, temp, vbat_term_mv, v_delta, rprot_uohms = 0; int rslow_uohms; rc = fg_get_battery_resistance(fg, &esr_uohms); if (rc < 0) rc = fg_get_sram_prop(fg, FG_SRAM_ESR_ACT, &esr_uohms); if (rc < 0) { pr_err("failed to get ESR_ACT, rc=%d\n", rc); return rc; } rc = fg_get_sram_prop(fg, FG_SRAM_RSLOW, &rslow_uohms); if (rc < 0) { pr_err("failed to get Rslow, rc=%d\n", rc); return rc; } esr_uohms += rslow_uohms; if (!chip->dt.five_pin_battery) goto out; Loading Loading @@ -1024,6 +1035,11 @@ static int fg_gen4_get_ttf_param(void *data, enum ttf_param param, int *val) case TTF_VBAT: rc = fg_get_battery_voltage(fg, val); break; case TTF_OCV: rc = fg_get_sram_prop(fg, FG_SRAM_OCV, val); if (rc < 0) pr_err("Failed to get battery OCV, rc=%d\n", rc); break; case TTF_IBAT: rc = fg_get_battery_current(fg, val); break; Loading Loading @@ -1057,6 +1073,8 @@ static int fg_gen4_get_ttf_param(void *data, enum ttf_param param, int *val) *val = TTF_MODE_QNOVO; else if (chip->ttf->step_chg_cfg_valid) *val = TTF_MODE_V_STEP_CHG; else if (chip->ttf->ocv_step_chg_cfg_valid) *val = TTF_MODE_OCV_STEP_CHG; else *val = TTF_MODE_NORMAL; break; Loading Loading @@ -1649,6 +1667,12 @@ static int fg_gen4_get_batt_profile(struct fg_dev *fg) chip->ttf->step_chg_num_params = tuple_len; chip->ttf->step_chg_cfg_valid = true; if (of_property_read_bool(profile_node, "qcom,ocv-based-step-chg")) { chip->ttf->step_chg_cfg_valid = false; chip->ttf->ocv_step_chg_cfg_valid = true; } mutex_unlock(&chip->ttf->lock); if (chip->ttf->step_chg_cfg_valid) { Loading Loading
drivers/power/supply/qcom/fg-alg.c +25 −2 Original line number Diff line number Diff line Loading @@ -1172,7 +1172,11 @@ static int get_time_to_full_locked(struct ttf *ttf, int *val) cv_estimate: pr_debug("TTF: t_predicted_cc=%d\n", t_predicted); if (charge_type == POWER_SUPPLY_CHARGE_TYPE_TAPER) iterm = max(100, abs(iterm)); else iterm = max(100, abs(iterm) + ttf->iterm_delta); pr_debug("TTF: iterm=%d\n", iterm); if (charge_type == POWER_SUPPLY_CHARGE_TYPE_TAPER) Loading Loading @@ -1246,11 +1250,12 @@ int ttf_get_time_to_full(struct ttf *ttf, int *val) return rc; } #define DELTA_TTF_IBATT_UA 500000 static void ttf_work(struct work_struct *work) { struct ttf *ttf = container_of(work, struct ttf, ttf_work.work); int rc, ibatt_now, vbatt_now, ttf_now, charge_status; int rc, ibatt_now, vbatt_now, ttf_now, charge_status, ibatt_avg; ktime_t ktime_now; mutex_lock(&ttf->lock); Loading Loading @@ -1279,6 +1284,24 @@ static void ttf_work(struct work_struct *work) ttf_circ_buf_add(&ttf->vbatt, vbatt_now); if (charge_status == POWER_SUPPLY_STATUS_CHARGING) { rc = ttf_circ_buf_median(&ttf->ibatt, &ibatt_avg); if (rc < 0) { pr_err("failed to get IBATT AVG rc=%d\n", rc); goto end_work; } /* * While Charging, if Ibatt_now differ from Ibatt_avg by 500mA, * clear Ibatt buffer and refill with settled Ibatt values, to * calculate accurate TTF */ if (ibatt_now < 0 && (abs(ibatt_now - ibatt_avg) >= DELTA_TTF_IBATT_UA)) { pr_debug("Clear Ibatt buffer, Ibatt_avg=%d Ibatt_now=%d\n", ibatt_avg, ibatt_now); ttf_circ_buf_clr(&ttf->ibatt); } rc = get_time_to_full_locked(ttf, &ttf_now); if (rc < 0) { pr_err("failed to get ttf, rc=%d\n", rc); Loading
drivers/power/supply/qcom/qpnp-fg-gen4.c +26 −2 Original line number Diff line number Diff line Loading @@ -791,10 +791,21 @@ static int fg_gen4_get_cell_impedance(struct fg_gen4_chip *chip, int *val) { struct fg_dev *fg = &chip->fg; int rc, esr_uohms, temp, vbat_term_mv, v_delta, rprot_uohms = 0; int rslow_uohms; rc = fg_get_battery_resistance(fg, &esr_uohms); if (rc < 0) rc = fg_get_sram_prop(fg, FG_SRAM_ESR_ACT, &esr_uohms); if (rc < 0) { pr_err("failed to get ESR_ACT, rc=%d\n", rc); return rc; } rc = fg_get_sram_prop(fg, FG_SRAM_RSLOW, &rslow_uohms); if (rc < 0) { pr_err("failed to get Rslow, rc=%d\n", rc); return rc; } esr_uohms += rslow_uohms; if (!chip->dt.five_pin_battery) goto out; Loading Loading @@ -1024,6 +1035,11 @@ static int fg_gen4_get_ttf_param(void *data, enum ttf_param param, int *val) case TTF_VBAT: rc = fg_get_battery_voltage(fg, val); break; case TTF_OCV: rc = fg_get_sram_prop(fg, FG_SRAM_OCV, val); if (rc < 0) pr_err("Failed to get battery OCV, rc=%d\n", rc); break; case TTF_IBAT: rc = fg_get_battery_current(fg, val); break; Loading Loading @@ -1057,6 +1073,8 @@ static int fg_gen4_get_ttf_param(void *data, enum ttf_param param, int *val) *val = TTF_MODE_QNOVO; else if (chip->ttf->step_chg_cfg_valid) *val = TTF_MODE_V_STEP_CHG; else if (chip->ttf->ocv_step_chg_cfg_valid) *val = TTF_MODE_OCV_STEP_CHG; else *val = TTF_MODE_NORMAL; break; Loading Loading @@ -1649,6 +1667,12 @@ static int fg_gen4_get_batt_profile(struct fg_dev *fg) chip->ttf->step_chg_num_params = tuple_len; chip->ttf->step_chg_cfg_valid = true; if (of_property_read_bool(profile_node, "qcom,ocv-based-step-chg")) { chip->ttf->step_chg_cfg_valid = false; chip->ttf->ocv_step_chg_cfg_valid = true; } mutex_unlock(&chip->ttf->lock); if (chip->ttf->step_chg_cfg_valid) { Loading