aboutsummaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorJohan Palsson <johan.palsson@stericsson.com>2011-02-10 10:10:24 +0100
committerJonas ABERG <jonas.aberg@stericsson.com>2011-02-11 09:48:31 +0100
commitc20feeed362e64ab99e6690b3104b878755f6002 (patch)
tree00e1034142fb6b1573485014739e7b1d588c26eb /drivers/power
parentcd5fff19aba38115c6a248754956276753e79ec0 (diff)
power: ab8500_bm: Possibility to disable charging of unknown batteries
It is possible to disable charging of batteries that are identified as unknown. This functionality is however disabled as default ST-Ericsson ID: WP323569 Change-Id: I312ddf1e06c4157f875af8cea234a92f0c83689a Signed-off-by: Johan Palsson <johan.palsson@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/14869 Reviewed-by: QATOOLS Reviewed-by: Johan GARDSMARK <johan.gardsmark@stericsson.com> Reviewed-by: Linus WALLEIJ <linus.walleij@stericsson.com>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/ab8500_chargalg.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/drivers/power/ab8500_chargalg.c b/drivers/power/ab8500_chargalg.c
index a92aed90414..3800bc0ab62 100644
--- a/drivers/power/ab8500_chargalg.c
+++ b/drivers/power/ab8500_chargalg.c
@@ -124,6 +124,7 @@ static const char *states[] = {
};
struct ab8500_chargalg_events {
+ bool batt_unknown;
bool mainextchnotok;
bool batt_ovv;
bool batt_rem;
@@ -846,7 +847,19 @@ static int ab8500_chargalg_get_ext_psy_data(struct device *dev, void *data)
case POWER_SUPPLY_PROP_TECHNOLOGY:
if (!ext->get_property(ext,
POWER_SUPPLY_PROP_TECHNOLOGY, &ret)) {
+ switch (ext->type) {
+ case POWER_SUPPLY_TYPE_BATTERY:
+ if (ret.intval)
+ di->events.batt_unknown =
+ false;
+ else
+ di->events.batt_unknown =
+ true;
+ break;
+ default:
+ break;
}
+ }
break;
case POWER_SUPPLY_PROP_TEMP:
if (!ext->get_property(ext,
@@ -892,10 +905,10 @@ static void ab8500_chargalg_external_power_changed(struct power_supply *psy)
{
struct ab8500_chargalg *di = to_ab8500_chargalg_device_info(psy);
- class_for_each_device(power_supply_class, NULL,
- &di->chargalg_psy, ab8500_chargalg_get_ext_psy_data);
-
- /* Trigger execution of the algorithm instantly */
+ /*
+ * Trigger execution of the algorithm instantly and read
+ * all power_supply properties there instead
+ */
queue_work(di->chargalg_wq, &di->chargalg_work);
}
@@ -919,8 +932,13 @@ static void ab8500_chargalg_algorithm(struct ab8500_chargalg *di)
ab8500_chargalg_check_temp(di);
charger_status = ab8500_chargalg_check_chargers(di);
- /* First check if we have a charger connected */
- if (!charger_status) {
+ /*
+ * First check if we have a charger connected.
+ * Also we don't allow charging of unknown batteries if configured
+ * this way
+ */
+ if (!charger_status ||
+ (di->events.batt_unknown && !di->bat->chg_unknown_bat)) {
if (di->charge_state != STATE_HANDHELD) {
di->events.safety_timer_expired = false;
ab8500_chargalg_state_to(di, STATE_HANDHELD_INIT);