diff options
author | Harry Yang <harryy@codeaurora.org> | 2016-11-07 13:32:52 -0800 |
---|---|---|
committer | Harry Yang <harryy@codeaurora.org> | 2016-11-10 22:45:43 -0800 |
commit | d5c5cd27e0d0b8f8506e4d71f90d2b29b9a6a4b8 (patch) | |
tree | 40fa79828aa3732afb86eca043a18ef88dae311f /drivers/power | |
parent | 8a9006341de00570189704d327ee4a6da4f0d3b8 (diff) |
qcom-charger: smblib: add support for pd current setting
Forcing a certain current limit is not supported in the current
driver, but well needed in when pd is active.
In this change, ICL_OVERRIDE/APSD and USB mode are updated, so
that PD can alter current limit by simply voting the ICL
setting.
Change-Id: I8d3ec938d433fe9bdbb8c091873c07e75c49d632
Signed-off-by: Harry Yang <harryy@codeaurora.org>
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/qcom-charger/smb-lib.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c index 05369f6826d5..144169ea4930 100644 --- a/drivers/power/qcom-charger/smb-lib.c +++ b/drivers/power/qcom-charger/smb-lib.c @@ -2014,6 +2014,45 @@ int smblib_set_prop_pd_active(struct smb_charger *chg, "Couldn't enable vconn on CC line rc=%d\n", rc); return rc; } + + rc = vote(chg->usb_icl_votable, PD_VOTER, true, USBIN_500MA); + if (rc < 0) { + smblib_err(chg, "Couldn't vote for USB ICL rc=%d\n", + rc); + return rc; + } + + rc = smblib_masked_write(chg, USBIN_ICL_OPTIONS_REG, + USBIN_MODE_CHG_BIT, USBIN_MODE_CHG_BIT); + if (rc < 0) { + smblib_err(chg, + "Couldn't change USB mode rc=%d\n", rc); + return rc; + } + + rc = smblib_masked_write(chg, CMD_APSD_REG, + ICL_OVERRIDE_BIT, ICL_OVERRIDE_BIT); + if (rc < 0) { + smblib_err(chg, + "Couldn't override APSD rc=%d\n", rc); + return rc; + } + } else { + rc = smblib_masked_write(chg, CMD_APSD_REG, + ICL_OVERRIDE_BIT, 0); + if (rc < 0) { + smblib_err(chg, + "Couldn't override APSD rc=%d\n", rc); + return rc; + } + + rc = smblib_masked_write(chg, USBIN_ICL_OPTIONS_REG, + USBIN_MODE_CHG_BIT, 0); + if (rc < 0) { + smblib_err(chg, + "Couldn't change USB mode rc=%d\n", rc); + return rc; + } } /* CC pin selection s/w override in PD session; h/w otherwise. */ |