From patchwork Thu Apr 2 14:57:01 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: 11470963 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 32A321668 for ; Thu, 2 Apr 2020 14:57:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0748B20784 for ; Thu, 2 Apr 2020 14:57:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="hoS09uFW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388921AbgDBO5E (ORCPT ); Thu, 2 Apr 2020 10:57:04 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:31914 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388761AbgDBO5E (ORCPT ); Thu, 2 Apr 2020 10:57:04 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48tR3y0BTCzHd; Thu, 2 Apr 2020 16:57:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585839422; bh=8lunpxS98lM0f3PoyUteDz8Xwp4fV51FcDnCqkylrZA=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=hoS09uFW+GPXuh1z+aIpbT5MAjC6fnIv73IWsJ6Kx81UG0BtmCdCXIn0NpweywAKf DssCFHbtDscIkD5JbBxkg4+UZ+Z2b4LDO4WIDkJGu2qhusWOWh0VaXX/xGUE9KcIkm 4L4Ig3fCovSKv1E/Bm4Zx3LSTZQ9xOVo2MzkjRG4xtvJ+tCdqKPm4/zfIcqh71dN2F hXugqAitTvANvZCHLlGrD2qWnUaErvnhyMPYwsac0wyZp9HwtLWzdw4vwKgVUJoWnN mznrqbWtMMLTTEtS+yb3T8b+jyqKFKFAnohlc8j03SnPLtnzUCPBXDKTR4oayf2Zdr 4OcC+gLo+egYg== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Thu, 02 Apr 2020 16:57:01 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH 1/7] 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 Thu Apr 2 14:57:02 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: 11470967 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 C35C092A for ; Thu, 2 Apr 2020 14:57:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A0D5D20757 for ; Thu, 2 Apr 2020 14:57:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="Mi0V/TvN" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388689AbgDBO5c (ORCPT ); Thu, 2 Apr 2020 10:57:32 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:19534 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388781AbgDBO5E (ORCPT ); Thu, 2 Apr 2020 10:57:04 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48tR3y3r2gzpX; Thu, 2 Apr 2020 16:57:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585839422; bh=K+vbcp79f0yG60D3y6nK9BE+zeYjqGJsmkCt6t37wr0=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=Mi0V/TvNKwA1OLrLq3LGyPRuGDs77F1SP7rPgrZKFFOXlPOdjDMIsD9EHg5ADdUuO ExdV36+kU3N3uloYaKuKi0TDUiR0TPDJTdqZv5/4je2ujMN/jmkYnmYqbgR+Cw5PR5 AxOxyMn89Z2AyD77CgmVk7KN3WCLJiOWfMRXZUHV9AUfatiQcwDmh+GkUA6b8Xhmu9 1VshBE7unV6uiVXimKYQHNBLZH2LgKLw0SHbWagLYkinCwVmOroaPBsenlfUCGPptK sXUuGRKnnin97NRusN1Q5DzIaV+pZogkle33k+9pcel22pVUw+c7yV1oKRf24NyWAO 0Vuip3IDQmDVw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Thu, 02 Apr 2020 16:57:02 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH 2/7] 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 Thu Apr 2 14:57:02 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: 11470961 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 46FC51668 for ; Thu, 2 Apr 2020 14:57:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2507020784 for ; Thu, 2 Apr 2020 14:57:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="WSoJUufM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388953AbgDBO5F (ORCPT ); Thu, 2 Apr 2020 10:57:05 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:15630 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388785AbgDBO5E (ORCPT ); Thu, 2 Apr 2020 10:57:04 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48tR3y6mclzqB; Thu, 2 Apr 2020 16:57:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585839423; bh=fWZf0Q8vDlPNby4vOJe9G6yszXTLMk5ijtToPbvw+xE=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=WSoJUufMMLcWNGXHPRSlgMb+yUru/5RLiGWzO8/s7Rwo6KV6Iqr3XcHObCIGu5F29 J4dBVT5EeawGG7olri/r14ZDcKoaDtczUL8AvfVB4y4yUWs6zix1XxHZbAnlTH5qGk TVl/ksCHzNGrdcl/WO7TrS19mgvPTOtyNSn4VLUNKdS3j7aI6mGRoC+55HR534RKJZ snV1KtY00Cjh9PbBXsTp3SjXVEjJ/awEb10ciQwZ2q8Y6w673wb8TajpkL7776cdeG ofnqJg4lRXDebEa35jGYFkB+UfmfZyeuixpsHg87s/xnXD6x0kLQTB/S86eJ3r9OJ1 6bfw7XxAiJNmw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Thu, 02 Apr 2020 16:57:02 +0200 Message-Id: <4a8ac6700e1503a69146f3eefd7cb515d11bfc9f.1585837575.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH 3/7] power: supply: core: fix HWMON temperature labels MIME-Version: 1.0 To: Sebastian Reichel , Andrey Smirnov , Guenter Roeck 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. While at it, make room for labeling other channels. Signed-off-by: Michał Mirosław --- drivers/power/supply/power_supply_hwmon.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c index 75cf861ba492..83318a21fb52 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,7 +149,14 @@ static int power_supply_hwmon_read_string(struct device *dev, u32 attr, int channel, const char **str) { - *str = channel ? "temp" : "temp ambient"; + switch (type) { + case hwmon_temp: + *str = ps_temp_label[channel]; + break; + default: + break; + } + return 0; } From patchwork Thu Apr 2 14:57:03 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: 11470959 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 BA16D92A for ; Thu, 2 Apr 2020 14:57:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 989972078C for ; Thu, 2 Apr 2020 14:57:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="evQzZzAP" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388764AbgDBO5Z (ORCPT ); Thu, 2 Apr 2020 10:57:25 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:39629 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388823AbgDBO5F (ORCPT ); Thu, 2 Apr 2020 10:57:05 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48tR3z3DK4zwy; Thu, 2 Apr 2020 16:57:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585839423; bh=7bziPBmLgN03w+As65y0di/xcEI1r2q/jImfIySQxjY=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=evQzZzAPENuWhwsb5RJM9WMUYr5N7yFedykWzkdn0f4KnOPWDO3PtZ2Z/xcjpKQfG d1sq9a/M29+/d11ArpffiBp3qUbzz9S0Vnt2V54P+A7KPqml4LUlCF78FGdTPO9kxQ KeJKye1AzXETRDl3Em54jXjFmVefJ6wsxsJ4BlFtSR2JjFpc/NX0N4b0B26A5UpnXJ zjgyFYNFxdbqojbhDC9lnY9yDBqv4STq3zMOsbGUPSJxqgJOpxISo4IIgRuBLB2wPx 3jRePJz/gzLuh3O77rCakHQXfHAR4wTjWWlbbq8YsbydwwIBOJTgqVuMoVviGBmwvR supR66xMmB6XQ== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Thu, 02 Apr 2020 16:57:03 +0200 Message-Id: <9dc504550be598dd333ebf41d28484b886ffd7c0.1585837575.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH 4/7] 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 83318a21fb52..118d73a2ab4a 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 Thu Apr 2 14:57:03 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: 11470955 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 EAFBD1668 for ; Thu, 2 Apr 2020 14:57:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BEBB420784 for ; Thu, 2 Apr 2020 14:57:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="Drd19yd9" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388968AbgDBO5I (ORCPT ); Thu, 2 Apr 2020 10:57:08 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:1958 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388761AbgDBO5H (ORCPT ); Thu, 2 Apr 2020 10:57:07 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48tR3z6rSNz1qr; Thu, 2 Apr 2020 16:57:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585839424; bh=5+wT1S/f6+XIYE21J3sxG0B2NXkwzq83YHdkRZuZA3A=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=Drd19yd9mA+9KMbEU87EADxnygW+ZfNL+9hzJyaDzVlS0c5XVNFNn68KWOg9OK+07 VIpqSaJ/zkiSuWky/6MKkVB261GpywEnTVyi7FsYCOiEhKAhhJHKRQH1Npc7Q8KFCS HmCIF5gUd1lBtTILYOAsX9oNB9FZ+ILfR9AXf0IOf5mh8UCK8Z2jKqKmGRQwYWRspX WjI7ixNTx2URbHuuWlBn+9SumnbPvL0GMoKWX9vfdgRXzQCIksfLNw0K4zbRu+MyG5 oHQQNmloW031v8VbM6TEOQ+2fuQrDn5h+8/2u0B/rH18N5C/aiibT0qtfuuKlWss+O vDoJqQFJ+LI0w== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Thu, 02 Apr 2020 16:57:03 +0200 Message-Id: <31ac01343ea01957b409d8a244b15cfbf3ab291f.1585837575.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH 5/7] 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 --- drivers/power/supply/power_supply_hwmon.c | 107 +++++++++++++++++++++- drivers/power/supply/power_supply_sysfs.c | 2 + include/linux/power_supply.h | 2 + 3 files changed, 106 insertions(+), 5 deletions(-) diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c index 118d73a2ab4a..c638750e0a18 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, @@ -187,6 +264,11 @@ static int power_supply_hwmon_read_string(struct device *dev, const char **str) { switch (type) { + case hwmon_in: + case hwmon_curr: + *str = ps_input_label[channel]; + break; + case hwmon_temp: *str = ps_temp_label[channel]; break; @@ -304,15 +386,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 }; @@ -377,6 +470,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 Thu Apr 2 14:57:04 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: 11470957 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 2E38892A for ; Thu, 2 Apr 2020 14:57:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0213820784 for ; Thu, 2 Apr 2020 14:57:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="dvDvrXI8" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388785AbgDBO5H (ORCPT ); Thu, 2 Apr 2020 10:57:07 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:2547 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388951AbgDBO5G (ORCPT ); Thu, 2 Apr 2020 10:57:06 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48tR4050byz1vW; Thu, 2 Apr 2020 16:57:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585839424; bh=cuviXcU/1giaeeygC13NSbn/gwYWhk9vup3Y9oNdwrA=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=dvDvrXI8aqhl0TkjRI3H71O2FhdtOgem06C+RZGnAz0CTkxaI0gcBMj/uI6LU8+b0 jlLlHtntCtZuM4rDlhPM8eQMvDnQFB/6KclRd79SGq1JpJvWQ+aooFknVhyzBBKFDx 0m5tQyIkobWWojDlm0skG03gmjlpoz71jbOFpodhe8o2mKPmtZ9b2ssOUehPXEQ8eB BSUvOFclX8wH03xuwC5Sr1/Ilf/5ZY0A8zzGZ6WRyc9cuFScJJENWdGaMxs4strl5Y t1zcmDt2+FgYUy94YH13qUmG7MMWKEkLgsFVJuBmRiEloS9YOiXSmyX9qt05XlHrQu gk7uAtCat3ZpQ== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Thu, 02 Apr 2020 16:57:04 +0200 Message-Id: <2e8bff71e2cedeca044d8265c8fb34b3e627eff8.1585837575.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH 6/7] 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 c638750e0a18..781a265bd061 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[] = { @@ -404,6 +421,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 @@ -474,6 +496,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 Thu Apr 2 14:57:04 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: 11470953 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 58EB692A for ; Thu, 2 Apr 2020 14:57:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 380402078C for ; Thu, 2 Apr 2020 14:57:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="bOrdNKXw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388966AbgDBO5H (ORCPT ); Thu, 2 Apr 2020 10:57:07 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:3035 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388959AbgDBO5G (ORCPT ); Thu, 2 Apr 2020 10:57:06 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48tR412vyCz1vh; Thu, 2 Apr 2020 16:57:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585839425; bh=i8rERO1eokJ5ICLdJIYDblCyT0yVXlWido55eTwKoeY=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=bOrdNKXwbQuvjtEwzOMjxh0RSTpzizqKnnXdKOboiZPCo+8VSHl+JYAaRmMZX54GY sdVHQ5NxR1zeOAp0RcZpBkMqIxmQgL/TKJLE7NLO5Ru3VOrPtVmvG3lm8a4M4jTAUU CISJyqhtx0wwSfSJy/AE+TwWcSYH9ggrI2QzvfSnOdrW+Z2K755IB8ge6GiQFa+RI5 5Oq9XXGVEhZmGsPiopSUYu+lArNfrxNXt/E/7fkA08hkslM+c9ZwRoEY7Yjw7ScLN6 Ru5iwN+ZddsnW9jSqfBjHVq6bm0nMsoKjNl/MeM2TNNW/LkE134HAc/rOVnKN1o+wf fip2CCMfR0V3A== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Thu, 02 Apr 2020 16:57:04 +0200 Message-Id: <77267299aa987aa31abe26da0a353418a49d9619.1585837575.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH 7/7] 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 ~~~~~~~~~~~~~~~~~~~~~