summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-08-26 14:48:52 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-26 14:48:51 -0700
commitd319bf625abd19806faec4ce2558665065711d28 (patch)
tree5d5d118150460b4d69c55f53ec3315a6e0aa914f
parent67f8c022ca5b000ee93fe8c7d039ec9bf3071908 (diff)
parent52bf80303daa9cec9630a1f615d1f050dcf542b2 (diff)
Merge "qcom_charger: smb-lib: support faking battery capacity"
-rw-r--r--drivers/power/qcom-charger/qpnp-smb2.c4
-rw-r--r--drivers/power/qcom-charger/smb-lib.c16
-rw-r--r--drivers/power/qcom-charger/smb-lib.h4
-rw-r--r--drivers/power/qcom-charger/smb138x-charger.c7
4 files changed, 29 insertions, 2 deletions
diff --git a/drivers/power/qcom-charger/qpnp-smb2.c b/drivers/power/qcom-charger/qpnp-smb2.c
index 83cb87f94665..90a93064ca84 100644
--- a/drivers/power/qcom-charger/qpnp-smb2.c
+++ b/drivers/power/qcom-charger/qpnp-smb2.c
@@ -528,6 +528,9 @@ static int smb2_batt_set_prop(struct power_supply *psy,
case POWER_SUPPLY_PROP_SYSTEM_TEMP_LEVEL:
rc = smblib_set_prop_system_temp_level(chg, val);
break;
+ case POWER_SUPPLY_PROP_CAPACITY:
+ rc = smblib_set_prop_batt_capacity(chg, val);
+ break;
default:
rc = -EINVAL;
}
@@ -541,6 +544,7 @@ static int smb2_batt_prop_is_writeable(struct power_supply *psy,
switch (psp) {
case POWER_SUPPLY_PROP_INPUT_SUSPEND:
case POWER_SUPPLY_PROP_SYSTEM_TEMP_LEVEL:
+ case POWER_SUPPLY_PROP_CAPACITY:
return 1;
default:
break;
diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c
index eae00d4e1a1b..68021f32fafa 100644
--- a/drivers/power/qcom-charger/smb-lib.c
+++ b/drivers/power/qcom-charger/smb-lib.c
@@ -759,6 +759,11 @@ int smblib_get_prop_batt_capacity(struct smb_charger *chg,
{
int rc = -EINVAL;
+ if (chg->fake_capacity >= 0) {
+ val->intval = chg->fake_capacity;
+ return 0;
+ }
+
if (chg->bms_psy)
rc = power_supply_get_property(chg->bms_psy,
POWER_SUPPLY_PROP_CAPACITY, val);
@@ -913,6 +918,16 @@ int smblib_set_prop_input_suspend(struct smb_charger *chg,
return rc;
}
+int smblib_set_prop_batt_capacity(struct smb_charger *chg,
+ const union power_supply_propval *val)
+{
+ chg->fake_capacity = val->intval;
+
+ power_supply_changed(chg->batt_psy);
+
+ return 0;
+}
+
int smblib_set_prop_system_temp_level(struct smb_charger *chg,
const union power_supply_propval *val)
{
@@ -1917,6 +1932,7 @@ int smblib_init(struct smb_charger *chg)
INIT_WORK(&chg->pl_detect_work, smblib_pl_detect_work);
INIT_DELAYED_WORK(&chg->hvdcp_detect_work, smblib_hvdcp_detect_work);
INIT_DELAYED_WORK(&chg->pl_taper_work, smblib_pl_taper_work);
+ chg->fake_capacity = -EINVAL;
switch (chg->mode) {
case PARALLEL_MASTER:
diff --git a/drivers/power/qcom-charger/smb-lib.h b/drivers/power/qcom-charger/smb-lib.h
index 12074fb5ce9d..b56cd24adde1 100644
--- a/drivers/power/qcom-charger/smb-lib.h
+++ b/drivers/power/qcom-charger/smb-lib.h
@@ -143,6 +143,8 @@ struct smb_charger {
int system_temp_level;
int thermal_levels;
int *thermal_mitigation;
+
+ int fake_capacity;
};
int smblib_read(struct smb_charger *chg, u16 addr, u8 *val);
@@ -194,6 +196,8 @@ int smblib_get_prop_system_temp_level(struct smb_charger *chg,
int smblib_set_prop_input_suspend(struct smb_charger *chg,
const union power_supply_propval *val);
+int smblib_set_prop_batt_capacity(struct smb_charger *chg,
+ const union power_supply_propval *val);
int smblib_set_prop_system_temp_level(struct smb_charger *chg,
const union power_supply_propval *val);
diff --git a/drivers/power/qcom-charger/smb138x-charger.c b/drivers/power/qcom-charger/smb138x-charger.c
index 329ee7210c1f..86cc33badbc0 100644
--- a/drivers/power/qcom-charger/smb138x-charger.c
+++ b/drivers/power/qcom-charger/smb138x-charger.c
@@ -311,9 +311,11 @@ static int smb138x_batt_set_prop(struct power_supply *psy,
case POWER_SUPPLY_PROP_INPUT_SUSPEND:
rc = smblib_set_prop_input_suspend(chg, val);
break;
+ case POWER_SUPPLY_PROP_CAPACITY:
+ rc = smblib_set_prop_batt_capacity(chg, val);
+ break;
default:
- pr_err("batt power supply set prop %d not supported\n",
- prop);
+ pr_err("batt power supply set prop %d not supported\n", prop);
return -EINVAL;
}
@@ -325,6 +327,7 @@ static int smb138x_batt_prop_is_writeable(struct power_supply *psy,
{
switch (prop) {
case POWER_SUPPLY_PROP_INPUT_SUSPEND:
+ case POWER_SUPPLY_PROP_CAPACITY:
return 1;
default:
break;