summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPradeep Goudagunta <pgoudagunta@nvidia.com>2013-03-19 18:07:43 +0530
committerSimone Willett <swillett@nvidia.com>2013-03-26 10:23:48 -0700
commit6366a6cd1ad2e5300d7f2438732ded7d1f53a988 (patch)
treecd99de165abb879b7915d5bddbf5b1f391e6c545
parent9f27535c20e6ff18614d4ac418d8788b68c23cc3 (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.c21
-rw-r--r--include/linux/power/bq2419x-charger.h1
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;
};
/*