Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 004f7baa authored by Abhijeet Dharmapurikar's avatar Abhijeet Dharmapurikar
Browse files

battery: disable parallel at end of taper stepper



Currently, taper stepper algorithm exits once parallel's share falls
below 500mA. However, the next FCC change ends up enabling taper
stepper algorithm.

Fix it by casting a disable vote at the end of taper stepper.

Change-Id: I6aa66508eb2a8cf9b0c6d9e82d1463ca7daa1464
Signed-off-by: default avatarAbhijeet Dharmapurikar <adharmap@codeaurora.org>
parent 784bad87
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -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;
@@ -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;
		}

@@ -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);
		}
	}
+1 −1
Original line number Diff line number Diff line
@@ -3847,7 +3847,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);
+1 −1
Original line number Diff line number Diff line
@@ -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