Loading drivers/power/supply/qcom/qpnp-smb2.c +1 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading drivers/power/supply/qcom/smb-lib.c +30 −18 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); Loading Loading @@ -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, Loading drivers/power/supply/qcom/smb-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading
drivers/power/supply/qcom/qpnp-smb2.c +1 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading
drivers/power/supply/qcom/smb-lib.c +30 −18 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); Loading Loading @@ -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, Loading
drivers/power/supply/qcom/smb-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading