Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754560AbcCWJyC (ORCPT ); Wed, 23 Mar 2016 05:54:02 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:8883 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1751816AbcCWJxx (ORCPT ); Wed, 23 Mar 2016 05:53:53 -0400 From: YH Huang To: Sebastian Reichel , Dmitry Eremin-Solenikov , David Woodhouse , Matthias Brugger CC: , , , , YH Huang Subject: [PATCH] sbs-battery: fix power status when battery is dry Date: Wed, 23 Mar 2016 17:53:14 +0800 Message-ID: <1458726794-48298-1-git-send-email-yh.huang@mediatek.com> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1792 Lines: 52 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 --- 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