From: Hakan Berg <hakan.b...@stericsson.com>

Add support for the battery over-voltage situation

Signed-off-by: Hakan Berg <hakan.b...@stericsson.com>
Signed-off-by: Mathieu Poirier <mathieu.poir...@linaro.org>
Reviewed-by: Karl KOMIEROWSKI <karl.komierow...@stericsson.com>
---
 drivers/power/ab8500_fg.c |   32 ++++++++++++++++----------------
 1 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/drivers/power/ab8500_fg.c b/drivers/power/ab8500_fg.c
index c4d9307..8507254 100644
--- a/drivers/power/ab8500_fg.c
+++ b/drivers/power/ab8500_fg.c
@@ -1842,24 +1842,26 @@ static void ab8500_fg_check_hw_failure_work(struct 
work_struct *work)
         * If we have had a battery over-voltage situation,
         * check ovv-bit to see if it should be reset.
         */
-       if (di->flags.bat_ovv) {
-               ret = abx500_get_register_interruptible(di->dev,
-                       AB8500_CHARGER, AB8500_CH_STAT_REG,
-                       &reg_value);
-               if (ret < 0) {
-                       dev_err(di->dev, "%s ab8500 read failed\n", __func__);
-                       return;
-               }
-               if ((reg_value & BATT_OVV) != BATT_OVV) {
-                       dev_dbg(di->dev, "Battery recovered from OVV\n");
-                       di->flags.bat_ovv = false;
+       ret = abx500_get_register_interruptible(di->dev,
+               AB8500_CHARGER, AB8500_CH_STAT_REG,
+               &reg_value);
+       if (ret < 0) {
+               dev_err(di->dev, "%s ab8500 read failed\n", __func__);
+               return;
+       }
+       if ((reg_value & BATT_OVV) == BATT_OVV) {
+               if (!di->flags.bat_ovv) {
+                       dev_dbg(di->dev, "Battery OVV\n");
+                       di->flags.bat_ovv = true;
                        power_supply_changed(&di->fg_psy);
-                       return;
                }
-
                /* Not yet recovered from ovv, reschedule this test */
                queue_delayed_work(di->fg_wq, &di->fg_check_hw_failure_work,
-                                  round_jiffies(HZ));
+                       HZ);
+               } else {
+                       dev_dbg(di->dev, "Battery recovered from OVV\n");
+                       di->flags.bat_ovv = false;
+                       power_supply_changed(&di->fg_psy);
        }
 }
 
@@ -2039,8 +2041,6 @@ static irqreturn_t ab8500_fg_batt_ovv_handler(int irq, 
void *_di)
        struct ab8500_fg *di = _di;
 
        dev_dbg(di->dev, "Battery OVV\n");
-       di->flags.bat_ovv = true;
-       power_supply_changed(&di->fg_psy);
 
        /* Schedule a new HW failure check */
        queue_delayed_work(di->fg_wq, &di->fg_check_hw_failure_work, 0);
-- 
1.7.5.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to