summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSubbaraman Narayanamurthy <subbaram@codeaurora.org>2016-10-10 20:22:48 -0700
committerSubbaraman Narayanamurthy <subbaram@codeaurora.org>2016-10-10 20:26:01 -0700
commitc7efbfffc8932ba4afcb246880bef020cedd4e62 (patch)
treef63f98d14c6f4a6134b0cb2a0e3bb48aff59ce95
parent21005fbb17c0b223beaa71ec5b171246299ffdcf (diff)
qpnp-smb2: smb-lib: update reading charge_done property
Instead of setting charge_done property from smb-lib when handling chg_state_change interrupt, move it to a separate function which reads the hardware register directly and updates it. Since this doesn't require a set_property callback, remove it. Change-Id: I1005b135f5e16111257902413ef2b44c09cb1cfc Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
-rw-r--r--drivers/power/qcom-charger/qpnp-smb2.c5
-rw-r--r--drivers/power/qcom-charger/smb-lib.c22
-rw-r--r--drivers/power/qcom-charger/smb-lib.h2
3 files changed, 21 insertions, 8 deletions
diff --git a/drivers/power/qcom-charger/qpnp-smb2.c b/drivers/power/qcom-charger/qpnp-smb2.c
index 8fa4fe301676..881fd3888b96 100644
--- a/drivers/power/qcom-charger/qpnp-smb2.c
+++ b/drivers/power/qcom-charger/qpnp-smb2.c
@@ -664,7 +664,7 @@ static int smb2_batt_get_prop(struct power_supply *psy,
val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
break;
case POWER_SUPPLY_PROP_CHARGE_DONE:
- val->intval = chg->chg_done;
+ rc = smblib_get_prop_batt_charge_done(chg, val);
break;
default:
pr_err("batt power supply prop %d not supported\n", psp);
@@ -696,9 +696,6 @@ static int smb2_batt_set_prop(struct power_supply *psy,
case POWER_SUPPLY_PROP_CAPACITY:
rc = smblib_set_prop_batt_capacity(chg, val);
break;
- case POWER_SUPPLY_PROP_CHARGE_DONE:
- chg->chg_done = val->intval;
- break;
default:
rc = -EINVAL;
}
diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c
index a869fc592474..67e8a61bb95b 100644
--- a/drivers/power/qcom-charger/smb-lib.c
+++ b/drivers/power/qcom-charger/smb-lib.c
@@ -1093,6 +1093,24 @@ int smblib_get_prop_step_chg_step(struct smb_charger *chg,
return rc;
}
+int smblib_get_prop_batt_charge_done(struct smb_charger *chg,
+ union power_supply_propval *val)
+{
+ int rc;
+ u8 stat;
+
+ rc = smblib_read(chg, BATTERY_CHARGER_STATUS_1_REG, &stat);
+ if (rc < 0) {
+ dev_err(chg->dev, "Couldn't read BATTERY_CHARGER_STATUS_1 rc=%d\n",
+ rc);
+ return rc;
+ }
+
+ stat = stat & BATTERY_CHARGER_STATUS_MASK;
+ val->intval = (stat == TERMINATE_CHARGE);
+ return 0;
+}
+
/***********************
* BATTERY PSY SETTERS *
***********************/
@@ -1716,7 +1734,6 @@ static void smblib_pl_handle_chg_state_change(struct smb_charger *chg, u8 stat)
irqreturn_t smblib_handle_chg_state_change(int irq, void *data)
{
- union power_supply_propval pval = {0, };
struct smb_irq_data *irq_data = data;
struct smb_charger *chg = irq_data->parent_data;
u8 stat;
@@ -1733,9 +1750,6 @@ irqreturn_t smblib_handle_chg_state_change(int irq, void *data)
stat = stat & BATTERY_CHARGER_STATUS_MASK;
smblib_pl_handle_chg_state_change(chg, stat);
- pval.intval = (stat == TERMINATE_CHARGE);
- power_supply_set_property(chg->batt_psy, POWER_SUPPLY_PROP_CHARGE_DONE,
- &pval);
power_supply_changed(chg->batt_psy);
return IRQ_HANDLED;
}
diff --git a/drivers/power/qcom-charger/smb-lib.h b/drivers/power/qcom-charger/smb-lib.h
index 1f2457e04ed6..4b2bfc1aafd3 100644
--- a/drivers/power/qcom-charger/smb-lib.h
+++ b/drivers/power/qcom-charger/smb-lib.h
@@ -222,6 +222,8 @@ int smblib_get_prop_batt_status(struct smb_charger *chg,
union power_supply_propval *val);
int smblib_get_prop_batt_charge_type(struct smb_charger *chg,
union power_supply_propval *val);
+int smblib_get_prop_batt_charge_done(struct smb_charger *chg,
+ union power_supply_propval *val);
int smblib_get_prop_batt_health(struct smb_charger *chg,
union power_supply_propval *val);
int smblib_get_prop_system_temp_level(struct smb_charger *chg,