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

Commit 9b322c6b authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "power: smb5: add support for ICL override"

parents 575d1d7d fcd52a09
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1659,6 +1659,13 @@ static int smb5_init_hw(struct smb5 *chip)
		smblib_rerun_apsd_if_required(chg);
	}

	/* clear the ICL override if it is set */
	rc = smblib_icl_override(chg, false);
	if (rc < 0) {
		pr_err("Couldn't disable ICL override rc=%d\n", rc);
		return rc;
	}

	/* vote 0mA on usb_icl for non battery platforms */
	vote(chg->usb_icl_votable,
		DEFAULT_VOTER, chip->dt.no_battery, 0);
+27 −1
Original line number Diff line number Diff line
@@ -117,6 +117,19 @@ int smblib_get_jeita_cc_delta(struct smb_charger *chg, int *cc_delta_ua)
	return 0;
}

int smblib_icl_override(struct smb_charger *chg, bool override)
{
	int rc;

	rc = smblib_masked_write(chg, USBIN_LOAD_CFG_REG,
				ICL_OVERRIDE_AFTER_APSD_BIT,
				override ? ICL_OVERRIDE_AFTER_APSD_BIT : 0);
	if (rc < 0)
		smblib_err(chg, "Couldn't override ICL rc=%d\n", rc);

	return rc;
}

static int smblib_select_sec_charger(struct smb_charger *chg, int sec_chg)
{
	int rc;
@@ -923,7 +936,7 @@ static int get_sdp_current(struct smb_charger *chg, int *icl_ua)
int smblib_set_icl_current(struct smb_charger *chg, int icl_ua)
{
	int rc = 0;
	bool hc_mode = false;
	bool hc_mode = false, override = false;

	/* suspend and return if 25mA or less is requested */
	if (icl_ua <= USBIN_25MA)
@@ -950,6 +963,13 @@ int smblib_set_icl_current(struct smb_charger *chg, int icl_ua)
			goto out;
		}
		hc_mode = true;

		/*
		 * Micro USB mode follows ICL register independent of override
		 * bit, configure override only for typeC mode.
		 */
		if (chg->connector_type == POWER_SUPPLY_CONNECTOR_TYPEC)
			override = true;
	}

set_mode:
@@ -960,6 +980,12 @@ int smblib_set_icl_current(struct smb_charger *chg, int icl_ua)
		goto out;
	}

	rc = smblib_icl_override(chg, override);
	if (rc < 0) {
		smblib_err(chg, "Couldn't set ICL override rc=%d\n", rc);
		goto out;
	}

	/* unsuspend after configuring current and override */
	rc = smblib_set_usb_suspend(chg, false);
	if (rc < 0) {
+1 −0
Original line number Diff line number Diff line
@@ -551,6 +551,7 @@ int smblib_get_prop_pr_swap_in_progress(struct smb_charger *chg,
int smblib_set_prop_pr_swap_in_progress(struct smb_charger *chg,
				const union power_supply_propval *val);
int smblib_configure_hvdcp_apsd(struct smb_charger *chg, bool enable);
int smblib_icl_override(struct smb_charger *chg, bool override);

int smblib_init(struct smb_charger *chg);
int smblib_deinit(struct smb_charger *chg);