From 91bd52d1b1eb9cacee9883bba874f594b314ed65 Mon Sep 17 00:00:00 2001 From: Laxman Dewangan Date: Mon, 21 Apr 2014 13:12:22 +0530 Subject: power: bq2419x: reconfigure BQ on the safety timer expire When safety timer expire, it need to reconfigure all BQ parameter as safety timer expiry reset all values to default. bug 1503606 Change-Id: I17f5a51be99ab7bde28acb18944dec110eee684a Signed-off-by: Laxman Dewangan Reviewed-on: http://git-master/r/398769 Reviewed-on: http://git-master/r/405640 GVS: Gerrit_Virtual_Submit --- drivers/power/bq2419x-charger.c | 71 +++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 34 deletions(-) (limited to 'drivers/power') diff --git a/drivers/power/bq2419x-charger.c b/drivers/power/bq2419x-charger.c index 4e5f0d7d7a65..057c2646fa14 100644 --- a/drivers/power/bq2419x-charger.c +++ b/drivers/power/bq2419x-charger.c @@ -622,6 +622,32 @@ static void bq2419x_wdt_restart_wq(struct work_struct *work) dev_err(bq2419x->dev, "bq2419x_reset_wdt failed: %d\n", ret); } +static int bq2419x_reconfigure_charger_param(struct bq2419x_chip *bq2419x, + const char *from) +{ + int ret; + + dev_info(bq2419x->dev, "Reconfiguring charging param from %s\n", from); + ret = bq2419x_watchdog_init(bq2419x, bq2419x->wdt_time_sec, from); + if (ret < 0) { + dev_err(bq2419x->dev, "BQWDT init failed %d\n", ret); + return ret; + } + + ret = bq2419x_charger_init(bq2419x); + if (ret < 0) { + dev_err(bq2419x->dev, "Charger init failed: %d\n", ret); + return ret; + } + + ret = bq2419x_configure_charging_current(bq2419x, + bq2419x->in_current_limit); + if (ret < 0) { + dev_err(bq2419x->dev, "Current config failed: %d\n", ret); + return ret; + } + return ret; +} static int bq2419x_handle_safety_timer_expire(struct bq2419x_chip *bq2419x) { @@ -656,6 +682,12 @@ static int bq2419x_handle_safety_timer_expire(struct bq2419x_chip *bq2419x) dev_err(dev, "PWR_ON_REG update failed %d\n", ret); return ret; } + + ret = bq2419x_reconfigure_charger_param(bq2419x, "SAFETY-TIMER_EXPIRE"); + if (ret < 0) { + dev_err(dev, "Reconfig of BQ parm failed: %d\n", ret); + return ret; + } return ret; } @@ -683,23 +715,9 @@ static irqreturn_t bq2419x_irq(int irq, void *data) if (val & BQ2419x_FAULT_WATCHDOG_FAULT) { bq_chg_err(bq2419x, "WatchDog Expired\n"); - ret = bq2419x_watchdog_init(bq2419x, - bq2419x->wdt_time_sec, "ISR"); - if (ret < 0) { - dev_err(bq2419x->dev, "BQWDT init failed %d\n", ret); - return ret; - } - - ret = bq2419x_charger_init(bq2419x); - if (ret < 0) { - dev_err(bq2419x->dev, "Charger init failed: %d\n", ret); - return ret; - } - - ret = bq2419x_configure_charging_current(bq2419x, - bq2419x->in_current_limit); + ret = bq2419x_reconfigure_charger_param(bq2419x, "WDT-EXP-ISR"); if (ret < 0) { - dev_err(bq2419x->dev, "bq2419x init failed: %d\n", ret); + dev_err(bq2419x->dev, "BQ reconfig failed %d\n", ret); return ret; } } @@ -1785,25 +1803,10 @@ static int bq2419x_resume(struct device *dev) if (val & BQ2419x_FAULT_WATCHDOG_FAULT) { bq_chg_err(bq2419x, "Watchdog Timer Expired\n"); - ret = bq2419x_watchdog_init(bq2419x, bq2419x->wdt_time_sec, - "RESUME"); - if (ret < 0) { - dev_err(bq2419x->dev, "BQWDT init failed %d\n", ret); - return ret; - } - - ret = bq2419x_charger_init(bq2419x); + ret = bq2419x_reconfigure_charger_param(bq2419x, + "WDT-EXP-RESUME"); if (ret < 0) { - dev_err(bq2419x->dev, "Charger init failed: %d\n", ret); - return ret; - } - - ret = bq2419x_set_charging_current(bq2419x->chg_rdev, - bq2419x->last_charging_current, - bq2419x->last_charging_current); - if (ret < 0) { - dev_err(bq2419x->dev, - "Set charging current failed: %d\n", ret); + dev_err(bq2419x->dev, "BQ reconfig failed %d\n", ret); return ret; } } else { -- cgit v1.2.3