summaryrefslogtreecommitdiff
path: root/drivers/power/qcom-charger
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-07-15 03:44:30 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-07-15 03:44:30 -0700
commitce7b3b170549564ee6d940d96df0e59d4539b66d (patch)
tree96e2e0349b0386abf24e4941e13bf255054b3421 /drivers/power/qcom-charger
parenta356bbf034aa60eb1b19ecc916487eddac9a46fe (diff)
parent57cd771117b3f2aa4be7b264708a511ad12cf342 (diff)
Merge "qcom-charger: show correct battery status while charging via wireless"
Diffstat (limited to 'drivers/power/qcom-charger')
-rw-r--r--drivers/power/qcom-charger/smb-lib.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c
index a7bda329cadd..8227183b22d9 100644
--- a/drivers/power/qcom-charger/smb-lib.c
+++ b/drivers/power/qcom-charger/smb-lib.c
@@ -662,7 +662,8 @@ int smblib_vconn_regulator_is_enabled(struct regulator_dev *rdev)
int smblib_get_prop_input_suspend(struct smb_charger *chg,
union power_supply_propval *val)
{
- val->intval = get_client_vote(chg->usb_suspend_votable, USER_VOTER);
+ val->intval = get_client_vote(chg->usb_suspend_votable, USER_VOTER) &&
+ get_client_vote(chg->dc_suspend_votable, USER_VOTER);
return 0;
}
@@ -697,15 +698,23 @@ int smblib_get_prop_batt_status(struct smb_charger *chg,
{
int rc;
u8 stat;
- union power_supply_propval online_pval = {0, };
+ union power_supply_propval pval = {0, };
+
+ smblib_get_prop_input_suspend(chg, &pval);
+ if (pval.intval) {
+ val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
+ return rc;
+ }
- rc = smblib_get_prop_usb_online(chg, &online_pval);
+ rc = smblib_read(chg, POWER_PATH_STATUS_REG, &stat);
if (rc < 0) {
- dev_err(chg->dev, "Couldn't get prop usb online rc=%d\n", rc);
+ dev_err(chg->dev, "Couldn't read POWER_PATH_STATUS rc=%d\n",
+ rc);
return rc;
}
- if (!online_pval.intval) {
+ if (!(stat & (USE_USBIN_BIT | USE_DCIN_BIT)) ||
+ !(stat & VALID_INPUT_POWER_SOURCE_BIT)) {
val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
return rc;
}
@@ -720,7 +729,7 @@ int smblib_get_prop_batt_status(struct smb_charger *chg,
stat);
stat = stat & BATTERY_CHARGER_STATUS_MASK;
- if (stat == COMPLETED_CHARGE || stat == INHIBIT_CHARGE)
+ if (stat >= COMPLETED_CHARGE)
val->intval = POWER_SUPPLY_STATUS_FULL;
else
val->intval = POWER_SUPPLY_STATUS_CHARGING;