diff options
| author | Abhijeet Dharmapurikar <adharmap@codeaurora.org> | 2016-05-17 18:38:42 -0700 |
|---|---|---|
| committer | Kyle Yan <kyan@codeaurora.org> | 2016-06-07 11:56:34 -0700 |
| commit | 55b262dfa39814a17738416e21580ecd20163c97 (patch) | |
| tree | e920c285c3452515c21db0bdc7faef8be6b702ee /drivers/power | |
| parent | 77fd5db7ee660916f6909a6e004e70e61a4bf5fe (diff) | |
qcom-charger: smb2: allow vfloat and fcc via psy properties
Currently the charger driver sets the charge current based on device tree
property. Allow setting fast charge current (fcc) via power supply (psy)
property. Moreover the current voter for fcc is a min voter, change
that to max voter so that values above what device tree has set can
be used.
Similarly, introduce a max voter for battery float voltage (vfloat) and
set it to defaults via device tree.
CRs-Fixed: 1018090
Change-Id: I691984543f8beb3c52d3d578c7cc311c285a1fcc
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Diffstat (limited to 'drivers/power')
| -rw-r--r-- | drivers/power/qcom-charger/qpnp-smb2.c | 8 | ||||
| -rw-r--r-- | drivers/power/qcom-charger/smb-lib.c | 26 | ||||
| -rw-r--r-- | drivers/power/qcom-charger/smb-lib.h | 1 |
3 files changed, 32 insertions, 3 deletions
diff --git a/drivers/power/qcom-charger/qpnp-smb2.c b/drivers/power/qcom-charger/qpnp-smb2.c index ab4ab0c31e08..188a4e02d19f 100644 --- a/drivers/power/qcom-charger/qpnp-smb2.c +++ b/drivers/power/qcom-charger/qpnp-smb2.c @@ -26,6 +26,7 @@ #include "pmic-voter.h" #define SMB2_DEFAULT_FCC_UA 1000000 +#define SMB2_DEFAULT_FV_UV 4350000 #define SMB2_DEFAULT_ICL_UA 1500000 static struct smb_params v1_params = { @@ -98,6 +99,11 @@ static int smb2_parse_dt(struct smb2 *chip) chip->dt.fcc_ua = SMB2_DEFAULT_FCC_UA; rc = of_property_read_u32(node, + "qcom,fv-max-uv", &chip->dt.fv_uv); + if (rc < 0) + chip->dt.fv_uv = SMB2_DEFAULT_FV_UV; + + rc = of_property_read_u32(node, "qcom,usb-icl-ua", &chip->dt.usb_icl_ua); if (rc < 0) chip->dt.usb_icl_ua = SMB2_DEFAULT_ICL_UA; @@ -477,6 +483,8 @@ static int smb2_init_hw(struct smb2 *chip) DEFAULT_VOTER, chip->dt.suspend_input, 0); vote(chg->fcc_votable, DEFAULT_VOTER, true, chip->dt.fcc_ua); + vote(chg->fv_votable, + DEFAULT_VOTER, true, chip->dt.fv_uv); vote(chg->usb_icl_votable, DEFAULT_VOTER, true, chip->dt.usb_icl_ua); vote(chg->dc_icl_votable, diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c index 33824479a84d..263b8b3bd672 100644 --- a/drivers/power/qcom-charger/smb-lib.c +++ b/drivers/power/qcom-charger/smb-lib.c @@ -325,6 +325,16 @@ int smblib_fcc_vote_callback(struct device *dev, return rc; } +int smblib_fv_vote_callback(struct device *dev, + int fv_uv, int client, int last_fv_uv, int last_client) +{ + struct smb_charger *chg = dev_get_drvdata(dev); + int rc = 0; + + rc = smblib_set_charge_param(chg, &chg->param.fv, fv_uv); + return rc; +} + #define USBIN_25MA 25000 #define USBIN_100MA 100000 int smblib_usb_icl_vote_callback(struct device *dev, @@ -1272,8 +1282,9 @@ static void smblib_hvdcp_detect_work(struct work_struct *work) * INIT * * ******/ -#define SMB_DEFAULT_FCC_UA 1000000 -#define SMB_DEFAULT_ICL_UA 1500000 +#define SMB_DEFAULT_FCC_UA 1000000 +#define SMB_DEFAULT_FV_UV 4350000 +#define SMB_DEFAULT_ICL_UA 1500000 int smblib_init(struct smb_charger *chg) { @@ -1301,7 +1312,7 @@ int smblib_init(struct smb_charger *chg) } chg->fcc_votable = create_votable(chg->dev, - "FCC", VOTE_MIN, + "FCC", VOTE_MAX, NUM_VOTERS, SMB_DEFAULT_FCC_UA, smblib_fcc_vote_callback); if (IS_ERR(chg->fcc_votable)) { @@ -1309,6 +1320,15 @@ int smblib_init(struct smb_charger *chg) return rc; } + chg->fv_votable = create_votable(chg->dev, + "FV", VOTE_MAX, + NUM_VOTERS, SMB_DEFAULT_FV_UV, + smblib_fv_vote_callback); + if (IS_ERR(chg->fv_votable)) { + rc = PTR_ERR(chg->fv_votable); + return rc; + } + chg->usb_icl_votable = create_votable(chg->dev, "USB_ICL", VOTE_MIN, NUM_VOTERS, SMB_DEFAULT_ICL_UA, diff --git a/drivers/power/qcom-charger/smb-lib.h b/drivers/power/qcom-charger/smb-lib.h index b688b5ebf0af..a7e34552370e 100644 --- a/drivers/power/qcom-charger/smb-lib.h +++ b/drivers/power/qcom-charger/smb-lib.h @@ -79,6 +79,7 @@ struct smb_charger { struct votable *usb_suspend_votable; struct votable *dc_suspend_votable; struct votable *fcc_votable; + struct votable *fv_votable; struct votable *usb_icl_votable; struct votable *dc_icl_votable; struct votable *pd_allowed_votable; |
