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: Umang Agrawal <uagrawal@codeaurora.org>
This commit is contained in:
parent
d9749262e8
commit
aa38c97b5e
3 changed files with 27 additions and 19 deletions
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
|
|
@ -2662,19 +2662,21 @@ int smblib_set_prop_typec_power_role(struct smb_charger *chg,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (power_role == UFP_EN_CMD_BIT) {
|
||||
/* disable PBS workaround when forcing sink mode */
|
||||
rc = smblib_write(chg, TM_IO_DTEST4_SEL, 0x0);
|
||||
if (rc < 0) {
|
||||
smblib_err(chg, "Couldn't write to TM_IO_DTEST4_SEL rc=%d\n",
|
||||
rc);
|
||||
}
|
||||
} else {
|
||||
/* restore it back to 0xA5 */
|
||||
rc = smblib_write(chg, TM_IO_DTEST4_SEL, 0xA5);
|
||||
if (rc < 0) {
|
||||
smblib_err(chg, "Couldn't write to TM_IO_DTEST4_SEL rc=%d\n",
|
||||
rc);
|
||||
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);
|
||||
if (rc < 0) {
|
||||
smblib_err(chg, "Couldn't write to TM_IO_DTEST4_SEL rc=%d\n",
|
||||
rc);
|
||||
}
|
||||
} else {
|
||||
/* restore it back to 0xA5 */
|
||||
rc = smblib_write(chg, TM_IO_DTEST4_SEL, 0xA5);
|
||||
if (rc < 0) {
|
||||
smblib_err(chg, "Couldn't write to TM_IO_DTEST4_SEL rc=%d\n",
|
||||
rc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
rc = smblib_write(chg, TM_IO_DTEST4_SEL, 0xA5);
|
||||
if (rc < 0)
|
||||
smblib_err(chg, "Couldn't restore crude sensor rc=%d\n", rc);
|
||||
/* 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);
|
||||
}
|
||||
|
||||
mutex_lock(&chg->vconn_oc_lock);
|
||||
if (!chg->vconn_en)
|
||||
|
|
|
@ -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…
Add table
Reference in a new issue