From patchwork Fri Apr 3 16:23:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 11473149 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B6EE814DD for ; Fri, 3 Apr 2020 16:23:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8ACAC2137B for ; Fri, 3 Apr 2020 16:23:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="fFBoOCiZ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404409AbgDCQXe (ORCPT ); Fri, 3 Apr 2020 12:23:34 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:16700 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404284AbgDCQXd (ORCPT ); Fri, 3 Apr 2020 12:23:33 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48v4xH1Vr3zGl; Fri, 3 Apr 2020 18:23:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585931011; bh=8lunpxS98lM0f3PoyUteDz8Xwp4fV51FcDnCqkylrZA=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=fFBoOCiZ3YnSg5A6zUE339EV7k7+8yHYKQWCFtzyFZ0tvOtnw0RyquTHs97P3VKXK gmvevHujRta48yTH8VpBv2ePoL4FPhMmpyAJatiMkfrKSYM4EzsjeHnxZzN/ZOYDuA D1pDHuQfAct9TqwXTXU1hOJ/ZiVECVgfl3k1q1sywZ4eIy5tVQ/xJuNZbJl2SOGE54 IRXSLlKm8L4sT2uKmkO7xlV2Nu3hZZVvgtNpxvOjBzCy6nig0Z17RXvva9cdaUXpaD pXt4JtxVWF73hhUmS4MhsCjHLIxnEqkXhBgMhNHj7DzsHvoM9wJosdA8iZXhejPRHO WHy7Rh7pi44hQ== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 18:23:29 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v2 1/8] power: supply: core: reduce power_supply_show_usb_type() parameters MIME-Version: 1.0 To: Andrey Smirnov , Guenter Roeck , Sebastian Reichel Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Reduce power_supply_show_usb_type() parameter count by folding power_supply_desc dereference into the function. This makes following patch making usb_types const easier. Signed-off-by: Michał Mirosław --- drivers/power/supply/power_supply_sysfs.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c index f37ad4eae60b..51de3f47b25d 100644 --- a/drivers/power/supply/power_supply_sysfs.c +++ b/drivers/power/supply/power_supply_sysfs.c @@ -78,8 +78,7 @@ static const char * const power_supply_scope_text[] = { }; static ssize_t power_supply_show_usb_type(struct device *dev, - enum power_supply_usb_type *usb_types, - ssize_t num_usb_types, + const struct power_supply_desc *desc, union power_supply_propval *value, char *buf) { @@ -88,8 +87,8 @@ static ssize_t power_supply_show_usb_type(struct device *dev, bool match = false; int i; - for (i = 0; i < num_usb_types; ++i) { - usb_type = usb_types[i]; + for (i = 0; i < desc->num_usb_types; ++i) { + usb_type = desc->usb_types[i]; if (value->intval == usb_type) { count += sprintf(buf + count, "[%s] ", @@ -163,8 +162,7 @@ static ssize_t power_supply_show_property(struct device *dev, power_supply_type_text[value.intval]); break; case POWER_SUPPLY_PROP_USB_TYPE: - ret = power_supply_show_usb_type(dev, psy->desc->usb_types, - psy->desc->num_usb_types, + ret = power_supply_show_usb_type(dev, psy->desc, &value, buf); break; case POWER_SUPPLY_PROP_SCOPE: From patchwork Fri Apr 3 16:23:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 11473153 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AC3CE14DD for ; Fri, 3 Apr 2020 16:23:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8ADD72077D for ; Fri, 3 Apr 2020 16:23:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="ha+I+lDn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404484AbgDCQX5 (ORCPT ); Fri, 3 Apr 2020 12:23:57 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:25765 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728293AbgDCQXd (ORCPT ); Fri, 3 Apr 2020 12:23:33 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48v4xH4RJBzpX; Fri, 3 Apr 2020 18:23:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585931011; bh=K+vbcp79f0yG60D3y6nK9BE+zeYjqGJsmkCt6t37wr0=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=ha+I+lDn0IayMpv5TffKHTJ/ZweBKjNKFKzbvhL6uuaDiN0PLLEhPQ5PqoAe6SKkM GLT3qLFt5qr2M9gSzrzoYJxue0sCC70JZohrXbyYMq3RorKPdRgiqEGihRCYEuAKXG /fM3NaSPaQ7BmrIFwOY0jAUA02s/54vDjXaaDg19DklUr/K5tIdLbCCWF9p57qCR23 nf2o3kCtspSV0mcY1zSL7SRU4xcckg0usR8z3INYfuwVy+oKb13dkokJIdfjOOenjd EeVZg8mGLz2lJJd1zt0vYwRLb4yRa9owxMsFVdpH1th8NnbwG+tmeCdSDTXABnCQwT SVo6bVokhDw3Q== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 18:23:31 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v2 2/8] power: supply: core: allow to constify property lists MIME-Version: 1.0 To: Andrey Smirnov , Guenter Roeck , Sebastian Reichel Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Since tables pointed to by power_supply_desc->properties and ->usb_types are not expected to change after registration, mark the pointers accordingly Signed-off-by: Michał Mirosław Reported-by: kbuild test robot Reported-by: kbuild test robot --- include/linux/power_supply.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index dcd5a71e6c67..6a34df65d4d1 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -223,9 +223,9 @@ struct power_supply_config { struct power_supply_desc { const char *name; enum power_supply_type type; - enum power_supply_usb_type *usb_types; + const enum power_supply_usb_type *usb_types; size_t num_usb_types; - enum power_supply_property *properties; + const enum power_supply_property *properties; size_t num_properties; /* From patchwork Fri Apr 3 16:23:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 11473139 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9C88014DD for ; Fri, 3 Apr 2020 16:23:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 70CE220721 for ; Fri, 3 Apr 2020 16:23:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="cvcB6fRG" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404390AbgDCQXe (ORCPT ); Fri, 3 Apr 2020 12:23:34 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:21872 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404374AbgDCQXd (ORCPT ); Fri, 3 Apr 2020 12:23:33 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48v4xJ0Dn5zqB; Fri, 3 Apr 2020 18:23:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585931012; bh=fseErXmDkX64tuP/VBZQqH12qqnxX3YPVLXIds6NfEI=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=cvcB6fRGkOZ95vWWooSHpXFLGj53m6WseMTpjM79hEvtg8CL+V9uyE/GWq3xqp+YI QPHzdF5hXCCicdhEopQRtsKEJrR3LaKtjcOF4/GbRhI6SLXHWX37e0NSN06Htkjujh iG87RvngSpY69OX+eTUQN4gm2VYBRFG3N13pCe5tcGiIrD4DugG2Qes9f1EgNZgrY8 FRvhIvQR6Xl0Xf/yF/IEKq1grz2+IFUo6uPpkdP8Rv1Hyf6rNyGcdBrrRogLFQVYDE eIoaYWaBwVHIH74aIJBLL6s8moyJZ4pboAyqVMJDqzrceXvkpbO5cOMZPqaBI47SC9 97fQa353pZd9g== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 18:23:31 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v2 3/8] power: supply: core: fix HWMON temperature labels MIME-Version: 1.0 To: Sebastian Reichel , Guenter Roeck , Andrey Smirnov Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org tempX_label files are swapped compared to what power_supply_hwmon_temp_to_property() uses. Make them match. Cc: stable@vger.kernel.org Fixes: e67d4dfc9ff1 ("power: supply: Add HWMON compatibility layer") Signed-off-by: Michał Mirosław --- v2: split parameter checking to separate patch --- drivers/power/supply/power_supply_hwmon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c index 75cf861ba492..67b6ee60085e 100644 --- a/drivers/power/supply/power_supply_hwmon.c +++ b/drivers/power/supply/power_supply_hwmon.c @@ -144,7 +144,7 @@ static int power_supply_hwmon_read_string(struct device *dev, u32 attr, int channel, const char **str) { - *str = channel ? "temp" : "temp ambient"; + *str = channel ? "temp ambient" : "temp"; return 0; } From patchwork Fri Apr 3 16:23:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 11473151 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 19242912 for ; Fri, 3 Apr 2020 16:23:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E181A20BED for ; Fri, 3 Apr 2020 16:23:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="Cod8sd6U" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404383AbgDCQXx (ORCPT ); Fri, 3 Apr 2020 12:23:53 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:20928 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404382AbgDCQXe (ORCPT ); Fri, 3 Apr 2020 12:23:34 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48v4xJ3NsszwF; Fri, 3 Apr 2020 18:23:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585931012; bh=ytAv1RGisXEVnnR7xx1RoYPw9sNMYqF3J9qpj0xDcU4=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=Cod8sd6UiT3mgAim0MFcpfiA4927isjQZJuRXamZ6mEPh8E9OzhhWENCXp3bgEm19 XougCDk3g4z2sCP1qsCVXiX73x3aG7bNRnl9sZpPpUXXBK1zs8AJFnLTu9sitolo2T 4xycthdS/Utm2n74TjYJz2/G6p0qxKTulCmeUXmQ0R4altfOX6fje/NnkzkcqamNTl HAWv+LoZsBSazHjmmWAOLtSHQsFNSqewxTEPfu7XCEbGaLga74mVgyS8sRLrUq7pea 56138xNn+zasecF6lgEFXI33T8+8AnZjM0+OqVdHBvi+7gO5dXAf+xdhJJgpy/SHmt eBRbqFFagwwLw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 18:23:32 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v2 4/8] power: supply: core: tabularize HWMON temperature labels MIME-Version: 1.0 To: Andrey Smirnov , Guenter Roeck , Sebastian Reichel Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Rework power_supply_hwmon_read_string() to check it's parameters. This allows to extend it later with labels for other types of measurements. Signed-off-by: Michał Mirosław --- v2: split from fix temperature labels --- drivers/power/supply/power_supply_hwmon.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c index 67b6ee60085e..48c73994732c 100644 --- a/drivers/power/supply/power_supply_hwmon.c +++ b/drivers/power/supply/power_supply_hwmon.c @@ -43,6 +43,11 @@ static int power_supply_hwmon_curr_to_property(u32 attr) } } +static const char *const ps_temp_label[] = { + "temp", + "ambient temp", +}; + static int power_supply_hwmon_temp_to_property(u32 attr, int channel) { if (channel) { @@ -144,8 +149,20 @@ static int power_supply_hwmon_read_string(struct device *dev, u32 attr, int channel, const char **str) { - *str = channel ? "temp ambient" : "temp"; - return 0; + if (channel < 0) + return -EINVAL; + + switch (type) { + case hwmon_temp: + if (channel >= ARRAY_SIZE(ps_temp_label)) + return -EINVAL; + *str = ps_temp_label[channel]; + return 0; + default: + break; + } + + return -EINVAL; } static int From patchwork Fri Apr 3 16:23:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 11473147 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6DB621667 for ; Fri, 3 Apr 2020 16:23:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4C121215A4 for ; Fri, 3 Apr 2020 16:23:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="TuSwR9SL" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404022AbgDCQXt (ORCPT ); Fri, 3 Apr 2020 12:23:49 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:32439 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404383AbgDCQXf (ORCPT ); Fri, 3 Apr 2020 12:23:35 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48v4xJ6yVHz1j9; Fri, 3 Apr 2020 18:23:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585931013; bh=e01NuCFI8cZ9kBYqxCj223bkIKoEPVuKgnTPhgrzpws=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=TuSwR9SLvmCeWKXZhxbD264t1HXK3UoVQ2/Z2imWy3p/QSFTdA0Y39ab39llcEaB6 PMgU5wQAfkFzY9UmORd0v6dG9K5iRzKWgAmuPi9SI9mQ/x1vGb+Jp7qx0cXw+Zu9rO 1DRinW8ThLUkyetu6Os4DjpDSdoMq0d9IZuQ0H0Ry7Ps8RnhdCKt3ga49DHOTUHufG gANOMoUc5TF0aYOJYcLD2gq5PuUk1CKOlq/m6OgNWqsZi2M6ioLLL6rPEZXO8pqKuw M3NVVNw1a9XDJU64vEB5kMRPiBvBexn4vBE1PwyOdw7XZ7InkHq3yDRIyf/yHxIklT WxEKp8i3DixrQ== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 18:23:32 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v2 5/8] power: supply: core: hide unused HWMON labels MIME-Version: 1.0 To: Andrey Smirnov , Guenter Roeck , Sebastian Reichel Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Currently HWMON emulation shows all labels (temp and ambient temp) regardless if power supply supports reading the values. Check that at least one property is enabled for each label. Signed-off-by: Michał Mirosław --- drivers/power/supply/power_supply_hwmon.c | 43 +++++++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c index 48c73994732c..a4f576f39b9c 100644 --- a/drivers/power/supply/power_supply_hwmon.c +++ b/drivers/power/supply/power_supply_hwmon.c @@ -103,6 +103,40 @@ static bool power_supply_hwmon_is_a_label(enum hwmon_sensor_types type, return type == hwmon_temp && attr == hwmon_temp_label; } +static bool power_supply_hwmon_has_property( + const struct power_supply_hwmon *psyhw, + enum hwmon_sensor_types type, u32 attr, int channel) +{ + int prop = power_supply_hwmon_to_property(type, attr, channel); + + return prop >= 0 && test_bit(prop, psyhw->props); +} + +static bool power_supply_hwmon_has_input( + const struct power_supply_hwmon *psyhw, + enum hwmon_sensor_types type, int channel) +{ + static const enum hwmon_temp_attributes temp_attrs[] = { + hwmon_temp_input, + hwmon_temp_min, hwmon_temp_max, + hwmon_temp_min_alarm, hwmon_temp_max_alarm, + }; + size_t i; + + switch (type) { + case hwmon_temp: + for (i = 0; i < ARRAY_SIZE(temp_attrs); ++i) + if (power_supply_hwmon_has_property(psyhw, type, + temp_attrs[i], channel)) + return true; + break; + default: + break; + } + + return false; +} + static bool power_supply_hwmon_is_writable(enum hwmon_sensor_types type, u32 attr) { @@ -129,9 +163,12 @@ static umode_t power_supply_hwmon_is_visible(const void *data, const struct power_supply_hwmon *psyhw = data; int prop; - - if (power_supply_hwmon_is_a_label(type, attr)) - return 0444; + if (power_supply_hwmon_is_a_label(type, attr)) { + if (power_supply_hwmon_has_input(psyhw, type, channel)) + return 0444; + else + return 0; + } prop = power_supply_hwmon_to_property(type, attr, channel); if (prop < 0 || !test_bit(prop, psyhw->props)) From patchwork Fri Apr 3 16:23:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 11473145 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6DA801667 for ; Fri, 3 Apr 2020 16:23:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 426ED2077D for ; Fri, 3 Apr 2020 16:23:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="X64W5q1I" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404446AbgDCQXi (ORCPT ); Fri, 3 Apr 2020 12:23:38 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:16515 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404415AbgDCQXg (ORCPT ); Fri, 3 Apr 2020 12:23:36 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48v4xK49rXz1th; Fri, 3 Apr 2020 18:23:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585931013; bh=7hhMltiZC2dUoAmdtdxXPUenD0Lj9JBr9ArFwpSF3PI=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=X64W5q1I8X1FxJ1vD9Qat/XvOBCg69A0L/xcVhEL2IfDOwBrM37KSrUe/NVR4qipZ 75sCdWiZsZj3ZeK5/oAJ8yOcH+0hd6YKvamkVirARhoOdbQUCZ8aNqNCszfGL4AbOu iiTlGqEfo2kwS9yXJoYxrZka3T2q8uPwoctJIyWUHk4MgwiesoQ4v1LhVHS3qBF8Rq o9h0I5RSBM+WOjYj3e6xadf4vhpfjZbEX/6IZHoe76xYDrxvtUTVVIK9dbIIIb+9q7 YbR1b7rKnl3MIE5D88KEEDIDALE0ZtOpN8rG2XUVeWjb0lkCR+2li5jpZovjbD5sYw x/W8ZrWpKJ/iw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 18:23:33 +0200 Message-Id: <2ce87c2511ddc5afb907a110fa0bc54af82b25d3.1585929579.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v2 6/8] power: supply: core: add input voltage/current measurements MIME-Version: 1.0 To: Andrey Smirnov , Guenter Roeck , Sebastian Reichel Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Introduce input voltage and current limits and measurements. This makes room for e.g. VBUS measurements in USB chargers. Signed-off-by: Michał Mirosław --- v2: add parameter checking in power_supply_hwmon_read_string() --- drivers/power/supply/power_supply_hwmon.c | 109 +++++++++++++++++++++- drivers/power/supply/power_supply_sysfs.c | 2 + include/linux/power_supply.h | 2 + 3 files changed, 108 insertions(+), 5 deletions(-) diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c index a4f576f39b9c..ef6196bf9bec 100644 --- a/drivers/power/supply/power_supply_hwmon.c +++ b/drivers/power/supply/power_supply_hwmon.c @@ -13,7 +13,7 @@ struct power_supply_hwmon { unsigned long *props; }; -static int power_supply_hwmon_in_to_property(u32 attr) +static int power_supply_hwmon_in0_to_property(u32 attr) { switch (attr) { case hwmon_in_average: @@ -29,7 +29,31 @@ static int power_supply_hwmon_in_to_property(u32 attr) } } -static int power_supply_hwmon_curr_to_property(u32 attr) +static int power_supply_hwmon_in1_to_property(u32 attr) +{ + switch (attr) { + case hwmon_in_max: + return POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT; + case hwmon_in_input: + return POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW; + default: + return -EINVAL; + } +} + +static int power_supply_hwmon_in_to_property(u32 attr, int channel) +{ + switch (channel) { + case 0: + return power_supply_hwmon_in0_to_property(attr); + case 1: + return power_supply_hwmon_in1_to_property(attr); + default: + return -EINVAL; + } +} + +static int power_supply_hwmon_curr0_to_property(u32 attr) { switch (attr) { case hwmon_curr_average: @@ -43,6 +67,35 @@ static int power_supply_hwmon_curr_to_property(u32 attr) } } +static int power_supply_hwmon_curr1_to_property(u32 attr) +{ + switch (attr) { + case hwmon_curr_max: + return POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT; + case hwmon_curr_input: + return POWER_SUPPLY_PROP_INPUT_CURRENT_NOW; + default: + return -EINVAL; + } +} + +static int power_supply_hwmon_curr_to_property(u32 attr, int channel) +{ + switch (channel) { + case 0: + return power_supply_hwmon_curr0_to_property(attr); + case 1: + return power_supply_hwmon_curr1_to_property(attr); + default: + return -EINVAL; + } +} + +static const char *const ps_input_label[] = { + "battery", + "external source", +}; + static const char *const ps_temp_label[] = { "temp", "ambient temp", @@ -87,9 +140,9 @@ power_supply_hwmon_to_property(enum hwmon_sensor_types type, { switch (type) { case hwmon_in: - return power_supply_hwmon_in_to_property(attr); + return power_supply_hwmon_in_to_property(attr, channel); case hwmon_curr: - return power_supply_hwmon_curr_to_property(attr); + return power_supply_hwmon_curr_to_property(attr, channel); case hwmon_temp: return power_supply_hwmon_temp_to_property(attr, channel); default: @@ -100,7 +153,9 @@ power_supply_hwmon_to_property(enum hwmon_sensor_types type, static bool power_supply_hwmon_is_a_label(enum hwmon_sensor_types type, u32 attr) { - return type == hwmon_temp && attr == hwmon_temp_label; + return (type == hwmon_temp && attr == hwmon_temp_label) || + (type == hwmon_in && attr == hwmon_in_label) || + (type == hwmon_curr && attr == hwmon_curr_label); } static bool power_supply_hwmon_has_property( @@ -116,6 +171,14 @@ static bool power_supply_hwmon_has_input( const struct power_supply_hwmon *psyhw, enum hwmon_sensor_types type, int channel) { + static const enum hwmon_in_attributes in_attrs[] = { + hwmon_in_input, hwmon_in_average, + hwmon_in_min, hwmon_in_max, + }; + static const enum hwmon_curr_attributes curr_attrs[] = { + hwmon_curr_input, hwmon_curr_average, + hwmon_curr_max, + }; static const enum hwmon_temp_attributes temp_attrs[] = { hwmon_temp_input, hwmon_temp_min, hwmon_temp_max, @@ -124,6 +187,20 @@ static bool power_supply_hwmon_has_input( size_t i; switch (type) { + case hwmon_in: + for (i = 0; i < ARRAY_SIZE(in_attrs); ++i) + if (power_supply_hwmon_has_property(psyhw, type, + in_attrs[i], channel)) + return true; + break; + + case hwmon_curr: + for (i = 0; i < ARRAY_SIZE(curr_attrs); ++i) + if (power_supply_hwmon_has_property(psyhw, type, + curr_attrs[i], channel)) + return true; + break; + case hwmon_temp: for (i = 0; i < ARRAY_SIZE(temp_attrs); ++i) if (power_supply_hwmon_has_property(psyhw, type, @@ -190,6 +267,13 @@ static int power_supply_hwmon_read_string(struct device *dev, return -EINVAL; switch (type) { + case hwmon_in: + case hwmon_curr: + if (channel >= ARRAY_SIZE(ps_input_label)) + return -EINVAL; + *str = ps_input_label[channel]; + return 0; + case hwmon_temp: if (channel >= ARRAY_SIZE(ps_temp_label)) return -EINVAL; @@ -309,15 +393,26 @@ static const struct hwmon_channel_info *power_supply_hwmon_info[] = { HWMON_T_MAX_ALARM), HWMON_CHANNEL_INFO(curr, + HWMON_C_LABEL | HWMON_C_AVERAGE | HWMON_C_MAX | + HWMON_C_INPUT, + + HWMON_C_LABEL | + HWMON_C_MAX | HWMON_C_INPUT), HWMON_CHANNEL_INFO(in, + HWMON_I_LABEL | HWMON_I_AVERAGE | HWMON_I_MIN | HWMON_I_MAX | + HWMON_I_INPUT, + + HWMON_I_LABEL | + HWMON_I_MAX | HWMON_I_INPUT), + NULL }; @@ -382,6 +477,10 @@ int power_supply_add_hwmon_sysfs(struct power_supply *psy) case POWER_SUPPLY_PROP_VOLTAGE_MIN: case POWER_SUPPLY_PROP_VOLTAGE_MAX: case POWER_SUPPLY_PROP_VOLTAGE_NOW: + case POWER_SUPPLY_PROP_INPUT_CURRENT_NOW: + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT: + case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW: + case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT: set_bit(prop, psyhw->props); break; default: diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c index 51de3f47b25d..1d1fb69516a8 100644 --- a/drivers/power/supply/power_supply_sysfs.c +++ b/drivers/power/supply/power_supply_sysfs.c @@ -273,7 +273,9 @@ static struct device_attribute power_supply_attrs[] = { POWER_SUPPLY_ATTR(charge_control_limit_max), POWER_SUPPLY_ATTR(charge_control_start_threshold), POWER_SUPPLY_ATTR(charge_control_end_threshold), + POWER_SUPPLY_ATTR(input_current_now), POWER_SUPPLY_ATTR(input_current_limit), + POWER_SUPPLY_ATTR(input_voltage_now), POWER_SUPPLY_ATTR(input_voltage_limit), POWER_SUPPLY_ATTR(input_power_limit), POWER_SUPPLY_ATTR(energy_full_design), diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 6a34df65d4d1..5313d1284aad 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -127,7 +127,9 @@ enum power_supply_property { POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX, POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD, /* in percents! */ POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD, /* in percents! */ + POWER_SUPPLY_PROP_INPUT_CURRENT_NOW, POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, + POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW, POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT, POWER_SUPPLY_PROP_INPUT_POWER_LIMIT, POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, From patchwork Fri Apr 3 16:23:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 11473141 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 43C9114DD for ; Fri, 3 Apr 2020 16:23:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 20B892073B for ; Fri, 3 Apr 2020 16:23:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="pl3tw/d4" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404284AbgDCQXh (ORCPT ); Fri, 3 Apr 2020 12:23:37 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:21872 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404429AbgDCQXg (ORCPT ); Fri, 3 Apr 2020 12:23:36 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48v4xL25Mmz1vW; Fri, 3 Apr 2020 18:23:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585931014; bh=rE69WxRl/YoTapFXUhUiBoovGB+6IMHH91BhdmkO+Aw=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=pl3tw/d4sLESZhTVNWHd0PlytjzEsR/WPyXVKBhxOcwCx6LRDfszE/Pu5f/JhOZZ8 TU+5moybh1Ep1w5PuO7wDwxW8zQtDCGYHXnN8GJ+L3kgrKKUapEQ8eEk0pVAo+OCdO MtaVRzd+D/CQ+YfmGTDTl7KIpj9b2g+2agSDsx1ToaS7FcntPXZk2SUesjPbGe0G3g DGerkKBfFIfJtQSTpmdG+ZUDYuAtOSOuSIGv48MmlLLV/a+WKK1wg7FYlmYGc846au Hso+UTowTBdEMH2uKwiG3e/7Yk5jKRRAYNVLkY0a2sS0VJ613VEQQFOinC6lzWJWMA 6Dt7RXawcMWdw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 18:23:33 +0200 Message-Id: <232de632e2115f115b8b12736225223cf104b441.1585929580.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v2 7/8] power: supply: core: add output voltage measurements MIME-Version: 1.0 To: Andrey Smirnov , Guenter Roeck , Sebastian Reichel Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Add support for supply output voltage to be measured and configured. This might be different from the voltage on the storage element (battery). Signed-off-by: Michał Mirosław --- drivers/power/supply/power_supply_hwmon.c | 25 +++++++++++++++++++++++ drivers/power/supply/power_supply_sysfs.c | 3 +++ include/linux/power_supply.h | 3 +++ 3 files changed, 31 insertions(+) diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c index ef6196bf9bec..d70742d3e961 100644 --- a/drivers/power/supply/power_supply_hwmon.c +++ b/drivers/power/supply/power_supply_hwmon.c @@ -41,6 +41,20 @@ static int power_supply_hwmon_in1_to_property(u32 attr) } } +static int power_supply_hwmon_in2_to_property(u32 attr) +{ + switch (attr) { + case hwmon_in_min: + return POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN; + case hwmon_in_max: + return POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MAX; + case hwmon_in_input: + return POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW; + default: + return -EINVAL; + } +} + static int power_supply_hwmon_in_to_property(u32 attr, int channel) { switch (channel) { @@ -48,6 +62,8 @@ static int power_supply_hwmon_in_to_property(u32 attr, int channel) return power_supply_hwmon_in0_to_property(attr); case 1: return power_supply_hwmon_in1_to_property(attr); + case 2: + return power_supply_hwmon_in2_to_property(attr); default: return -EINVAL; } @@ -94,6 +110,7 @@ static int power_supply_hwmon_curr_to_property(u32 attr, int channel) static const char *const ps_input_label[] = { "battery", "external source", + "load", }; static const char *const ps_temp_label[] = { @@ -411,6 +428,11 @@ static const struct hwmon_channel_info *power_supply_hwmon_info[] = { HWMON_I_LABEL | HWMON_I_MAX | + HWMON_I_INPUT, + + HWMON_I_LABEL | + HWMON_I_MIN | + HWMON_I_MAX | HWMON_I_INPUT), NULL @@ -481,6 +503,9 @@ int power_supply_add_hwmon_sysfs(struct power_supply *psy) case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT: case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW: case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT: + case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN: + case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MAX: + case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW: set_bit(prop, psyhw->props); break; default: diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c index 1d1fb69516a8..fb6f113b52bb 100644 --- a/drivers/power/supply/power_supply_sysfs.c +++ b/drivers/power/supply/power_supply_sysfs.c @@ -278,6 +278,9 @@ static struct device_attribute power_supply_attrs[] = { POWER_SUPPLY_ATTR(input_voltage_now), POWER_SUPPLY_ATTR(input_voltage_limit), POWER_SUPPLY_ATTR(input_power_limit), + POWER_SUPPLY_ATTR(output_voltage_now), + POWER_SUPPLY_ATTR(output_voltage_min), + POWER_SUPPLY_ATTR(output_voltage_max), POWER_SUPPLY_ATTR(energy_full_design), POWER_SUPPLY_ATTR(energy_empty_design), POWER_SUPPLY_ATTR(energy_full), diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 5313d1284aad..f1ff8d230488 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -132,6 +132,9 @@ enum power_supply_property { POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW, POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT, POWER_SUPPLY_PROP_INPUT_POWER_LIMIT, + POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW, + POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN, + POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MAX, POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN, POWER_SUPPLY_PROP_ENERGY_FULL, From patchwork Fri Apr 3 16:23:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 11473143 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E1DCF912 for ; Fri, 3 Apr 2020 16:23:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B67E92077D for ; Fri, 3 Apr 2020 16:23:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="SgEJc+eh" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404444AbgDCQXh (ORCPT ); Fri, 3 Apr 2020 12:23:37 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:20928 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404434AbgDCQXg (ORCPT ); Fri, 3 Apr 2020 12:23:36 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48v4xL6YPJz1vh; Fri, 3 Apr 2020 18:23:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585931014; bh=i8rERO1eokJ5ICLdJIYDblCyT0yVXlWido55eTwKoeY=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=SgEJc+eh3h6dv3Vbbc5pj+44ZjMlGt4B/PoNuYGnro7Qtmn87zhYFox8GjIU1PtvC /ugfVF2c//RAt5Ib0Orw9hIc2yDptLJXg3JchoI1HCejxzCc0Gy4/+I0wkpcv+efN1 y1b7WBXwBeTQ3uOut7JjN/CMJeVDFHRERA727/dbcJxH5MjnuMatVYPiIVV+8S4lvB 9lunCkm8XTJlifkQJvH7UydyWCzmUtkpx597pI5eeECrh1f+EnH0iVekZfMx1vXbPA rxf4A5KNjKVxrO0wqRoF6JPfn4lY6OmaTFsq3Yt/8U7FqJb296ylfMGSGdEtst7DYx T6L2yWs3n1ggw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 18:23:34 +0200 Message-Id: <044cccd482b77c7ebbbb8ec960eaf73a079df29e.1585929580.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v2 8/8] power: supply: core: document measurement points MIME-Version: 1.0 To: Andrey Smirnov , Guenter Roeck , Sebastian Reichel Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Document used prefixes for input/output/storage voltages and currents. Signed-off-by: Michał Mirosław --- Documentation/power/power_supply_class.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/power/power_supply_class.rst b/Documentation/power/power_supply_class.rst index 7b8c42f8b1de..c41b25aaa755 100644 --- a/Documentation/power/power_supply_class.rst +++ b/Documentation/power/power_supply_class.rst @@ -28,6 +28,12 @@ indication (including whether to use it at all) are fully controllable by user and/or specific machine defaults, per design principles of LED framework). +There are three defined points of measurement for the benefit of mobile and +UPS-like power supplies: INPUT (external power source), OUTPUT (power output +from the module), and unmarked (power flowing to/from a storage element, +eg. battery). Battery is viewed as a power source, so current flowing to +the battery (charging it) is shown negative. + Attributes/properties ~~~~~~~~~~~~~~~~~~~~~