From patchwork Thu May 14 23:04:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Bakker X-Patchwork-Id: 200522 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69109C433E2 for ; Thu, 14 May 2020 23:05:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4A4B920734 for ; Thu, 14 May 2020 23:05:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729027AbgENXFJ (ORCPT ); Thu, 14 May 2020 19:05:09 -0400 Received: from mail-mw2nam12olkn2084.outbound.protection.outlook.com ([40.92.23.84]:28621 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728602AbgENXFJ (ORCPT ); Thu, 14 May 2020 19:05:09 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DO0cFOQofIEESAc5fRVOhz9srlEMKK7fB8+sWxF9dG1U0GKfmsu7PBcQ5s5ktFZtC9dd0KxHS4W4PbpLIIUK9NB1ygTgq7LyfXf+B1calMyMpg6Lq+mCBn28qURHNpRmOlr7C/bxom4QQq9WS+SO2nycVL4vtLd97FMxr3bAtVSXCaJCELJFsPH8IYbgRn9z1YwBwf/oP6wxu9QJKRZbtvBQIUzmGtTMdcRz3JztsUBVihP9vYAb6rajxpLP6D/LQnGM3Fo7FezqWKK5amiiWtYoULSBvUk9TQY7/Shr5ECU729553FyTbEMigo67qcrncazAyYxzC+ss7aV3HTGjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gUCcqPZF46q0Hh6KXEjruQjzv4fka78JltJ4rJy8xpM=; b=Y1pr3MzfYnZhlNksrKmMtW7HzPr0LuHoRGww63ohv5Zab8JtLOnsuIF4Nalk+INIRYTK7A+kUlRiZTklWWK3f1sizZIgAePz4S+LEwORuq7RsJdNGUkHZnGImjQpugvxHDqQGKsfwPelOFfVeQpNGywwenKItBog24fsvU6n4oo2iJ9CZgwd/u8hxmGDcyhxbTxbeVmkkCey6+05BTmm8oo+MmZ/WCvZVH1T+A0Xgu5LOwgNRrpqduKUT+IYkzFf4RavlUD4Vn4HPp9L0PNIeo1NJFcn5rXu7BcxuFKRIvlbPIPbaG8TKAgtaxjutmC0PA4dF7alv1JvStg2+6+CVg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=live.ca; dmarc=pass action=none header.from=live.ca; dkim=pass header.d=live.ca; arc=none Received: from MW2NAM12FT003.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::42) by MW2NAM12HT256.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::347) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.11; Thu, 14 May 2020 23:05:05 +0000 Received: from BN6PR04MB0660.namprd04.prod.outlook.com (2a01:111:e400:fc65::44) by MW2NAM12FT003.mail.protection.outlook.com (2a01:111:e400:fc65::70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.11 via Frontend Transport; Thu, 14 May 2020 23:05:05 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:96457069B7C8ECE2B32989EFB7E1F5D4DADFFD3A441ED28AA851DA2F7CED0FB9; UpperCasedChecksum:0278B8E250466512A3B55EE2741B6A3930D3A4C203E92490CD07E1149D2789B6; SizeAsReceived:7954; Count:50 Received: from BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc]) by BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc%6]) with mapi id 15.20.3000.022; Thu, 14 May 2020 23:05:05 +0000 From: Jonathan Bakker To: sre@kernel.org, krzk@kernel.org, jonghwa3.lee@samsung.com, tglx@linutronix.de, kstewart@linuxfoundation.org, baolin.wang7@gmail.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski , Jonathan Bakker Subject: [PATCH 01/10] power: supply: charger-manager: Swap private uevent for power_supply_changed Date: Thu, 14 May 2020 16:04:26 -0700 Message-ID: X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200514230435.11798-1-xc-racer2@live.ca> References: <20200514230435.11798-1-xc-racer2@live.ca> X-ClientProxiedBy: MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) To BN6PR04MB0660.namprd04.prod.outlook.com (2603:10b6:404:d9::21) X-Microsoft-Original-Message-ID: <20200514230435.11798-2-xc-racer2@live.ca> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from jon-hp-6570b.telus (2001:569:fb68:9c00:8067:f823:1e15:7520) by MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.26 via Frontend Transport; Thu, 14 May 2020 23:05:04 +0000 X-Mailer: git-send-email 2.20.1 X-Microsoft-Original-Message-ID: <20200514230435.11798-2-xc-racer2@live.ca> X-TMN: [mPWESInzjCLz92pIXHfqiXC1ByhNVvhz3CPcz0+OaSZ94j1MlwaNEzaqt3PaUjLe] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 50 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: eeb8004d-7710-4412-fe06-08d7f85b3d5d X-MS-TrafficTypeDiagnostic: MW2NAM12HT256: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: d3TyidNTycMoHuwCqjQxwoUlVk2ivaMpaJzGqs2P6nFiNhFuCQKYYqQ9K4Ie/z0U7IqDPaDQCVhCJMCvG52QjnN2JmsPJnJfRgfoU0SJ8YVFXULdXOK6BUvEk+4iBYExmTh518nD2XlNuQvEW9daEo2dliB0FRJPAGPa+b9Eepq6PkWmww0uoLnlAIxW2ZFGTXT8ETEwKEjxDQB6nsoUhg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:BN6PR04MB0660.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: wx8almPHaP0Jq9rE26RA5ylTygMxvedEN8J0H/QT6rQSDzit4sgCmBQpP11nrP1ft9QxWtXWtZD1E0oHbJJgxrPw5gIebSDSXsfPmgupvQKHfJYUwoeVT003jGDRy1bjyDY0bti+upFkQ8lbvID57LRNJEQzTieLQMATNJJGzVOeVBWbJR5A71QScbMa7jV5tcmf270E1c224CmmYZXiSQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: eeb8004d-7710-4412-fe06-08d7f85b3d5d X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 May 2020 23:05:05.5715 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2NAM12HT256 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org From: Jonghwa Lee Whenever the battery status is changed, charger manager triggers a uevent through a private interface. Modify it to use power_supply_changed() since it belongs to the power supply subsystem. Signed-off-by: Jonghwa Lee Signed-off-by: Krzysztof Kozlowski Signed-off-by: Jonathan Bakker --- drivers/power/supply/charger-manager.c | 91 ++++---------------------- 1 file changed, 11 insertions(+), 80 deletions(-) diff --git a/drivers/power/supply/charger-manager.c b/drivers/power/supply/charger-manager.c index a21e1a2673f8..330185b960a5 100644 --- a/drivers/power/supply/charger-manager.c +++ b/drivers/power/supply/charger-manager.c @@ -33,18 +33,6 @@ #define CM_DEFAULT_RECHARGE_TEMP_DIFF 50 #define CM_DEFAULT_CHARGE_TEMP_MAX 500 -static const char * const default_event_names[] = { - [CM_EVENT_UNKNOWN] = "Unknown", - [CM_EVENT_BATT_FULL] = "Battery Full", - [CM_EVENT_BATT_IN] = "Battery Inserted", - [CM_EVENT_BATT_OUT] = "Battery Pulled Out", - [CM_EVENT_BATT_OVERHEAT] = "Battery Overheat", - [CM_EVENT_BATT_COLD] = "Battery Cold", - [CM_EVENT_EXT_PWR_IN_OUT] = "External Power Attach/Detach", - [CM_EVENT_CHG_START_STOP] = "Charging Start/Stop", - [CM_EVENT_OTHERS] = "Other battery events" -}; - /* * Regard CM_JIFFIES_SMALL jiffies is small enough to ignore for * delayed works so that we can run delayed works with CM_JIFFIES_SMALL @@ -61,8 +49,6 @@ static const char * const default_event_names[] = { */ #define CM_RTC_SMALL (2) -#define UEVENT_BUF_SIZE 32 - static LIST_HEAD(cm_list); static DEFINE_MUTEX(cm_list_mtx); @@ -446,61 +432,6 @@ static int try_charger_restart(struct charger_manager *cm) return try_charger_enable(cm, true); } -/** - * uevent_notify - Let users know something has changed. - * @cm: the Charger Manager representing the battery. - * @event: the event string. - * - * If @event is null, it implies that uevent_notify is called - * by resume function. When called in the resume function, cm_suspended - * should be already reset to false in order to let uevent_notify - * notify the recent event during the suspend to users. While - * suspended, uevent_notify does not notify users, but tracks - * events so that uevent_notify can notify users later after resumed. - */ -static void uevent_notify(struct charger_manager *cm, const char *event) -{ - static char env_str[UEVENT_BUF_SIZE + 1] = ""; - static char env_str_save[UEVENT_BUF_SIZE + 1] = ""; - - if (cm_suspended) { - /* Nothing in suspended-event buffer */ - if (env_str_save[0] == 0) { - if (!strncmp(env_str, event, UEVENT_BUF_SIZE)) - return; /* status not changed */ - strncpy(env_str_save, event, UEVENT_BUF_SIZE); - return; - } - - if (!strncmp(env_str_save, event, UEVENT_BUF_SIZE)) - return; /* Duplicated. */ - strncpy(env_str_save, event, UEVENT_BUF_SIZE); - return; - } - - if (event == NULL) { - /* No messages pending */ - if (!env_str_save[0]) - return; - - strncpy(env_str, env_str_save, UEVENT_BUF_SIZE); - kobject_uevent(&cm->dev->kobj, KOBJ_CHANGE); - env_str_save[0] = 0; - - return; - } - - /* status not changed */ - if (!strncmp(env_str, event, UEVENT_BUF_SIZE)) - return; - - /* save the status and notify the update */ - strncpy(env_str, event, UEVENT_BUF_SIZE); - kobject_uevent(&cm->dev->kobj, KOBJ_CHANGE); - - dev_info(cm->dev, "%s\n", event); -} - /** * fullbatt_vchk - Check voltage drop some times after "FULL" event. * @work: the work_struct appointing the function @@ -538,7 +469,7 @@ static void fullbatt_vchk(struct work_struct *work) if (diff > desc->fullbatt_vchkdrop_uV) { try_charger_restart(cm); - uevent_notify(cm, "Recharging"); + power_supply_changed(cm->charger_psy); } } @@ -569,7 +500,7 @@ static int check_charging_duration(struct charger_manager *cm) if (duration > desc->charging_max_duration_ms) { dev_info(cm->dev, "Charging duration exceed %ums\n", desc->charging_max_duration_ms); - uevent_notify(cm, "Discharging"); + power_supply_changed(cm->charger_psy); try_charger_enable(cm, false); ret = true; } @@ -580,7 +511,7 @@ static int check_charging_duration(struct charger_manager *cm) is_ext_pwr_online(cm)) { dev_info(cm->dev, "Discharging duration exceed %ums\n", desc->discharging_max_duration_ms); - uevent_notify(cm, "Recharging"); + power_supply_changed(cm->charger_psy); try_charger_enable(cm, true); ret = true; } @@ -688,7 +619,7 @@ static bool _cm_monitor(struct charger_manager *cm) if (temp_alrt) { cm->emergency_stop = temp_alrt; if (!try_charger_enable(cm, false)) - uevent_notify(cm, default_event_names[temp_alrt]); + power_supply_changed(cm->charger_psy); /* * Check whole charging duration and discharging duration @@ -713,7 +644,7 @@ static bool _cm_monitor(struct charger_manager *cm) } else if (!cm->emergency_stop && is_full_charged(cm) && cm->charger_enabled) { dev_info(cm->dev, "EVENT_HANDLE: Battery Fully Charged\n"); - uevent_notify(cm, default_event_names[CM_EVENT_BATT_FULL]); + power_supply_changed(cm->charger_psy); try_charger_enable(cm, false); @@ -722,7 +653,7 @@ static bool _cm_monitor(struct charger_manager *cm) cm->emergency_stop = 0; if (is_ext_pwr_online(cm)) { if (!try_charger_enable(cm, true)) - uevent_notify(cm, "CHARGING"); + power_supply_changed(cm->charger_psy); } } @@ -843,7 +774,7 @@ static void fullbatt_handler(struct charger_manager *cm) out: dev_info(cm->dev, "EVENT_HANDLE: Battery Fully Charged\n"); - uevent_notify(cm, default_event_names[CM_EVENT_BATT_FULL]); + power_supply_changed(cm->charger_psy); } /** @@ -857,9 +788,9 @@ static void battout_handler(struct charger_manager *cm) if (!is_batt_present(cm)) { dev_emerg(cm->dev, "Battery Pulled Out!\n"); - uevent_notify(cm, default_event_names[CM_EVENT_BATT_OUT]); + power_supply_changed(cm->charger_psy); } else { - uevent_notify(cm, "Battery Reinserted?"); + power_supply_changed(cm->charger_psy); } } @@ -876,7 +807,7 @@ static void misc_event_handler(struct charger_manager *cm, if (is_polling_required(cm) && cm->desc->polling_interval_ms) schedule_work(&setup_polling); - uevent_notify(cm, default_event_names[type]); + power_supply_changed(cm->charger_psy); } static int charger_get_property(struct power_supply *psy, @@ -2044,7 +1975,7 @@ void cm_notify_event(struct power_supply *psy, enum cm_event_types type, break; case CM_EVENT_UNKNOWN: case CM_EVENT_OTHERS: - uevent_notify(cm, msg ? msg : default_event_names[type]); + power_supply_changed(cm->charger_psy); break; default: dev_err(cm->dev, "%s: type not specified\n", __func__); From patchwork Thu May 14 23:04:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Bakker X-Patchwork-Id: 200526 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22FC1C433DF for ; Thu, 14 May 2020 23:05:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EA6132076A for ; Thu, 14 May 2020 23:05:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729082AbgENXFN (ORCPT ); Thu, 14 May 2020 19:05:13 -0400 Received: from mail-mw2nam12olkn2088.outbound.protection.outlook.com ([40.92.23.88]:20065 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729057AbgENXFM (ORCPT ); Thu, 14 May 2020 19:05:12 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bcfxD/lOGLTaRbGcyTw1aITMBWJyl8WT2b/aGvtv5QnCjfBdNPMTtUzk4Ilb3Fhcj2/j+lpLnKGLdpmtXFO8XdRueUxog2pRMNf1P9CgScUq1CIWBnX79xY+oCzlWrWHTWxW6FeqclwQbZRt3+h7oUJTjTd+Hj5iioED8QPTyECJi3X7Pq4pgOunqorMBoVVgcLKxk9lKxc/qPau0Cs9XWY8TUeJrak9r8XBGVXYtESEm+oD5oTXY/1LDJ0rTUkZaB8zxTVvm1lx4oEU4amqvkwSLzecRr2AgUge9tdIUrvyQAs92dqCcJivbqmO1cth06yDknJc6UkTnQtKeoLubg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8OffufdBNdxoO5LBkJSaKGrBgbpE2ZCwE5ssP6HjtlE=; b=j2kCWhy65eKP2vPJ1/8fcUP260p2FUw/58y0VE/VUmPDxojH3yB8rxVRlPdQMpA61X7TzBp8+vSdPT+H19pZQFBNBNolse8YavXVQ+xNj1aws0EC29K5uAnC3J0Lx2kOSC0+H1c4VboRgxAHnebLm3USka8PNaErKMD+raccHRHJcT6aewE1c3xNlh9dkDPwfhyjvT+kWaBLNKgzF5kGTlliaAlH85JA+nxIla2o+RKc9KPsWbbi65dIv9pHwVu8cs4SUJbNE3Sv2EC3SvjDt25hq5oYQ50ql5Ovd2E3ueWFTyrykD47mIGiqWBmMrGrL1fcAZ3MzH7jjXGpSkO7bQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=live.ca; dmarc=pass action=none header.from=live.ca; dkim=pass header.d=live.ca; arc=none Received: from MW2NAM12FT003.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::4d) by MW2NAM12HT035.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.11; Thu, 14 May 2020 23:05:10 +0000 Received: from BN6PR04MB0660.namprd04.prod.outlook.com (2a01:111:e400:fc65::44) by MW2NAM12FT003.mail.protection.outlook.com (2a01:111:e400:fc65::70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.11 via Frontend Transport; Thu, 14 May 2020 23:05:10 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:E8855A4EEBA158DCE1388606AFE8029E026DBD8F77496260270EF58ACF993A0A; UpperCasedChecksum:078FA253B621B01367A20960D3B92B4EFCD542541F80AC619F2BA83EAE804E2C; SizeAsReceived:7958; Count:50 Received: from BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc]) by BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc%6]) with mapi id 15.20.3000.022; Thu, 14 May 2020 23:05:10 +0000 From: Jonathan Bakker To: sre@kernel.org, krzk@kernel.org, jonghwa3.lee@samsung.com, tglx@linutronix.de, kstewart@linuxfoundation.org, baolin.wang7@gmail.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski , Jonathan Bakker Subject: [PATCH 04/10] power: supply: charger-manager: Correct usage of CHARGE_NOW/FULL Date: Thu, 14 May 2020 16:04:29 -0700 Message-ID: X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200514230435.11798-1-xc-racer2@live.ca> References: <20200514230435.11798-1-xc-racer2@live.ca> X-ClientProxiedBy: MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) To BN6PR04MB0660.namprd04.prod.outlook.com (2603:10b6:404:d9::21) X-Microsoft-Original-Message-ID: <20200514230435.11798-5-xc-racer2@live.ca> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from jon-hp-6570b.telus (2001:569:fb68:9c00:8067:f823:1e15:7520) by MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.26 via Frontend Transport; Thu, 14 May 2020 23:05:09 +0000 X-Mailer: git-send-email 2.20.1 X-Microsoft-Original-Message-ID: <20200514230435.11798-5-xc-racer2@live.ca> X-TMN: [eynva0AuKMosR+KJZSVdTMPwqJEOBoLjVwGN3J8i66dDb+qFmSKFJ9xK5nCSIx7J] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 50 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 2ea06532-6b08-4e0a-f8d2-08d7f85b4074 X-MS-TrafficTypeDiagnostic: MW2NAM12HT035: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8MmEi1S8UgvawJHsBXbVTQBuQzF8bNaM2TkYmUnci8DVAiTsEhZmvskTkATC/us2B74Q/iXKkP6Ogx45EHpK9145KGEpnGXVDhyXhfXv0pLgJxt2ECZhv6+Hb9+CpBn4yuoWnimkJ7ApAUhPbzURvjCzrO5rlesucA9ACq/18krnG+nrnm2QNIqMWpZALdbPG47P3aiJmhgE6ZTc8TguSA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:BN6PR04MB0660.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: r5r3NRGMvAL0HX/31WoCDl31CiGM7WiIiKNuz0rHPO69vddRAoZb89NLGvmCfNLvU50lBUzDZCxEhaqj2HPq/T4e3oGQoHFZ7luJUTcMxgVmimhNA55UWGkdvHB6GTDHJAtf7yi8GDOXH75LYJQK0i1GU9VHx0mEKYOKib1FUnKaPaM6lDEbkEScgmTSe24OGZTTs08i93U7E6duCyfLKQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ea06532-6b08-4e0a-f8d2-08d7f85b4074 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 May 2020 23:05:10.7362 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2NAM12HT035 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org From: Jonghwa Lee The POWER_SUPPLY_CHARGE_NOW/FULL property reflects battery's charges in uAh unit, but charger-manager has been used it wrongly as a status field. Signed-off-by: Jonghwa Lee Signed-off-by: Krzysztof Kozlowski Signed-off-by: Jonathan Bakker --- drivers/power/supply/charger-manager.c | 40 ++++++++------------------ 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/drivers/power/supply/charger-manager.c b/drivers/power/supply/charger-manager.c index 6a5ae1d0ef92..80d1699c938a 100644 --- a/drivers/power/supply/charger-manager.c +++ b/drivers/power/supply/charger-manager.c @@ -846,35 +846,13 @@ static int charger_get_property(struct power_supply *psy, val->intval = 0; break; case POWER_SUPPLY_PROP_CHARGE_FULL: - if (is_full_charged(cm)) - val->intval = 1; - else - val->intval = 0; - ret = 0; - break; case POWER_SUPPLY_PROP_CHARGE_NOW: - if (is_charging(cm)) { - fuel_gauge = power_supply_get_by_name( - cm->desc->psy_fuel_gauge); - if (!fuel_gauge) { - ret = -ENODEV; - break; - } - - ret = power_supply_get_property(fuel_gauge, - POWER_SUPPLY_PROP_CHARGE_NOW, - val); - if (ret) { - val->intval = 1; - ret = 0; - } else { - /* If CHARGE_NOW is supplied, use it */ - val->intval = (val->intval > 0) ? - val->intval : 1; - } - } else { - val->intval = 0; + fuel_gauge = power_supply_get_by_name(cm->desc->psy_fuel_gauge); + if (!fuel_gauge) { + ret = -ENODEV; + break; } + ret = power_supply_get_property(fuel_gauge, psp, val); break; default: return -EINVAL; @@ -893,9 +871,9 @@ static enum power_supply_property default_charger_props[] = { POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_CAPACITY, POWER_SUPPLY_PROP_ONLINE, - POWER_SUPPLY_PROP_CHARGE_FULL, /* * Optional properties are: + * POWER_SUPPLY_PROP_CHARGE_FULL, * POWER_SUPPLY_PROP_CHARGE_NOW, * POWER_SUPPLY_PROP_CURRENT_NOW, * POWER_SUPPLY_PROP_TEMP, @@ -1583,6 +1561,12 @@ static int charger_manager_probe(struct platform_device *pdev) desc->psy_fuel_gauge); return -ENODEV; } + if (!power_supply_get_property(fuel_gauge, + POWER_SUPPLY_PROP_CHARGE_FULL, &val)) { + cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] = + POWER_SUPPLY_PROP_CHARGE_FULL; + cm->charger_psy_desc.num_properties++; + } if (!power_supply_get_property(fuel_gauge, POWER_SUPPLY_PROP_CHARGE_NOW, &val)) { cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] = From patchwork Thu May 14 23:04:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Bakker X-Patchwork-Id: 200525 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 54A30C433DF for ; Thu, 14 May 2020 23:05:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2D8F4204EA for ; Thu, 14 May 2020 23:05:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729124AbgENXFU (ORCPT ); Thu, 14 May 2020 19:05:20 -0400 Received: from mail-mw2nam12olkn2105.outbound.protection.outlook.com ([40.92.23.105]:50784 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729057AbgENXFR (ORCPT ); Thu, 14 May 2020 19:05:17 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZY/CjIXNxvW2K0W0VUBLOCjMHyII0PP+40VJW3JroG8v3Yg3Q6yy+eeyEtZtVcyOphr16VvhTp5MwxZdvteg/zYbcQlBCcHlgsbSWfG3Yvertm4/g4nhw7K3aEWEKEhuVan1IK/gk4MBQ3e+fXxyOOlKazsIgMRgk5JccYzai5pEc8UyQjbbWMgF3bncdIgl5tYFnYIet0pGIQxEqtHGxS0mIWjigfjwBpjEtBHtF/n4oiXbxopQN1k9LJ25kufp/gihfoirBIgfa3+SOKOC5lD8uQF+2J3gZQLvswSOoTzlG0c+wdsforAtNrBxh5x20ndo5LdM2E5tNB+VC5kF/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mRhZL1bZkietTQ0o2ZfyTfRCGzEekdpIMS2F/8N8EX8=; b=Kk7/uCKX6UXuR2Yilfpk0aFlk3I0uO2aNvRjptM4oNwG8MxiB2zO7FB3HwIFxvDK2ByfFQQEMk14z8SiHEuTennlGw7zwuV3GHt3lpHR5tHdgEuNgpkGvSH12hcfOIYzyb0RDau3DoBawZtxNc7Lk4iRbE9p69ZbQNN0TyIPNvqx2PMRrjy5CKtEDzUYSSzMJQz9p+suT29BxN4DMByqMd6+BFFCfgzfUXaTzP6YOw6smy1iRerazySbUcV057LDHUzT2BMa4ZOSZ3NlYLF+SanwjjIwrMBoMHYezLPQmfvnoz6Uoka0wtCGZRu9bu1oYuZLb5B61W8RnMJJPgfj4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=live.ca; dmarc=pass action=none header.from=live.ca; dkim=pass header.d=live.ca; arc=none Received: from MW2NAM12FT003.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::43) by MW2NAM12HT105.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.11; Thu, 14 May 2020 23:05:14 +0000 Received: from BN6PR04MB0660.namprd04.prod.outlook.com (2a01:111:e400:fc65::44) by MW2NAM12FT003.mail.protection.outlook.com (2a01:111:e400:fc65::70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.11 via Frontend Transport; Thu, 14 May 2020 23:05:14 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:9935C6736AFA23F056AE7BE382B566E572D625F1F2009748A3E144141AD3F898; UpperCasedChecksum:6D0E67D090ED02E3B819CFF61B9DE0BFA133034D6629F592DE6D8A2998A2665A; SizeAsReceived:7953; Count:50 Received: from BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc]) by BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc%6]) with mapi id 15.20.3000.022; Thu, 14 May 2020 23:05:14 +0000 From: Jonathan Bakker To: sre@kernel.org, krzk@kernel.org, jonghwa3.lee@samsung.com, tglx@linutronix.de, kstewart@linuxfoundation.org, baolin.wang7@gmail.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski , Jonathan Bakker Subject: [PATCH 06/10] power: supply: charger-manager: Make decisions focussed on battery status Date: Thu, 14 May 2020 16:04:31 -0700 Message-ID: X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200514230435.11798-1-xc-racer2@live.ca> References: <20200514230435.11798-1-xc-racer2@live.ca> X-ClientProxiedBy: MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) To BN6PR04MB0660.namprd04.prod.outlook.com (2603:10b6:404:d9::21) X-Microsoft-Original-Message-ID: <20200514230435.11798-7-xc-racer2@live.ca> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from jon-hp-6570b.telus (2001:569:fb68:9c00:8067:f823:1e15:7520) by MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.26 via Frontend Transport; Thu, 14 May 2020 23:05:12 +0000 X-Mailer: git-send-email 2.20.1 X-Microsoft-Original-Message-ID: <20200514230435.11798-7-xc-racer2@live.ca> X-TMN: [9qETSCHe94zv59gnv8EhDc5vAYzACONT9vzKhW+2B8HzcwZUXmP/dNYbmyL8Knl7] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 50 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 348835cb-4566-4a9e-5220-08d7f85b42a7 X-MS-TrafficTypeDiagnostic: MW2NAM12HT105: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: B47m44DcrTLgpPgD8y5gA2vXyaRgX0TxHIFdsBYca7mv89W6FN8UBnZ68hanxRb92N79Jiu4QM5AGF4BtUZCHPTubXAxtyhE6aRQvwaDxcLBsJf0aTKt3Uvl+4uDWT4AKceiqEG/YJ+O7JJnXla5jj99NCU6fXvCjvmPcip9dkrLsfvl7VBlB2cyXPL9+L7JhinkWbynpB5RmeQm1AQMdA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:BN6PR04MB0660.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: b4xoJh5i7pZ2HjqlWbOYC+8CQ5mJ++5QCm3c5Ez68fLu/id/8u/3MUksYDpHEVu8J1o4MYr+Ebl84Q2ZErjeOHXlCb8UxQbOyC3CGFvQ32VMd429tmd4J0fUQK8xtUr243vALsXjTbNhVAsRzqj9e2zs/d6EQqail1njUg8Vtp/uPvxZlFj9boPj31/Hebt6A3XKRBkSGOCiagVEdzpVDQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 348835cb-4566-4a9e-5220-08d7f85b42a7 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 May 2020 23:05:14.4057 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2NAM12HT105 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org From: Jonghwa Lee cm_monitor(), where charging management starts, checks various charging condition sequentially to decide next charging operation. However, as it follows sequential process, cascaded if statements, it does some jobs which have already done in the previous stage. This results in a delay in decision making. Moreover, starting point of charging is spread all around which makes maintain code and debugging difficult. Both of the problems mentioned above become clean if it manages battery charging focusing on battery status not following sequential condition checking. Now, cm_monitor() moves battery state diagram and does the optimal operation for current state. As a result, it reduces whole monitoring time almost in half. Signed-off-by: Jonghwa Lee Signed-off-by: Krzysztof Kozlowski Signed-off-by: Jonathan Bakker --- drivers/power/supply/charger-manager.c | 181 +++++++++---------------- include/linux/power/charger-manager.h | 3 + 2 files changed, 64 insertions(+), 120 deletions(-) diff --git a/drivers/power/supply/charger-manager.c b/drivers/power/supply/charger-manager.c index b2daab480eb3..9e4a7d368b08 100644 --- a/drivers/power/supply/charger-manager.c +++ b/drivers/power/supply/charger-manager.c @@ -271,6 +271,19 @@ static bool is_full_charged(struct charger_manager *cm) if (!fuel_gauge) return false; + /* Full, if it's over the fullbatt voltage */ + if (desc->fullbatt_uV > 0) { + ret = get_batt_uV(cm, &uV); + if (!ret) { + /* Battery is already full, checks voltage drop. */ + if (cm->battery_status == POWER_SUPPLY_STATUS_FULL + && desc->fullbatt_vchkdrop_uV) + uV += desc->fullbatt_vchkdrop_uV; + if (uV >= desc->fullbatt_uV) + return true; + } + } + if (desc->fullbatt_full_capacity > 0) { val.intval = 0; @@ -283,15 +296,6 @@ static bool is_full_charged(struct charger_manager *cm) } } - /* Full, if it's over the fullbatt voltage */ - if (desc->fullbatt_uV > 0) { - ret = get_batt_uV(cm, &uV); - if (!ret && uV >= desc->fullbatt_uV) { - is_full = true; - goto out; - } - } - /* Full, if the capacity is more than fullbatt_soc */ if (desc->fullbatt_soc > 0) { val.intval = 0; @@ -406,66 +410,12 @@ static int try_charger_enable(struct charger_manager *cm, bool enable) } } - if (!err) { + if (!err) cm->charger_enabled = enable; - power_supply_changed(cm->charger_psy); - } return err; } -/** - * try_charger_restart - Restart charging. - * @cm: the Charger Manager representing the battery. - * - * Restart charging by turning off and on the charger. - */ -static int try_charger_restart(struct charger_manager *cm) -{ - int err; - - if (cm->emergency_stop) - return -EAGAIN; - - err = try_charger_enable(cm, false); - if (err) - return err; - - return try_charger_enable(cm, true); -} - -/** - * fullbatt_vchk - Check voltage drop some times after "FULL" event. - * - * If a user has designated "fullbatt_vchkdrop_uV" values with - * charger_desc, Charger Manager checks voltage drop after the battery - * "FULL" event. It checks whether the voltage has dropped more than - * fullbatt_vchkdrop_uV by calling this function after fullbatt_vchkrop_ms. - */ -static void fullbatt_vchk(struct charger_manager *cm) -{ - struct charger_desc *desc = cm->desc; - int batt_uV, err, diff; - - if (!desc->fullbatt_vchkdrop_uV) - return; - - err = get_batt_uV(cm, &batt_uV); - if (err) { - dev_err(cm->dev, "%s: get_batt_uV error(%d)\n", __func__, err); - return; - } - - diff = desc->fullbatt_uV - batt_uV; - if (diff < 0) - return; - - dev_info(cm->dev, "VBATT dropped %duV after full-batt\n", diff); - - if (diff > desc->fullbatt_vchkdrop_uV) - try_charger_restart(cm); -} - /** * check_charging_duration - Monitor charging/discharging duration * @cm: the Charger Manager representing the battery. @@ -493,17 +443,14 @@ static int check_charging_duration(struct charger_manager *cm) if (duration > desc->charging_max_duration_ms) { dev_info(cm->dev, "Charging duration exceed %ums\n", desc->charging_max_duration_ms); - try_charger_enable(cm, false); ret = true; } - } else if (is_ext_pwr_online(cm) && !cm->charger_enabled) { + } else if (cm->battery_status == POWER_SUPPLY_STATUS_NOT_CHARGING) { duration = curr - cm->charging_end_time; - if (duration > desc->discharging_max_duration_ms && - is_ext_pwr_online(cm)) { + if (duration > desc->charging_max_duration_ms) { dev_info(cm->dev, "Discharging duration exceed %ums\n", desc->discharging_max_duration_ms); - try_charger_enable(cm, true); ret = true; } } @@ -585,9 +532,46 @@ static int cm_check_thermal_status(struct charger_manager *cm) else ret = CM_BATT_OK; + cm->emergency_stop = ret; + return ret; } +/** + * cm_get_target_status - Check current status and get next target status. + * @cm: the Charger Manager representing the battery. + */ +static int cm_get_target_status(struct charger_manager *cm) +{ + if (!is_ext_pwr_online(cm)) + return POWER_SUPPLY_STATUS_DISCHARGING; + + if (cm_check_thermal_status(cm)) { + /* Check if discharging duration exeeds limit. */ + if (check_charging_duration(cm)) + goto charging_ok; + return POWER_SUPPLY_STATUS_NOT_CHARGING; + } + + switch (cm->battery_status) { + case POWER_SUPPLY_STATUS_CHARGING: + /* Check if charging duration exeeds limit. */ + if (check_charging_duration(cm)) + return POWER_SUPPLY_STATUS_FULL; + fallthrough; + case POWER_SUPPLY_STATUS_FULL: + if (is_full_charged(cm)) + return POWER_SUPPLY_STATUS_FULL; + fallthrough; + default: + break; + } + +charging_ok: + /* Charging is allowed. */ + return POWER_SUPPLY_STATUS_CHARGING; +} + /** * _cm_monitor - Monitor the temperature and return true for exceptions. * @cm: the Charger Manager representing the battery. @@ -597,56 +581,18 @@ static int cm_check_thermal_status(struct charger_manager *cm) */ static bool _cm_monitor(struct charger_manager *cm) { - int temp_alrt; + int target; - temp_alrt = cm_check_thermal_status(cm); + target = cm_get_target_status(cm); - /* It has been stopped already */ - if (temp_alrt && cm->emergency_stop) - return false; - - /* - * Check temperature whether overheat or cold. - * If temperature is out of range normal state, stop charging. - */ - if (temp_alrt) { - cm->emergency_stop = temp_alrt; - try_charger_enable(cm, false); - - /* - * Check whole charging duration and discharging duration - * after full-batt. - */ - } else if (!cm->emergency_stop && check_charging_duration(cm)) { - dev_dbg(cm->dev, - "Charging/Discharging duration is out of range\n"); - /* - * Check dropped voltage of battery. If battery voltage is more - * dropped than fullbatt_vchkdrop_uV after fully charged state, - * charger-manager have to recharge battery. - */ - } else if (!cm->emergency_stop && is_ext_pwr_online(cm) && - !cm->charger_enabled) { - fullbatt_vchk(cm); + try_charger_enable(cm, (target == POWER_SUPPLY_STATUS_CHARGING)); - /* - * Check whether fully charged state to protect overcharge - * if charger-manager is charging for battery. - */ - } else if (!cm->emergency_stop && is_full_charged(cm) && - cm->charger_enabled) { - dev_info(cm->dev, "EVENT_HANDLE: Battery Fully Charged\n"); - try_charger_enable(cm, false); - - fullbatt_vchk(cm); - } else { - cm->emergency_stop = 0; - if (is_ext_pwr_online(cm)) { - try_charger_enable(cm, true); - } + if (cm->battery_status != target) { + cm->battery_status = target; + power_supply_changed(cm->charger_psy); } - return true; + return (cm->battery_status == POWER_SUPPLY_STATUS_NOT_CHARGING); } /** @@ -751,12 +697,7 @@ static int charger_get_property(struct power_supply *psy, switch (psp) { case POWER_SUPPLY_PROP_STATUS: - if (is_charging(cm)) - val->intval = POWER_SUPPLY_STATUS_CHARGING; - else if (is_ext_pwr_online(cm)) - val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; - else - val->intval = POWER_SUPPLY_STATUS_DISCHARGING; + val->intval = cm->battery_status; break; case POWER_SUPPLY_PROP_HEALTH: if (cm->emergency_stop > 0) diff --git a/include/linux/power/charger-manager.h b/include/linux/power/charger-manager.h index 3a98837684e3..c127dbe31e49 100644 --- a/include/linux/power/charger-manager.h +++ b/include/linux/power/charger-manager.h @@ -213,6 +213,7 @@ struct charger_desc { * saved status of battery before entering suspend-to-RAM * @charging_start_time: saved start time of enabling charging * @charging_end_time: saved end time of disabling charging + * @battery_status: Current battery status */ struct charger_manager { struct list_head entry; @@ -232,6 +233,8 @@ struct charger_manager { u64 charging_start_time; u64 charging_end_time; + + int battery_status; }; #endif /* _CHARGER_MANAGER_H */ From patchwork Thu May 14 23:04:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Bakker X-Patchwork-Id: 200523 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E8680C433E2 for ; Thu, 14 May 2020 23:05:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CC5F020758 for ; Thu, 14 May 2020 23:05:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729132AbgENXFU (ORCPT ); Thu, 14 May 2020 19:05:20 -0400 Received: from mail-mw2nam12olkn2037.outbound.protection.outlook.com ([40.92.23.37]:4257 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729097AbgENXFR (ORCPT ); Thu, 14 May 2020 19:05:17 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h4MpOj4au/avLdApsNguau3ugkyL6Mlye71dySCybN5CcM7di9jv6YWthIe/uJ24IvqJOJYFVq4MHPnJwavQgMwXyaD9tLt4SeG87Q0bbppm1k3W+OPLAzu6ni56yJAi/HRsWN7rX4HhR559Cb9ZhRn8YYOBU+WM3oY28kBpMvWPWGtA2W5K0sKhoVtVSu/oyfwMn2KtYUp6IYHp2k95p5Z9YIbNSzftwtElwRHVcCsbBlT7DO2jcLVZ+L2cNVbvuSDDbxFCdWCYMGY50kYUN6JBD9b0XJekSrTQJkdtO4Zsu0605AA8u/AdojBEvdZgWDgTiIqnmLWLvLu/F++UEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=45eF6F9wzmrdPsALF3gGVxx5rQQ0x4YDjUHCdPPTock=; b=FIHt9haHy6aPwoL/cMXDcw2r4UkFDXivGzO8BodjERohUMR9Snp2dAePpqjuopM6ECUZwwSo/hR975EJ0wwjunyiwR908HpKsDxE7hEzOjdsm6MGYwdQ1WsyexX54RB3ewh5s7XJPKO4FkHmS21Zt2vmN9hnPypdYls3NcqUT5Z/Z9K9gF5ADBZmeIW2mAGI0aV7b+TxALyeafAtH66FN6YbAOtmD7Ug0u2Z+dcbRhQWcyRDD5NLxr7QCmBhZ/ADoo/kn7wff7dfva9zOc108FWC5d0AxMgxvhAXtNCG5t+Xrst/D8K8A3yXAZm1Hb3pthlJRD1IE1mZOvTxDAIrgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=live.ca; dmarc=pass action=none header.from=live.ca; dkim=pass header.d=live.ca; arc=none Received: from MW2NAM12FT003.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::4b) by MW2NAM12HT059.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::127) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.11; Thu, 14 May 2020 23:05:16 +0000 Received: from BN6PR04MB0660.namprd04.prod.outlook.com (2a01:111:e400:fc65::44) by MW2NAM12FT003.mail.protection.outlook.com (2a01:111:e400:fc65::70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.11 via Frontend Transport; Thu, 14 May 2020 23:05:16 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:59C9CA188537F6D8ACB66AA95174C9996E8EC3B61AF5541208BCF15FD54490A6; UpperCasedChecksum:3A0E72812C5B62A88117DAA944A2C93A79071114E0CC5730143DC55CAA5C8860; SizeAsReceived:7953; Count:50 Received: from BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc]) by BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc%6]) with mapi id 15.20.3000.022; Thu, 14 May 2020 23:05:16 +0000 From: Jonathan Bakker To: sre@kernel.org, krzk@kernel.org, jonghwa3.lee@samsung.com, tglx@linutronix.de, kstewart@linuxfoundation.org, baolin.wang7@gmail.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski , Jonathan Bakker Subject: [PATCH 07/10] power: supply: charger-manager: Don't start charging in cable nofitication Date: Thu, 14 May 2020 16:04:32 -0700 Message-ID: X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200514230435.11798-1-xc-racer2@live.ca> References: <20200514230435.11798-1-xc-racer2@live.ca> X-ClientProxiedBy: MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) To BN6PR04MB0660.namprd04.prod.outlook.com (2603:10b6:404:d9::21) X-Microsoft-Original-Message-ID: <20200514230435.11798-8-xc-racer2@live.ca> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from jon-hp-6570b.telus (2001:569:fb68:9c00:8067:f823:1e15:7520) by MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.26 via Frontend Transport; Thu, 14 May 2020 23:05:14 +0000 X-Mailer: git-send-email 2.20.1 X-Microsoft-Original-Message-ID: <20200514230435.11798-8-xc-racer2@live.ca> X-TMN: [aNGJO5wpZ50jdg5D+islHvQLmbJJGmWldJiA9HVPAayVA/DH3rynnFz9hUR9HbLo] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 50 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 1473ed6f-4026-4dd1-4529-08d7f85b43a5 X-MS-TrafficTypeDiagnostic: MW2NAM12HT059: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FWi6i5AovQqQtbxC7fpKBzF8VcHW/WZl++i3bc2BDETI+ZXxvVOQ4nrynnntAJiS8ze3JnuaEmhOG4hsp9FhvMWzkxWm2jxd/kraG+f06NkhSHotEW7oVIguth9i6J96fZTcbuVaFVUDDErwOCsAS9hhjACNtbLVQbZ0gak318+gOEyHJZg85zCNoExQSPJD77EhXw5BQboaI335/dTEzA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:BN6PR04MB0660.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: NyTR2HioZWucfyXU/6P6Gp3E23roTCaDZJ7s0hzWWivoeUsRTrgvNxGxSnalwsol1K9+xpEH0aZxtLE/84AojOL+YaKD3ZJxWFifwY54xvDNVWsNUqlDt/EfkpaQqzPUcY0TIhfRv9zdNVurQXcHZtk8I3pcnIG9Nd5U5N59HiNEkC/TJA6Igip8YxGRI+EeeUPKhbqMH+slJBjnxmwiqQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1473ed6f-4026-4dd1-4529-08d7f85b43a5 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 May 2020 23:05:16.1049 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2NAM12HT059 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org From: Jonghwa Lee Prevents direct charging control in cable notification and only set the input current limit according to cable type. Leave the enabling of charing to cm_monitor() where charging management proceeds. We may lose a few ms to enable charging compared to before, but it's more important that charging is enabled always in safe context. Signed-off-by: Jonghwa Lee Signed-off-by: Krzysztof Kozlowski Signed-off-by: Jonathan Bakker --- drivers/power/supply/charger-manager.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/drivers/power/supply/charger-manager.c b/drivers/power/supply/charger-manager.c index 9e4a7d368b08..27064a46a365 100644 --- a/drivers/power/supply/charger-manager.c +++ b/drivers/power/supply/charger-manager.c @@ -907,7 +907,8 @@ static void charger_extcon_work(struct work_struct *work) cable->min_uA, cable->max_uA); } - try_charger_enable(cable->cm, cable->attached); + cancel_delayed_work(&cm_monitor_work); + queue_delayed_work(cm_wq, &cm_monitor_work, 0); } /** @@ -930,15 +931,6 @@ static int charger_extcon_notifier(struct notifier_block *self, */ cable->attached = event; - /* - * Setup monitoring to check battery state - * when charger cable is attached. - */ - if (cable->attached && is_polling_required(cable->cm)) { - cancel_work_sync(&setup_polling); - schedule_work(&setup_polling); - } - /* * Setup work for controlling charger(regulator) * according to charger cable. From patchwork Thu May 14 23:04:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Bakker X-Patchwork-Id: 200524 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A310C433E0 for ; Thu, 14 May 2020 23:05:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3D7B8204EA for ; Thu, 14 May 2020 23:05:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729190AbgENXF1 (ORCPT ); Thu, 14 May 2020 19:05:27 -0400 Received: from mail-dm6nam12olkn2018.outbound.protection.outlook.com ([40.92.22.18]:32128 "EHLO NAM12-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729145AbgENXFW (ORCPT ); Thu, 14 May 2020 19:05:22 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KMKeYpli/g4HaT9v/UVXn11AlAzmxZeapvStl6V8lOwxuHjenUeGtSWmPPoLBfA558hlqV3Wiak0rbEHpWHN2k0l6e+UY3AyRQv5e9V9xOy+aWNQknaWRt1KPbsQaIfxxtxE+WJD3qIOQxoBGnPTag78zabKedc/77G+FyTPKRhOJjZQvHU5gopNjEcAQvw1Ll0okpgTsuVtWx6bnUjnW5+/EzuN4zErN6rBv0V4HHTrx3Y0cmoHvGhsUdzqNRvJUbaFsOJJhKNO21JothfDLyzK8JiZyUxHz4uJbnbebcj3yk6nIDK7wyJ/m1gG030UwUOqM5iP09FiXDsaIW0I/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=frjjLVPAF4ZuhXoCL/krqbQKU4CEv1ZHlJsmkJDyOAk=; b=kKfzxz8P1rXJRos3keXShy/VxanDUR1UUvtwOTVP4Cn1rAr40BeHrdktfOVA4aLGBwEUBXF8nT+3PLClJ1ku0V2qYjdoKzpBPvH89qLkHl/p3IGUDPA2MAaslfsSDYsh487s1QM/xJo+8/GN7npBxMpNOr6iHM9dSTFncHdYqqVJ22w7azqA3uboKS4IIu6WvuW1e45V4Ja4DGiVrwPBNimlR9hByIy7N4PmgAPqa4peFYoyZ5ZQIBHp31JLC3hS2Cg8f0UfO/8k+B98D7iVdDlZYLeTSQmRcHV05/TX01e7OPmJaShyxBCKPDFwi3MbIPt3dkqPsp5aC2YBC0Wdgw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=live.ca; dmarc=pass action=none header.from=live.ca; dkim=pass header.d=live.ca; arc=none Received: from MW2NAM12FT003.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::41) by MW2NAM12HT132.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::484) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.11; Thu, 14 May 2020 23:05:19 +0000 Received: from BN6PR04MB0660.namprd04.prod.outlook.com (2a01:111:e400:fc65::44) by MW2NAM12FT003.mail.protection.outlook.com (2a01:111:e400:fc65::70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.11 via Frontend Transport; Thu, 14 May 2020 23:05:19 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:74862B13F85791B1DEA666493F20868B73C6CDBCF68E78AB8A00B9EAED5B6DC7; UpperCasedChecksum:00EE86BF9418EED3CF25276A5E25B1D90AA9C5C451A54C98D07631ABF8140D81; SizeAsReceived:7869; Count:50 Received: from BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc]) by BN6PR04MB0660.namprd04.prod.outlook.com ([fe80::ad10:4127:4bc8:76fc%6]) with mapi id 15.20.3000.022; Thu, 14 May 2020 23:05:19 +0000 From: Jonathan Bakker To: sre@kernel.org, krzk@kernel.org, jonghwa3.lee@samsung.com, tglx@linutronix.de, kstewart@linuxfoundation.org, baolin.wang7@gmail.com, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Jonathan Bakker Subject: [PATCH 09/10] power: supply: charger-manager: Count cm-chargers property directly Date: Thu, 14 May 2020 16:04:34 -0700 Message-ID: X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200514230435.11798-1-xc-racer2@live.ca> References: <20200514230435.11798-1-xc-racer2@live.ca> X-ClientProxiedBy: MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) To BN6PR04MB0660.namprd04.prod.outlook.com (2603:10b6:404:d9::21) X-Microsoft-Original-Message-ID: <20200514230435.11798-10-xc-racer2@live.ca> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from jon-hp-6570b.telus (2001:569:fb68:9c00:8067:f823:1e15:7520) by MWHPR22CA0040.namprd22.prod.outlook.com (2603:10b6:300:69::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.26 via Frontend Transport; Thu, 14 May 2020 23:05:17 +0000 X-Mailer: git-send-email 2.20.1 X-Microsoft-Original-Message-ID: <20200514230435.11798-10-xc-racer2@live.ca> X-TMN: [EpCpjepnmk2cjalAvX2YBosdIDPdzGZTlvQoEZxd5csTAj9x2S6pPEJtc8Ppjy9u] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 50 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: ece23963-be24-4f3a-9782-08d7f85b45a5 X-MS-TrafficTypeDiagnostic: MW2NAM12HT132: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +LYQwITxRiGsdQAQeQwKhOVcATtt6FfqJhh95tPGiyKITaMFb04krSNQERKHKtLJ9PRXNui69KEd2Ftrhdc83bwP3FDQJyNhCHP3jkriAWGuUl3FQ2KT4s43alM5+WEqp8A49Zs/H3PndiNKd7ibqt7mGPkmjt8kja+RirliWXlrD+ItsbB7CAk0+rQ/IeN2GxLPTFmjFaSuzVOCqKKd3A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:BN6PR04MB0660.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:; DIR:OUT; SFP:1901; X-MS-Exchange-AntiSpam-MessageData: ticopCGDOfT5aqgJnzaVJu9MdZIa1+ST7R79Red8Ufk/fzzemgWI246Gn9c2AARx6PNBhbGVyMcyU4NcuKMvaXrSts3CSq5jq8bOKNbml4qutB8Yb+Ay+4U5h/969HsWitg+l40zZ5Y9p426vlHTu77vPSrIxzPAqfasqlRZ1sMLTiajHfeZ63GAtDHemSrQYvhFan+m6HVCc5wBiTAVcg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ece23963-be24-4f3a-9782-08d7f85b45a5 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 May 2020 23:05:19.6494 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2NAM12HT132 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Rather than having a cm-chargers and a separate cm-num-chargers property, simply count the entries in cm-chargers. Signed-off-by: Jonathan Bakker --- drivers/power/supply/charger-manager.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/charger-manager.c b/drivers/power/supply/charger-manager.c index 4ad3dd754abf..f0ef8a10891c 100644 --- a/drivers/power/supply/charger-manager.c +++ b/drivers/power/supply/charger-manager.c @@ -1311,8 +1311,8 @@ static struct charger_desc *of_cm_parse_desc(struct device *dev) desc->battery_present = battery_stat; /* chargers */ - of_property_read_u32(np, "cm-num-chargers", &num_chgs); - if (num_chgs) { + num_chgs = of_property_count_strings(np, "cm-chargers"); + if (num_chgs > 0) { int i; /* Allocate empty bin at the tail of array */