When the battery is dry and BATTERY_FULL_DISCHARGED is set, we should check BATTERY_DISCHARGING to decide the power status. If BATTERY_DISCHARGING is set, the power status is not charging. Or the power status should be charging.
Signed-off-by: YH Huang <yh.hu...@mediatek.com> --- drivers/power/sbs-battery.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/power/sbs-battery.c b/drivers/power/sbs-battery.c index d6226d6..d86db0e 100644 --- a/drivers/power/sbs-battery.c +++ b/drivers/power/sbs-battery.c @@ -382,11 +382,12 @@ static int sbs_get_battery_property(struct i2c_client *client, if (ret & BATTERY_FULL_CHARGED) val->intval = POWER_SUPPLY_STATUS_FULL; - else if (ret & BATTERY_FULL_DISCHARGED) - val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; - else if (ret & BATTERY_DISCHARGING) - val->intval = POWER_SUPPLY_STATUS_DISCHARGING; - else + else if (ret & BATTERY_DISCHARGING) { + if (ret & BATTERY_FULL_DISCHARGED) + val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; + else + val->intval = POWER_SUPPLY_STATUS_DISCHARGING; + } else val->intval = POWER_SUPPLY_STATUS_CHARGING; if (chip->poll_time == 0) @@ -702,11 +703,12 @@ static void sbs_delayed_work(struct work_struct *work) if (ret & BATTERY_FULL_CHARGED) ret = POWER_SUPPLY_STATUS_FULL; - else if (ret & BATTERY_FULL_DISCHARGED) - ret = POWER_SUPPLY_STATUS_NOT_CHARGING; - else if (ret & BATTERY_DISCHARGING) - ret = POWER_SUPPLY_STATUS_DISCHARGING; - else + else if (ret & BATTERY_DISCHARGING) { + if (ret & BATTERY_FULL_DISCHARGED) + ret = POWER_SUPPLY_STATUS_NOT_CHARGING; + else + ret = POWER_SUPPLY_STATUS_DISCHARGING; + } else ret = POWER_SUPPLY_STATUS_CHARGING; if (chip->last_state != ret) { -- 1.7.9.5