Loading drivers/power/supply/qcom/battery.c +20 −6 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ #define ICL_CHANGE_VOTER "ICL_CHANGE_VOTER" #define PL_INDIRECT_VOTER "PL_INDIRECT_VOTER" #define USBIN_I_VOTER "USBIN_I_VOTER" #define FCC_CHANGE_VOTER "FCC_CHANGE_VOTER" #define PL_FCC_LOW_VOTER "PL_FCC_LOW_VOTER" struct pl_data { int pl_mode; Loading Loading @@ -357,12 +357,26 @@ static void pl_taper_work(struct work_struct *work) union power_supply_propval pval = {0, }; int rc; int eff_fcc_ua; int total_fcc_ua, master_fcc_ua, slave_fcc_ua = 0; chip->taper_work_running = true; while (true) { /* exit immediately if parallel is disabled */ if (get_effective_result(chip->pl_disable_votable)) { pl_dbg(chip, PR_PARALLEL, "terminating parallel not in progress\n"); /* * if parallel's FCC share is low, simply disable * parallel with TAPER_END_VOTER */ total_fcc_ua = get_effective_result_locked( chip->fcc_votable); get_fcc_split(chip, total_fcc_ua, &master_fcc_ua, &slave_fcc_ua); if (slave_fcc_ua <= MINIMUM_PARALLEL_FCC_UA) { pl_dbg(chip, PR_PARALLEL, "terminating: parallel's share is low\n"); vote(chip->pl_disable_votable, TAPER_END_VOTER, true, 0); } else { pl_dbg(chip, PR_PARALLEL, "terminating: parallel disabled\n"); } goto done; } Loading Loading @@ -420,11 +434,11 @@ static int pl_fcc_vote_callback(struct votable *votable, void *data, if (slave_fcc_ua > MINIMUM_PARALLEL_FCC_UA) { chip->slave_fcc_ua = slave_fcc_ua; vote(chip->pl_disable_votable, FCC_CHANGE_VOTER, vote(chip->pl_disable_votable, PL_FCC_LOW_VOTER, false, 0); } else { chip->slave_fcc_ua = 0; vote(chip->pl_disable_votable, FCC_CHANGE_VOTER, vote(chip->pl_disable_votable, PL_FCC_LOW_VOTER, true, 0); } } Loading Loading @@ -1012,7 +1026,7 @@ int qcom_batt_init(void) goto release_wakeup_source; } chip->fv_votable = create_votable("FV", VOTE_MAX, chip->fv_votable = create_votable("FV", VOTE_MIN, pl_fv_vote_callback, chip); if (IS_ERR(chip->fv_votable)) { Loading drivers/power/supply/qcom/qpnp-smb2.c +2 −8 Original line number Diff line number Diff line Loading @@ -1100,14 +1100,8 @@ static int smb2_batt_set_prop(struct power_supply *psy, rc = smblib_set_prop_charge_qnovo_enable(chg, val); break; case POWER_SUPPLY_PROP_VOLTAGE_QNOVO: if (val->intval == -EINVAL) { vote(chg->fv_votable, BATT_PROFILE_VOTER, true, chg->batt_profile_fv_uv); vote(chg->fv_votable, QNOVO_VOTER, false, 0); } else { vote(chg->fv_votable, QNOVO_VOTER, true, val->intval); vote(chg->fv_votable, BATT_PROFILE_VOTER, false, 0); } vote(chg->fv_votable, QNOVO_VOTER, (val->intval >= 0), val->intval); break; case POWER_SUPPLY_PROP_CURRENT_QNOVO: vote(chg->pl_disable_votable, PL_QNOVO_VOTER, Loading drivers/power/supply/qcom/smb-lib.c +1 −1 Original line number Diff line number Diff line Loading @@ -4023,7 +4023,7 @@ static void smblib_handle_typec_removal(struct smb_charger *chg) /* reset parallel voters */ vote(chg->pl_disable_votable, PL_DELAY_VOTER, true, 0); vote(chg->pl_disable_votable, FCC_CHANGE_VOTER, false, 0); vote(chg->pl_disable_votable, PL_FCC_LOW_VOTER, false, 0); vote(chg->pl_enable_votable_indirect, USBIN_I_VOTER, false, 0); vote(chg->pl_enable_votable_indirect, USBIN_V_VOTER, false, 0); vote(chg->awake_votable, PL_DELAY_VOTER, false, 0); Loading drivers/power/supply/qcom/smb-lib.h +1 −1 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ enum print_reason { #define USBIN_I_VOTER "USBIN_I_VOTER" #define WEAK_CHARGER_VOTER "WEAK_CHARGER_VOTER" #define OTG_VOTER "OTG_VOTER" #define FCC_CHANGE_VOTER "FCC_CHANGE_VOTER" #define PL_FCC_LOW_VOTER "PL_FCC_LOW_VOTER" #define WBC_VOTER "WBC_VOTER" #define VCONN_MAX_ATTEMPTS 3 Loading Loading
drivers/power/supply/qcom/battery.c +20 −6 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ #define ICL_CHANGE_VOTER "ICL_CHANGE_VOTER" #define PL_INDIRECT_VOTER "PL_INDIRECT_VOTER" #define USBIN_I_VOTER "USBIN_I_VOTER" #define FCC_CHANGE_VOTER "FCC_CHANGE_VOTER" #define PL_FCC_LOW_VOTER "PL_FCC_LOW_VOTER" struct pl_data { int pl_mode; Loading Loading @@ -357,12 +357,26 @@ static void pl_taper_work(struct work_struct *work) union power_supply_propval pval = {0, }; int rc; int eff_fcc_ua; int total_fcc_ua, master_fcc_ua, slave_fcc_ua = 0; chip->taper_work_running = true; while (true) { /* exit immediately if parallel is disabled */ if (get_effective_result(chip->pl_disable_votable)) { pl_dbg(chip, PR_PARALLEL, "terminating parallel not in progress\n"); /* * if parallel's FCC share is low, simply disable * parallel with TAPER_END_VOTER */ total_fcc_ua = get_effective_result_locked( chip->fcc_votable); get_fcc_split(chip, total_fcc_ua, &master_fcc_ua, &slave_fcc_ua); if (slave_fcc_ua <= MINIMUM_PARALLEL_FCC_UA) { pl_dbg(chip, PR_PARALLEL, "terminating: parallel's share is low\n"); vote(chip->pl_disable_votable, TAPER_END_VOTER, true, 0); } else { pl_dbg(chip, PR_PARALLEL, "terminating: parallel disabled\n"); } goto done; } Loading Loading @@ -420,11 +434,11 @@ static int pl_fcc_vote_callback(struct votable *votable, void *data, if (slave_fcc_ua > MINIMUM_PARALLEL_FCC_UA) { chip->slave_fcc_ua = slave_fcc_ua; vote(chip->pl_disable_votable, FCC_CHANGE_VOTER, vote(chip->pl_disable_votable, PL_FCC_LOW_VOTER, false, 0); } else { chip->slave_fcc_ua = 0; vote(chip->pl_disable_votable, FCC_CHANGE_VOTER, vote(chip->pl_disable_votable, PL_FCC_LOW_VOTER, true, 0); } } Loading Loading @@ -1012,7 +1026,7 @@ int qcom_batt_init(void) goto release_wakeup_source; } chip->fv_votable = create_votable("FV", VOTE_MAX, chip->fv_votable = create_votable("FV", VOTE_MIN, pl_fv_vote_callback, chip); if (IS_ERR(chip->fv_votable)) { Loading
drivers/power/supply/qcom/qpnp-smb2.c +2 −8 Original line number Diff line number Diff line Loading @@ -1100,14 +1100,8 @@ static int smb2_batt_set_prop(struct power_supply *psy, rc = smblib_set_prop_charge_qnovo_enable(chg, val); break; case POWER_SUPPLY_PROP_VOLTAGE_QNOVO: if (val->intval == -EINVAL) { vote(chg->fv_votable, BATT_PROFILE_VOTER, true, chg->batt_profile_fv_uv); vote(chg->fv_votable, QNOVO_VOTER, false, 0); } else { vote(chg->fv_votable, QNOVO_VOTER, true, val->intval); vote(chg->fv_votable, BATT_PROFILE_VOTER, false, 0); } vote(chg->fv_votable, QNOVO_VOTER, (val->intval >= 0), val->intval); break; case POWER_SUPPLY_PROP_CURRENT_QNOVO: vote(chg->pl_disable_votable, PL_QNOVO_VOTER, Loading
drivers/power/supply/qcom/smb-lib.c +1 −1 Original line number Diff line number Diff line Loading @@ -4023,7 +4023,7 @@ static void smblib_handle_typec_removal(struct smb_charger *chg) /* reset parallel voters */ vote(chg->pl_disable_votable, PL_DELAY_VOTER, true, 0); vote(chg->pl_disable_votable, FCC_CHANGE_VOTER, false, 0); vote(chg->pl_disable_votable, PL_FCC_LOW_VOTER, false, 0); vote(chg->pl_enable_votable_indirect, USBIN_I_VOTER, false, 0); vote(chg->pl_enable_votable_indirect, USBIN_V_VOTER, false, 0); vote(chg->awake_votable, PL_DELAY_VOTER, false, 0); Loading
drivers/power/supply/qcom/smb-lib.h +1 −1 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ enum print_reason { #define USBIN_I_VOTER "USBIN_I_VOTER" #define WEAK_CHARGER_VOTER "WEAK_CHARGER_VOTER" #define OTG_VOTER "OTG_VOTER" #define FCC_CHANGE_VOTER "FCC_CHANGE_VOTER" #define PL_FCC_LOW_VOTER "PL_FCC_LOW_VOTER" #define WBC_VOTER "WBC_VOTER" #define VCONN_MAX_ATTEMPTS 3 Loading