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

Commit 966277c2 authored by Guru Das Srinagesh's avatar Guru Das Srinagesh Committed by Harry Yang
Browse files

power: smb5: Support HW-autonomous HVDCP operation



Add boolean DT parameter "hvdcp-autonomous-enable" to enable
HVDCP HW-autonomous operation.

Change-Id: Ib0bf2db764d81debb0c9c6f906486415cdfee85b
Signed-off-by: default avatarGuru Das Srinagesh <gurus@codeaurora.org>
parent 4b54d9aa
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -263,6 +263,12 @@ Charger specific properties:
	Definition: Boolean flag which when present enables mositure protection
		    feature for uUSB connector type.

- qcom,hvdcp-autonomous-enable
  Usage:      optional
  Value type: bool
  Definition: Boolean flag which when present enables hardware-controlled
		operation of HVDCP.

=============================================
Second Level Nodes - SMB5 Charger Peripherals
=============================================
+10 −2
Original line number Diff line number Diff line
@@ -187,6 +187,7 @@ struct smb_dt_props {
	int			chg_inhibit_thr_mv;
	bool			no_battery;
	bool			hvdcp_disable;
	bool			hvdcp_autonomous;
	int			sec_charger_config;
	int			auto_recharge_soc;
	int			auto_recharge_vbat_mv;
@@ -407,6 +408,9 @@ static int smb5_parse_dt(struct smb5 *chip)
						"qcom,hvdcp-disable");
	chg->hvdcp_disable = chip->dt.hvdcp_disable;

	chip->dt.hvdcp_autonomous = of_property_read_bool(node,
						"qcom,hvdcp-autonomous-enable");

	rc = of_property_read_u32(node, "qcom,chg-inhibit-threshold-mv",
				&chip->dt.chg_inhibit_thr_mv);
	if (!rc && (chip->dt.chg_inhibit_thr_mv < 0 ||
@@ -1845,11 +1849,15 @@ static int smb5_init_hw(struct smb5 *chip)
	}

	/*
	 * Disable HVDCP autonomous mode operation by default. Additionally, if
	 * specified in DT: disable HVDCP and HVDCP authentication algorithm.
	 * Disable HVDCP autonomous mode operation by default, providing a DT
	 * knob to turn it on if required. Additionally, if specified in DT,
	 * disable HVDCP and HVDCP authentication algorithm.
	 */
	val = (chg->hvdcp_disable) ? 0 :
		(HVDCP_AUTH_ALG_EN_CFG_BIT | HVDCP_EN_BIT);
	if (chip->dt.hvdcp_autonomous)
		val |= HVDCP_AUTONOMOUS_MODE_EN_CFG_BIT;

	rc = smblib_masked_write(chg, USBIN_OPTIONS_1_CFG_REG,
			(HVDCP_AUTH_ALG_EN_CFG_BIT | HVDCP_EN_BIT |
			 HVDCP_AUTONOMOUS_MODE_EN_CFG_BIT),