summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-08-23 12:55:49 -0700
committerAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-08-25 15:55:39 -0700
commit52bf80303daa9cec9630a1f615d1f050dcf542b2 (patch)
tree267b1dc92c75db308c2e7fd8d9515c5db6909489 /drivers/power
parente97b6a0e0217f7c072fdad6c50673cd7a64348e1 (diff)
qcom_charger: smb-lib: support faking battery capacity
On debug setups where the battery is not present, we need a way to fake battery capacity instead of reporting some incorrect /non-existent value. Provide means for the userspace to setup a fake battery capacity. Change-Id: Iff3ee1009d9c3215433cc267f016ef9cf2a9bff2 Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Diffstat (limited to 'drivers/power')
-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 18b02fbde5a6..e6c24d034823 100644
--- a/drivers/power/qcom-charger/smb-lib.c
+++ b/drivers/power/qcom-charger/smb-lib.c
@@ -749,6 +749,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);
@@ -903,6 +908,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)
{
@@ -1907,6 +1922,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 47839074b724..09ba9ddb942e 100644
--- a/drivers/power/qcom-charger/smb-lib.h
+++ b/drivers/power/qcom-charger/smb-lib.h
@@ -138,6 +138,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);
@@ -189,6 +191,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;