diff --git a/drivers/power/supply/qcom/qpnp-smb5.c b/drivers/power/supply/qcom/qpnp-smb5.c index 619cfe4b81ea..8f20931e3252 100644 --- a/drivers/power/supply/qcom/qpnp-smb5.c +++ b/drivers/power/supply/qcom/qpnp-smb5.c @@ -1503,15 +1503,25 @@ static int smb5_configure_typec(struct smb_charger *chg) smblib_apsd_enable(chg, true); - rc = smblib_masked_write(chg, TYPE_C_CFG_REG, - BC1P2_START_ON_CC_BIT, 0); + rc = smblib_read(chg, TYPE_C_SNK_STATUS_REG, &value); if (rc < 0) { - dev_err(chg->dev, "failed to write TYPE_C_CFG_REG rc=%d\n", + dev_err(chg->dev, "failed to read TYPE_C_SNK_STATUS_REG rc=%d\n", rc); return rc; } + if (!(value & SNK_DAM_MASK)) { + rc = smblib_masked_write(chg, TYPE_C_CFG_REG, + BC1P2_START_ON_CC_BIT, 0); + if (rc < 0) { + dev_err(chg->dev, "failed to write TYPE_C_CFG_REG rc=%d\n", + rc); + + return rc; + } + } + /* Use simple write to clear interrupts */ rc = smblib_write(chg, TYPE_C_INTERRUPT_EN_CFG_1_REG, 0); if (rc < 0) { diff --git a/drivers/power/supply/qcom/smb5-reg.h b/drivers/power/supply/qcom/smb5-reg.h index 3aa2c2ea1d90..71b4de85c159 100644 --- a/drivers/power/supply/qcom/smb5-reg.h +++ b/drivers/power/supply/qcom/smb5-reg.h @@ -335,6 +335,7 @@ enum { ********************************/ #define TYPE_C_SNK_STATUS_REG (TYPEC_BASE + 0x06) #define DETECTED_SRC_TYPE_MASK GENMASK(6, 0) +#define SNK_DAM_MASK GENMASK(6, 4) #define SNK_DAM_500MA_BIT BIT(6) #define SNK_DAM_1500MA_BIT BIT(5) #define SNK_DAM_3000MA_BIT BIT(4)