]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
power: bq2419x: start thermal monitoring while charging
authorVenkat Reddy Talla <vreddytalla@nvidia.com>
Mon, 4 May 2015 07:40:20 +0000 (13:10 +0530)
committerLaxman Dewangan <ldewangan@nvidia.com>
Fri, 22 May 2015 05:41:18 +0000 (22:41 -0700)
start battery thermal mornitoring to change input current,
voltage limit and disable charging after 50C while charging
and stop battery thermal monitoring once charger cable
is removed or battery charging completed.
Replace HZ with 1000 while scheduling thermal work queue
to avoid any tick rate issue for different soc(T124, T210).

Bug 1633184

Change-Id: I0a52ea7a889c25d60f893e7bfb95305d48b6064f
Signed-off-by: Venkat Reddy Talla <vreddytalla@nvidia.com>
Reviewed-on: http://git-master/r/738441
(cherry picked from commit b32f5a09515f01faee8b2cab1d6b68a8aa7cc0d9)
Reviewed-on: http://git-master/r/740051
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
drivers/power/battery-charger-gauge-comm.c
drivers/power/bq2419x-charger.c

index 4c4a35c431238730deb83bc697d487b7745292a9..302646a83a70b38b6b2b58c53e0f899786988663 100644 (file)
@@ -2,7 +2,7 @@
  * battery-charger-gauge-comm.c -- Communication between battery charger and
  *     battery gauge driver.
  *
- * Copyright (c) 2013-2014, NVIDIA CORPORATION.  All rights reserved.
+ * Copyright (c) 2013-2015, NVIDIA CORPORATION.  All rights reserved.
  *
  * Author: Laxman Dewangan <ldewangan@nvidia.com>
  *
@@ -129,7 +129,7 @@ static void battery_charger_thermal_monitor_wq(struct work_struct *work)
                            "Battery thermal zone %s is not registered yet\n",
                                bc_dev->tz_name);
                        schedule_delayed_work(&bc_dev->poll_temp_monitor_wq,
-                           msecs_to_jiffies(bc_dev->polling_time_sec * HZ));
+                           msecs_to_jiffies(bc_dev->polling_time_sec * 1000));
                        bc_dev->battery_tz = NULL;
                        return;
                }
@@ -162,7 +162,7 @@ static void battery_charger_thermal_monitor_wq(struct work_struct *work)
 exit:
        if (bc_dev->start_monitoring)
                schedule_delayed_work(&bc_dev->poll_temp_monitor_wq,
-                       msecs_to_jiffies(bc_dev->polling_time_sec * HZ));
+                       msecs_to_jiffies(bc_dev->polling_time_sec * 1000));
        return;
 }
 #endif
@@ -198,7 +198,7 @@ int battery_charger_thermal_start_monitoring(
 
        bc_dev->start_monitoring = true;
        schedule_delayed_work(&bc_dev->poll_temp_monitor_wq,
-                       msecs_to_jiffies(bc_dev->polling_time_sec * HZ));
+                       msecs_to_jiffies(bc_dev->polling_time_sec * 1000));
        return 0;
 }
 EXPORT_SYMBOL_GPL(battery_charger_thermal_start_monitoring);
index c82ccdc406d7c2105ccab010c4e9a6082a64071a..fcfc3aac3e533afc0ea4ae55526d953bd019740b 100644 (file)
@@ -591,16 +591,22 @@ static int bq2419x_set_charging_current(struct regulator_dev *rdev,
                in_current_limit = 500;
                bq2419x->cable_connected = 0;
                bq2419x->chg_status = BATTERY_DISCHARGING;
+               battery_charger_thermal_stop_monitoring(
+                               bq2419x->bc_dev);
        } else if ((val & BQ2419x_CHRG_STATE_MASK) ==
                                BQ2419x_CHRG_STATE_CHARGE_DONE) {
                dev_info(bq2419x->dev, "Charging completed\n");
                bq2419x->chg_status = BATTERY_CHARGING_DONE;
                bq2419x->cable_connected = 1;
                in_current_limit = max_uA/1000;
+               battery_charger_thermal_stop_monitoring(
+                               bq2419x->bc_dev);
        } else {
                in_current_limit = max_uA/1000;
                bq2419x->cable_connected = 1;
                bq2419x->chg_status = BATTERY_CHARGING;
+               battery_charger_thermal_start_monitoring(
+                               bq2419x->bc_dev);
        }
        if (bq2419x->wake_lock_released)
                in_current_limit = 500;
@@ -869,6 +875,8 @@ sys_stat_read:
                                        bq2419x->chg_status);
                if (bq2419x->disable_suspend_during_charging)
                        battery_charger_release_wake_lock(bq2419x->bc_dev);
+               battery_charger_thermal_stop_monitoring(
+                                       bq2419x->bc_dev);
        }
 
        if ((val & BQ2419x_VSYS_STAT_MASK) == BQ2419x_VSYS_STAT_BATT_LOW)