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:
Umang Agrawal 2018-04-17 20:16:01 +05:30
parent d9749262e8
commit aa38c97b5e
3 changed files with 27 additions and 19 deletions

View file

@ -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;

View file

@ -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)

View file

@ -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 {