]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
power: bq2419x: toggle CE bit when safety timer expire
authorLaxman Dewangan <ldewangan@nvidia.com>
Mon, 21 Apr 2014 07:14:08 +0000 (12:44 +0530)
committerMandar Padmawar <mpadmawar@nvidia.com>
Wed, 7 May 2014 08:16:21 +0000 (01:16 -0700)
When safety timer expire then it is required to toggle the
CE bit from 1 to 0 and then 0 to 1 to restart the timer again.

Just setting 0 to 1 will not rstart the timer.

bug 1503606

Change-Id: Ic842da3cdaaaea0cfc99f9441b6aa31ef2110e67
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/398768
Reviewed-on: http://git-master/r/405639
GVS: Gerrit_Virtual_Submit

drivers/power/bq2419x-charger.c

index 796977d633e3e676a8a5f2184a89deedc7536b59..4e5f0d7d7a65aa5f329032a0dba0fe2a58f0b144 100644 (file)
@@ -626,7 +626,6 @@ static void bq2419x_wdt_restart_wq(struct work_struct *work)
 static int bq2419x_handle_safety_timer_expire(struct bq2419x_chip *bq2419x)
 {
        struct device *dev = bq2419x->dev;
-       unsigned int val;
        int ret;
 
        /* Reset saftty timer by setting 0 and then making 1 */
@@ -644,21 +643,18 @@ static int bq2419x_handle_safety_timer_expire(struct bq2419x_chip *bq2419x)
                return ret;
        }
 
-       /* Reenable charging if get disabled */
-       ret = regmap_read(bq2419x->regmap, BQ2419X_PWR_ON_REG, &val);
+       /* Need to toggel the Charging-enable bit from 1 to 0 to 1 */
+       ret = regmap_update_bits(bq2419x->regmap, BQ2419X_PWR_ON_REG,
+                       BQ2419X_ENABLE_CHARGE_MASK, 0);
        if (ret < 0) {
-               dev_err(dev, "PWR_ON_REG read failed %d", ret);
+               dev_err(dev, "PWR_ON_REG update failed %d\n", ret);
                return ret;
        }
-
-       if ((val & BQ2419X_ENABLE_CHARGE_MASK) == BQ2419X_DISABLE_CHARGE) {
-               ret = regmap_update_bits(bq2419x->regmap, BQ2419X_PWR_ON_REG,
-                               BQ2419X_ENABLE_CHARGE_MASK,
-                               BQ2419X_ENABLE_CHARGE);
-               if (ret < 0) {
-                       dev_err(dev, "PWR_ON_REG update failed %d\n", ret);
-                       return ret;
-               }
+       ret = regmap_update_bits(bq2419x->regmap, BQ2419X_PWR_ON_REG,
+                       BQ2419X_ENABLE_CHARGE_MASK, BQ2419X_ENABLE_CHARGE);
+       if (ret < 0) {
+               dev_err(dev, "PWR_ON_REG update failed %d\n", ret);
+               return ret;
        }
        return ret;
 }