power: android-battery: Allow changing current in charging state
authorDanke Xie <d.xie@sta.samsung.com>
Tue, 16 Oct 2012 22:24:41 +0000 (15:24 -0700)
committerArve Hjønnevåg <arve@android.com>
Mon, 1 Jul 2013 21:16:12 +0000 (14:16 -0700)
When a new charge source is set, enable charging and set the charging
current, unless we've paused charging due to battery full or battery
health problems.

Change-Id: I129e621c455a941e264dc431b4eb9db6a17c9f7b
Signed-off-by: Danke Xie <d.xie@sta.samsung.com>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
drivers/power/android_battery.c

index a5b5f65e019c53169e981b4370b38d306e30de85..dbba090a51e1e6ea42c7fb5e5cf06d0e85ea5e36 100644 (file)
@@ -412,15 +412,24 @@ static void android_bat_charger_work(struct work_struct *work)
        case CHARGE_SOURCE_AC:
                /*
                 * If charging status indicates a charger was already
-                * connected prior to this and a non-charging status is
-                * set, leave the status alone.
+                * connected prior to this and the status is something
+                * other than charging ("full" or "not-charging"), leave
+                * the status alone.
                 */
                if (battery->charging_status ==
                    POWER_SUPPLY_STATUS_DISCHARGING ||
-                   battery->charging_status == POWER_SUPPLY_STATUS_UNKNOWN) {
+                   battery->charging_status == POWER_SUPPLY_STATUS_UNKNOWN)
                        battery->charging_status = POWER_SUPPLY_STATUS_CHARGING;
+
+               /*
+                * Don't re-enable charging if the battery is full and we
+                * are not actively re-charging it, or if "not-charging"
+                * status is set.
+                */
+               if (!((battery->charging_status == POWER_SUPPLY_STATUS_FULL
+                      && !battery->recharging) || battery->charging_status ==
+                     POWER_SUPPLY_STATUS_NOT_CHARGING))
                        android_bat_enable_charging(battery, true);
-               }
 
                break;
        default: