diff options
author | Chanwoo Choi <cw00.choi@samsung.com> | 2012-11-22 11:53:46 +0400 |
---|---|---|
committer | Anton Vorontsov <anton.vorontsov@linaro.org> | 2012-12-17 10:43:23 +0400 |
commit | 0fa11dbc234268c4160b81f67220308dea3c156a (patch) | |
tree | f4a5b8b87de1c9a2797f262faa056d4a96df2a37 /drivers/power/charger-manager.c | |
parent | 7605c0b0d384ec98f80abc6ac2148a6cd993026c (diff) | |
download | linux-0fa11dbc234268c4160b81f67220308dea3c156a.tar.xz |
charger-manager: Fix bug related to checking fully charged state of battery
This patch fix bug related to checking fully charged state of battery when
charger-manager call is_full_charged() function. After reading property of
charger/fuel-gauge through power_supply API, val.intval is more than 1.
So, is_full_charged() function always return true. If true, battery means
fully charged state.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Myungjoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org>
Diffstat (limited to 'drivers/power/charger-manager.c')
-rw-r--r-- | drivers/power/charger-manager.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/drivers/power/charger-manager.c b/drivers/power/charger-manager.c index adb3a4b59cb3..633e41ca49ac 100644 --- a/drivers/power/charger-manager.c +++ b/drivers/power/charger-manager.c @@ -239,44 +239,37 @@ static bool is_full_charged(struct charger_manager *cm) int uV; /* If there is no battery, it cannot be charged */ - if (!is_batt_present(cm)) { - val.intval = 0; - goto out; - } + if (!is_batt_present(cm)) + return false; if (cm->fuel_gauge && desc->fullbatt_full_capacity > 0) { + val.intval = 0; + /* Not full if capacity of fuel gauge isn't full */ ret = cm->fuel_gauge->get_property(cm->fuel_gauge, POWER_SUPPLY_PROP_CHARGE_FULL, &val); - if (!ret && val.intval > desc->fullbatt_full_capacity) { - val.intval = 1; - goto out; - } + if (!ret && val.intval > desc->fullbatt_full_capacity) + return true; } /* Full, if it's over the fullbatt voltage */ if (desc->fullbatt_uV > 0) { ret = get_batt_uV(cm, &uV); - if (!ret && uV >= desc->fullbatt_uV) { - val.intval = 1; - goto out; - } + if (!ret && uV >= desc->fullbatt_uV) + return true; } /* Full, if the capacity is more than fullbatt_soc */ if (cm->fuel_gauge && desc->fullbatt_soc > 0) { + val.intval = 0; + ret = cm->fuel_gauge->get_property(cm->fuel_gauge, POWER_SUPPLY_PROP_CAPACITY, &val); - if (!ret && val.intval >= desc->fullbatt_soc) { - val.intval = 1; - goto out; - } + if (!ret && val.intval >= desc->fullbatt_soc) + return true; } - val.intval = 0; - -out: - return val.intval ? true : false; + return false; } /** |