Loading drivers/power/supply/qcom/qpnp-smb2.c +4 −2 Original line number Diff line number Diff line Loading @@ -1829,7 +1829,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 */ Loading @@ -1844,7 +1845,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; Loading drivers/power/supply/qcom/smb-lib.c +22 −17 Original line number Diff line number Diff line Loading @@ -2662,6 +2662,7 @@ 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); Loading @@ -2677,6 +2678,7 @@ 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); Loading Loading @@ -4098,10 +4100,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) Loading drivers/power/supply/qcom/smb-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,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 { Loading Loading
drivers/power/supply/qcom/qpnp-smb2.c +4 −2 Original line number Diff line number Diff line Loading @@ -1829,7 +1829,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 */ Loading @@ -1844,7 +1845,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; Loading
drivers/power/supply/qcom/smb-lib.c +22 −17 Original line number Diff line number Diff line Loading @@ -2662,6 +2662,7 @@ 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); Loading @@ -2677,6 +2678,7 @@ 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); Loading Loading @@ -4098,10 +4100,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) Loading
drivers/power/supply/qcom/smb-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,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 { Loading