diff options
author | Johan Palsson <johan.palsson@stericsson.com> | 2011-02-10 10:10:24 +0100 |
---|---|---|
committer | Jonas ABERG <jonas.aberg@stericsson.com> | 2011-02-11 09:48:31 +0100 |
commit | c20feeed362e64ab99e6690b3104b878755f6002 (patch) | |
tree | 00e1034142fb6b1573485014739e7b1d588c26eb /drivers/power | |
parent | cd5fff19aba38115c6a248754956276753e79ec0 (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.c | 30 |
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); |