diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2014-04-14 16:07:39 +0530 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2014-05-07 01:16:10 -0700 |
commit | bbd4234a669bffe1e424dbab839d5047507b7cf5 (patch) | |
tree | 053bbd5250df56da3e97b955740e46f5e8aadd03 /drivers/power | |
parent | 7181ddb1abd732a3f2c2e1e2000d1e2fc79c51e4 (diff) |
power: bq2419x: rewrite suspend callback as per flow diagram
Rewrite suspend callback to easily map with flow diagram and
understand the code path. This rewrite removes the complexity
from codes.
Change-Id: Ia8747f2f40aec9e5515849a904f08ef018f04b97
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/395810
Reviewed-on: http://git-master/r/405638
GVS: Gerrit_Virtual_Submit
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/bq2419x-charger.c | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/drivers/power/bq2419x-charger.c b/drivers/power/bq2419x-charger.c index ee410c6d73af..796977d633e3 100644 --- a/drivers/power/bq2419x-charger.c +++ b/drivers/power/bq2419x-charger.c @@ -1719,6 +1719,7 @@ end: static int bq2419x_suspend(struct device *dev) { struct bq2419x_chip *bq2419x = dev_get_drvdata(dev); + int next_wakeup = 0; int ret; if (!bq2419x->battery_presense) @@ -1726,34 +1727,42 @@ static int bq2419x_suspend(struct device *dev) battery_charging_restart_cancel(bq2419x->bc_dev); + if (!bq2419x->cable_connected || bq2419x->in_current_limit <= 500) + goto charge_500; + ret = bq2419x_reset_wdt(bq2419x, "Suspend"); if (ret < 0) dev_err(bq2419x->dev, "Reset WDT failed: %d\n", ret); - if (bq2419x->cable_connected && - !bq2419x->disable_suspend_during_charging && - (bq2419x->in_current_limit > 500)) { - battery_charging_wakeup(bq2419x->bc_dev, - bq2419x->wdt_refresh_timeout); - } else if (bq2419x->cable_connected && - bq2419x->auto_recharge_time_supend && - (bq2419x->in_current_limit > 500) && - (bq2419x->chg_status == BATTERY_CHARGING_DONE)){ - battery_charging_wakeup(bq2419x->bc_dev, - bq2419x->auto_recharge_time_supend); - ret = bq2419x_set_charging_current_suspend( - bq2419x, 500); - if (ret < 0) - dev_err(bq2419x->dev, - "Configuration of charging failed: %d\n", ret); - } else { - ret = bq2419x_set_charging_current_suspend(bq2419x, 500); - if (ret < 0) + switch (bq2419x->chg_status) { + case BATTERY_CHARGING_DONE: + next_wakeup = bq2419x->auto_recharge_time_supend; + break; + case BATTERY_CHARGING: + if (bq2419x->disable_suspend_during_charging) { dev_err(bq2419x->dev, - "Configuration of charging failed: %d\n", ret); + "ERROR: Device suspended during charging\n"); + next_wakeup = bq2419x->auto_recharge_time_supend; + } else { + next_wakeup = bq2419x->wdt_refresh_timeout; + } + break; + default: + break; } + if (next_wakeup) + battery_charging_wakeup(bq2419x->bc_dev, next_wakeup); + + if (next_wakeup == bq2419x->auto_recharge_time_supend) + goto charge_500; + return 0; +charge_500: + ret = bq2419x_set_charging_current_suspend(bq2419x, 500); + if (ret < 0) + dev_err(bq2419x->dev, "Config of charging failed: %d\n", ret); + return ret; } static int bq2419x_resume(struct device *dev) |