summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-05-17 18:38:42 -0700
committerKyle Yan <kyan@codeaurora.org>2016-06-07 11:56:34 -0700
commit55b262dfa39814a17738416e21580ecd20163c97 (patch)
treee920c285c3452515c21db0bdc7faef8be6b702ee /drivers/power
parent77fd5db7ee660916f6909a6e004e70e61a4bf5fe (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.c8
-rw-r--r--drivers/power/qcom-charger/smb-lib.c26
-rw-r--r--drivers/power/qcom-charger/smb-lib.h1
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;