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

Commit 6477a9e9 authored by Ashay Jaiswal's avatar Ashay Jaiswal
Browse files

power: qcom-charger: add a workaround flag for QC AUTH interrupt



In PM660 "QC authentication done" IRQ is a pulse and thus it
does not require workaround to disable this IRQ after authentication
completes. Add a workaround flag to enable this only for PMI8998.

Change-Id: I766219df38fc4954f5208d6db323b680e8e5fafd
Signed-off-by: default avatarAshay Jaiswal <ashayj@codeaurora.org>
parent 96b6f688
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1615,7 +1615,7 @@ 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;
		chip->chg.wa_flags |= BOOST_BACK_WA | QC_AUTH_INTERRUPT_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 */
+30 −18
Original line number Diff line number Diff line
@@ -633,11 +633,15 @@ static void smblib_uusb_removal(struct smb_charger *chg)

	cancel_delayed_work_sync(&chg->hvdcp_detect_work);

	/* reset AUTH_IRQ_EN_CFG_BIT */
	rc = smblib_masked_write(chg, USBIN_SOURCE_CHANGE_INTRPT_ENB_REG,
	if (chg->wa_flags & QC_AUTH_INTERRUPT_WA_BIT) {
		/* re-enable AUTH_IRQ_EN_CFG_BIT */
		rc = smblib_masked_write(chg,
				USBIN_SOURCE_CHANGE_INTRPT_ENB_REG,
				AUTH_IRQ_EN_CFG_BIT, AUTH_IRQ_EN_CFG_BIT);
		if (rc < 0)
		smblib_err(chg, "Couldn't enable QC auth setting rc=%d\n", rc);
			smblib_err(chg,
				"Couldn't enable QC auth setting rc=%d\n", rc);
	}

	/* reconfigure allowed voltage for HVDCP */
	rc = smblib_write(chg, USBIN_ADAPTER_ALLOW_CFG_REG,
@@ -3019,14 +3023,18 @@ static void smblib_handle_hvdcp_3p0_auth_done(struct smb_charger *chg,
	if (!rising)
		return;

	if (chg->wa_flags & QC_AUTH_INTERRUPT_WA_BIT) {
		/*
		 * Disable AUTH_IRQ_EN_CFG_BIT to receive adapter voltage
		 * change interrupt.
		 */
	rc = smblib_masked_write(chg, USBIN_SOURCE_CHANGE_INTRPT_ENB_REG,
		rc = smblib_masked_write(chg,
				USBIN_SOURCE_CHANGE_INTRPT_ENB_REG,
				AUTH_IRQ_EN_CFG_BIT, 0);
		if (rc < 0)
		smblib_err(chg, "Couldn't enable QC auth setting rc=%d\n", rc);
			smblib_err(chg,
				"Couldn't enable QC auth setting rc=%d\n", rc);
	}

	if (chg->mode == PARALLEL_MASTER)
		vote(chg->pl_enable_votable_indirect, USBIN_V_VOTER, true, 0);
@@ -3184,11 +3192,15 @@ static void typec_source_removal(struct smb_charger *chg)

	cancel_delayed_work_sync(&chg->hvdcp_detect_work);

	/* reset AUTH_IRQ_EN_CFG_BIT */
	rc = smblib_masked_write(chg, USBIN_SOURCE_CHANGE_INTRPT_ENB_REG,
	if (chg->wa_flags & QC_AUTH_INTERRUPT_WA_BIT) {
		/* re-enable AUTH_IRQ_EN_CFG_BIT */
		rc = smblib_masked_write(chg,
				USBIN_SOURCE_CHANGE_INTRPT_ENB_REG,
				AUTH_IRQ_EN_CFG_BIT, AUTH_IRQ_EN_CFG_BIT);
		if (rc < 0)
		smblib_err(chg, "Couldn't enable QC auth setting rc=%d\n", rc);
			smblib_err(chg,
				"Couldn't enable QC auth setting rc=%d\n", rc);
	}

	/* reconfigure allowed voltage for HVDCP */
	rc = smblib_write(chg, USBIN_ADAPTER_ALLOW_CFG_REG,
+1 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ enum {
	QC_CHARGER_DETECTION_WA_BIT	= BIT(0),
	BOOST_BACK_WA			= BIT(1),
	TYPEC_CC2_REMOVAL_WA_BIT	= BIT(2),
	QC_AUTH_INTERRUPT_WA_BIT	= BIT(3),
};

enum smb_irq_index {