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: Ashay Jaiswal <ashayj@codeaurora.org>
This commit is contained in:
parent
96b6f68843
commit
6477a9e902
3 changed files with 32 additions and 19 deletions
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
/* 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;
|
||||
|
||||
/*
|
||||
* Disable AUTH_IRQ_EN_CFG_BIT to receive adapter voltage
|
||||
* change interrupt.
|
||||
*/
|
||||
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);
|
||||
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,
|
||||
AUTH_IRQ_EN_CFG_BIT, 0);
|
||||
if (rc < 0)
|
||||
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,
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
/* reconfigure allowed voltage for HVDCP */
|
||||
rc = smblib_write(chg, USBIN_ADAPTER_ALLOW_CFG_REG,
|
||||
|
|
|
@ -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…
Add table
Reference in a new issue