diff options
author | Pradeep Goudagunta <pgoudagunta@nvidia.com> | 2013-03-19 18:07:43 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2013-03-26 10:23:48 -0700 |
commit | 6366a6cd1ad2e5300d7f2438732ded7d1f53a988 (patch) | |
tree | cd99de165abb879b7915d5bddbf5b1f391e6c545 | |
parent | 9f27535c20e6ff18614d4ac418d8788b68c23cc3 (diff) |
power: bq2419x: Restart CHG for periodically drained battery
Restart charging after certain timeout, for battery full,
charging fault and safety timer expire cases. To charge
periodically drained battery.
Bug 1252277
Change-Id: I7b3a7f8783fdc7d1c480a32ba1409678a240577f
Signed-off-by: Pradeep Goudagunta <pgoudagunta@nvidia.com>
Reviewed-on: http://git-master/r/210816
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
-rw-r--r-- | drivers/power/bq2419x-charger.c | 21 | ||||
-rw-r--r-- | include/linux/power/bq2419x-charger.h | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/drivers/power/bq2419x-charger.c b/drivers/power/bq2419x-charger.c index cc5fc03b46d7..5998ab293158 100644 --- a/drivers/power/bq2419x-charger.c +++ b/drivers/power/bq2419x-charger.c @@ -92,6 +92,8 @@ struct bq2419x_chip { struct rtc_device *rtc; int stop_thread; int suspended; + int chg_restart_timeout; + int chg_restart_time; }; static enum power_supply_property bq2419x_psy_props[] = { @@ -448,6 +450,21 @@ static void bq2419x_work_thread(struct kthread_work *work) if (bq2419x->stop_thread) return; + if (bq2419x->chg_restart_timeout) { + mutex_lock(&bq2419x->mutex); + bq2419x->chg_restart_timeout--; + if (!bq2419x->chg_restart_timeout) { + ret = bq2419x_charger_enable(bq2419x); + if (ret < 0) + dev_err(bq2419x->dev, + "Charger enable failed %d", ret); + } + if (bq2419x->suspended) + bq2419x->chg_restart_timeout = 0; + + mutex_unlock(&bq2419x->mutex); + } + ret = bq2419x_reset_wdt(bq2419x, "THREAD"); if (ret < 0) dev_err(bq2419x->dev, @@ -509,6 +526,8 @@ static irqreturn_t bq2419x_irq(int irq, void *data) case BQ2419x_FAULT_CHRG_SAFTY: dev_err(bq2419x->dev, "Charging Fault: Safety timer expiration\n"); + bq2419x->chg_restart_timeout = bq2419x->chg_restart_time / + bq2419x->wdt_refresh_timeout; break; default: break; @@ -775,12 +794,14 @@ static int __devinit bq2419x_probe(struct i2c_client *client, bq2419x->update_status = pdata->bcharger_pdata->update_status; bq2419x->rtc_alarm_time = pdata->bcharger_pdata->rtc_alarm_time; bq2419x->wdt_time_sec = pdata->bcharger_pdata->wdt_timeout; + bq2419x->chg_restart_time = pdata->bcharger_pdata->chg_restart_time; bq2419x->wdt_refresh_timeout = 25; i2c_set_clientdata(client, bq2419x); bq2419x->irq = client->irq; bq2419x->rtc = alarmtimer_get_rtcdev(); mutex_init(&bq2419x->mutex); bq2419x->suspended = 0; + bq2419x->chg_restart_timeout = 0; ret = bq2419x_show_chip_version(bq2419x); if (ret < 0) { diff --git a/include/linux/power/bq2419x-charger.h b/include/linux/power/bq2419x-charger.h index d51e6db445ae..2d13dfbb1ff5 100644 --- a/include/linux/power/bq2419x-charger.h +++ b/include/linux/power/bq2419x-charger.h @@ -110,6 +110,7 @@ struct bq2419x_charger_platform_data { int rtc_alarm_time; int num_consumer_supplies; struct regulator_consumer_supply *consumer_supplies; + int chg_restart_time; }; /* |