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

Commit bed5d982 authored by Umang Agrawal's avatar Umang Agrawal
Browse files

power: smb-lib: Enable TypeC crude sensor PBS WA based on PMIC type



Enable TypeC crude sensor PBS WA based on PMIC type since it is
required for PM660 and PMI8998 only.

Change-Id: Ib4f170ddba893e5b96372eecee9b9b74cb2a97e2
Signed-off-by: default avatarUmang Agrawal <uagrawal@codeaurora.org>
parent 49680b64
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1891,7 +1891,8 @@ static int smb2_chg_config_init(struct smb2 *chip)
	switch (pmic_rev_id->pmic_subtype) {
	case PMI8998_SUBTYPE:
		chip->chg.smb_version = PMI8998_SUBTYPE;
		chip->chg.wa_flags |= BOOST_BACK_WA | QC_AUTH_INTERRUPT_WA_BIT;
		chip->chg.wa_flags |= BOOST_BACK_WA | QC_AUTH_INTERRUPT_WA_BIT
				| TYPEC_PBS_WA_BIT;
		if (pmic_rev_id->rev4 == PMI8998_V1P1_REV4) /* PMI rev 1.1 */
			chg->wa_flags |= QC_CHARGER_DETECTION_WA_BIT;
		if (pmic_rev_id->rev4 == PMI8998_V2P0_REV4) /* PMI rev 2.0 */
@@ -1906,7 +1907,8 @@ static int smb2_chg_config_init(struct smb2 *chip)
		break;
	case PM660_SUBTYPE:
		chip->chg.smb_version = PM660_SUBTYPE;
		chip->chg.wa_flags |= BOOST_BACK_WA | OTG_WA | OV_IRQ_WA_BIT;
		chip->chg.wa_flags |= BOOST_BACK_WA | OTG_WA | OV_IRQ_WA_BIT
				| TYPEC_PBS_WA_BIT;
		chg->param.freq_buck = pm660_params.freq_buck;
		chg->param.freq_boost = pm660_params.freq_boost;
		chg->chg_freq.freq_5V		= 650;
+22 −17
Original line number Diff line number Diff line
@@ -1121,6 +1121,7 @@ static int __smblib_set_prop_typec_power_role(struct smb_charger *chg,
		return -EINVAL;
	}

	if (chg->wa_flags & TYPEC_PBS_WA_BIT) {
		if (power_role == UFP_EN_CMD_BIT) {
			/* disable PBS workaround when forcing sink mode */
			rc = smblib_write(chg, TM_IO_DTEST4_SEL, 0x0);
@@ -1136,6 +1137,7 @@ static int __smblib_set_prop_typec_power_role(struct smb_charger *chg,
					rc);
			}
		}
	}

	rc = smblib_masked_write(chg, TYPE_C_INTRPT_ENB_SOFTWARE_CTRL_REG,
				 TYPEC_POWER_ROLE_CMD_MASK, power_role);
@@ -4309,10 +4311,13 @@ static void smblib_handle_typec_removal(struct smb_charger *chg)
	if (rc < 0)
		smblib_err(chg, "Couldn't enable HW cc_out rc=%d\n", rc);

	/* restore crude sensor */
	/* restore crude sensor if PM660/PMI8998 */
	if (chg->wa_flags & TYPEC_PBS_WA_BIT) {
		rc = smblib_write(chg, TM_IO_DTEST4_SEL, 0xA5);
		if (rc < 0)
		smblib_err(chg, "Couldn't restore crude sensor rc=%d\n", rc);
			smblib_err(chg, "Couldn't restore crude sensor rc=%d\n",
				rc);
	}

	mutex_lock(&chg->vconn_oc_lock);
	if (!chg->vconn_en)
+1 −0
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ enum {
	QC_AUTH_INTERRUPT_WA_BIT	= BIT(3),
	OTG_WA				= BIT(4),
	OV_IRQ_WA_BIT			= BIT(5),
	TYPEC_PBS_WA_BIT		= BIT(6),
};

enum smb_irq_index {