From patchwork Fri Apr 3 20:20:30 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: 11473455 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 11B021392 for ; Fri, 3 Apr 2020 20:20:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D92AE206F5 for ; Fri, 3 Apr 2020 20:20: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="Rp/xDo2N" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727998AbgDCUUd (ORCPT ); Fri, 3 Apr 2020 16:20:33 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:41777 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727792AbgDCUUd (ORCPT ); Fri, 3 Apr 2020 16:20:33 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBk6XyxzGl; Fri, 3 Apr 2020 22:20:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945231; bh=PxKU8o7BoNDyLrnKFV+GeC6g2YaP/coZt/imF8aw61k=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=Rp/xDo2NMn12KWOwZ97Q+rGvA9PFSNCj0UJ70qKRIcVBTdR0x4kB4/OFSyAsTXkqC cdPfiiZp6rOkmPZ3iWJ8I1yMbddICzP54BTtK0AgbkZzibHM9QnR46s7B9F0f5sY5O KcscNokGsWF34mqVcKjSWTP1lRJi0OCDKFNVDalnS29LbOD1qNhciiY3xFrO19wzAY +w/PClpyJFYBzyoJc/dz+vaASEZRV0t0vFitKn+IqFtiO9EhqOOkX6TEl4eMV+kwcu /ocuroFjabcxyV46D4iJLzelb14/quZxuhXIUBRHiRkBB5YyE7XbiEgJFxabYDXlNg QylkDPUIXOt6w== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:30 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 01/11] power: charger-manager: remove duplicate assignment 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 num_properties is already copied earlier using memcpy(). Remove the duplicate. Signed-off-by: Michał Mirosław --- v3: initial version --- drivers/power/supply/charger-manager.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/power/supply/charger-manager.c b/drivers/power/supply/charger-manager.c index a21e1a2673f8..887f5bb879e5 100644 --- a/drivers/power/supply/charger-manager.c +++ b/drivers/power/supply/charger-manager.c @@ -1728,7 +1728,6 @@ static int charger_manager_probe(struct platform_device *pdev) memcpy(cm->charger_psy_desc.properties, default_charger_props, sizeof(enum power_supply_property) * ARRAY_SIZE(default_charger_props)); - cm->charger_psy_desc.num_properties = psy_default.num_properties; /* Find which optional psy-properties are available */ fuel_gauge = power_supply_get_by_name(desc->psy_fuel_gauge); From patchwork Fri Apr 3 20:20: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: 11473469 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 4DFF792C for ; Fri, 3 Apr 2020 20:21:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2CC4420CC7 for ; Fri, 3 Apr 2020 20:21:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="nxz83yBU" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728241AbgDCUUh (ORCPT ); Fri, 3 Apr 2020 16:20:37 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:1086 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727867AbgDCUUf (ORCPT ); Fri, 3 Apr 2020 16:20:35 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBl1nhTzpX; Fri, 3 Apr 2020 22:20:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945231; bh=Uo9Dg3wLKTkFKZCWLFRcaiKTWxbVtqoScgjUwEkb2W8=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=nxz83yBUg1uqm/R9KaMLxkSsgsiD0pHoYlrtlPa7cN6e7iUsNhapQ5kn5tAD+fLJs kliv3pYb58PuQP2Mw/8oni4J8ad0OjktVOaLT9aZQcYT0YGamLmJPWerSurv3fhQJ2 H7pXlkfdllJfgRo6l0Bom9ecUpJxpbytsMhVpMaTfOhN+gu86y5C2kpqOOtZala9XU elFyWZ8UDBeIM+Lupvlz57izjhrf7/1mcyz822YKcv+BfTIXZnKywOs60/ozMGyyVv CwrtXu7Wwv3WlSOApWLPS9yyyERhoC7xE8nndeYw8G1zwNEX5smbg/TUvFbDFZoxxm WMSVUKcSgptBg== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:31 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 02/11] power: charger-manager: don't write through desc->properties 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 psy_desc->properties will become pointer to const. Avoid writing through the pointer to enable constification of the tables elsewhere. Signed-off-by: Michał Mirosław --- v3: initial version --- drivers/power/supply/charger-manager.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/power/supply/charger-manager.c b/drivers/power/supply/charger-manager.c index 887f5bb879e5..7ecb82107efb 100644 --- a/drivers/power/supply/charger-manager.c +++ b/drivers/power/supply/charger-manager.c @@ -1425,15 +1425,18 @@ static int cm_init_thermal_data(struct charger_manager *cm, struct power_supply *fuel_gauge) { struct charger_desc *desc = cm->desc; + enum power_supply_property *props; union power_supply_propval val; int ret; + props = (void *)cm->charger_psy_desc.properties; + /* Verify whether fuel gauge provides battery temperature */ ret = power_supply_get_property(fuel_gauge, POWER_SUPPLY_PROP_TEMP, &val); if (!ret) { - cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] = + props[cm->charger_psy_desc.num_properties] = POWER_SUPPLY_PROP_TEMP; cm->charger_psy_desc.num_properties++; cm->desc->measure_battery_temp = true; @@ -1446,7 +1449,7 @@ static int cm_init_thermal_data(struct charger_manager *cm, return PTR_ERR(cm->tzd_batt); /* Use external thermometer */ - cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] = + props[cm->charger_psy_desc.num_properties] = POWER_SUPPLY_PROP_TEMP_AMBIENT; cm->charger_psy_desc.num_properties++; cm->desc->measure_battery_temp = true; @@ -1622,6 +1625,7 @@ static int charger_manager_probe(struct platform_device *pdev) union power_supply_propval val; struct power_supply *fuel_gauge; struct power_supply_config psy_cfg = {}; + enum power_supply_property *props; if (IS_ERR(desc)) { dev_err(&pdev->dev, "No platform data (desc) found\n"); @@ -1717,7 +1721,7 @@ static int charger_manager_probe(struct platform_device *pdev) cm->charger_psy_desc.name = cm->psy_name_buf; /* Allocate for psy properties because they may vary */ - cm->charger_psy_desc.properties = + cm->charger_psy_desc.properties = props = devm_kcalloc(&pdev->dev, ARRAY_SIZE(default_charger_props) + NUM_CHARGER_PSY_OPTIONAL, @@ -1725,7 +1729,7 @@ static int charger_manager_probe(struct platform_device *pdev) if (!cm->charger_psy_desc.properties) return -ENOMEM; - memcpy(cm->charger_psy_desc.properties, default_charger_props, + memcpy(props, default_charger_props, sizeof(enum power_supply_property) * ARRAY_SIZE(default_charger_props)); @@ -1738,14 +1742,14 @@ static int charger_manager_probe(struct platform_device *pdev) } if (!power_supply_get_property(fuel_gauge, POWER_SUPPLY_PROP_CHARGE_NOW, &val)) { - cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] = + props[cm->charger_psy_desc.num_properties] = POWER_SUPPLY_PROP_CHARGE_NOW; cm->charger_psy_desc.num_properties++; } if (!power_supply_get_property(fuel_gauge, POWER_SUPPLY_PROP_CURRENT_NOW, &val)) { - cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] = + props[cm->charger_psy_desc.num_properties] = POWER_SUPPLY_PROP_CURRENT_NOW; cm->charger_psy_desc.num_properties++; } From patchwork Fri Apr 3 20:20: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: 11473475 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 2AA4A92C for ; Fri, 3 Apr 2020 20:21:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 097CB207FF for ; Fri, 3 Apr 2020 20:21:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="CiIWM2Z4" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728108AbgDCUUe (ORCPT ); Fri, 3 Apr 2020 16:20:34 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:37268 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727842AbgDCUUd (ORCPT ); Fri, 3 Apr 2020 16:20:33 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBl4yQjzqB; Fri, 3 Apr 2020 22:20:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945231; bh=YiFWN6xOx5BwRik6WlkE3QdMHkXS7gn1p+WdXGp+C0s=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=CiIWM2Z45+1iJLtBk+bAXUuEFgNKGXEFckMvL1iZ6OOoVs+uropYVpVfeI+WFmDZO DPpe1hiTDG40X7Um/zuGqT3PUstNtr99vh4vLQ5fk8RoTxbySLwJij8pRaTA4iDe3n qmlnYq+ud3dRm0m0vgRDaygDd9WnW2Qiantpgqq7uPAlzThnONH0nkzlroA9/FOWyS 3GlGIkNaTDbQRFAVz9pqY+WTRGBqmyMg1Z9nubKzGvaz4kB6mW200Y5aipYA/mcBzt c19zdFeZxkKLP1ym6AyrOoosguKjzY1l4g0doMlVmDTXrV+DBcZXAXEyMtfJM/1E4Y V57Ml/WFMzRNA== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:31 +0200 Message-Id: In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 03/11] power: generic-adc-battery: fold psy_props[] to private data 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 psy_desc->properties will become pointer to const, so we can't use it for filling the property set. Let's append the list to private data structure and avoid introducing another variable to temporarily hold the pointer. Signed-off-by: Michał Mirosław Reported-by: kbuild test robot --- v3: new patch, required before constification of property lists --- drivers/power/supply/generic-adc-battery.c | 30 ++++++++-------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/drivers/power/supply/generic-adc-battery.c b/drivers/power/supply/generic-adc-battery.c index bc462d1ec963..b3b567914dd7 100644 --- a/drivers/power/supply/generic-adc-battery.c +++ b/drivers/power/supply/generic-adc-battery.c @@ -52,6 +52,7 @@ struct gab { int level; int status; bool cable_plugged; + enum power_supply_property psy_props[]; }; static struct gab *to_generic_bat(struct power_supply *psy) @@ -246,7 +247,10 @@ static int gab_probe(struct platform_device *pdev) int index = ARRAY_SIZE(gab_props); bool any = false; - adc_bat = devm_kzalloc(&pdev->dev, sizeof(*adc_bat), GFP_KERNEL); + adc_bat = devm_kzalloc(&pdev->dev, + struct_size(adc_bat, psy_props, + ARRAY_SIZE(gab_props) + ARRAY_SIZE(gab_chan_name)), + GFP_KERNEL); if (!adc_bat) { dev_err(&pdev->dev, "failed to allocate memory\n"); return -ENOMEM; @@ -264,20 +268,8 @@ static int gab_probe(struct platform_device *pdev) psy_desc->external_power_changed = gab_ext_power_changed; adc_bat->pdata = pdata; - /* - * copying the static properties and allocating extra memory for holding - * the extra configurable properties received from platform data. - */ - psy_desc->properties = kcalloc(ARRAY_SIZE(gab_props) + - ARRAY_SIZE(gab_chan_name), - sizeof(*psy_desc->properties), - GFP_KERNEL); - if (!psy_desc->properties) { - ret = -ENOMEM; - goto first_mem_fail; - } - - memcpy(psy_desc->properties, gab_props, sizeof(gab_props)); + /* copy static properties */ + memcpy(adc_bat->psy_props, gab_props, sizeof(gab_props)); /* * getting channel from iio and copying the battery properties @@ -294,12 +286,12 @@ static int gab_probe(struct platform_device *pdev) int index2; for (index2 = 0; index2 < index; index2++) { - if (psy_desc->properties[index2] == + if (adc_bat->psy_props[index2] == gab_dyn_props[chan]) break; /* already known */ } if (index2 == index) /* really new */ - psy_desc->properties[index++] = + adc_bat->psy_props[index++] = gab_dyn_props[chan]; any = true; } @@ -317,6 +309,7 @@ static int gab_probe(struct platform_device *pdev) * as come channels may be not be supported by the device.So * we need to take care of that. */ + psy_desc->properties = adc_bat->psy_props; psy_desc->num_properties = index; adc_bat->psy = power_supply_register(&pdev->dev, psy_desc, &psy_cfg); @@ -358,8 +351,6 @@ static int gab_probe(struct platform_device *pdev) iio_channel_release(adc_bat->channel[chan]); } second_mem_fail: - kfree(psy_desc->properties); -first_mem_fail: return ret; } @@ -381,7 +372,6 @@ static int gab_remove(struct platform_device *pdev) iio_channel_release(adc_bat->channel[chan]); } - kfree(adc_bat->psy_desc.properties); cancel_delayed_work(&adc_bat->bat_work); return 0; } From patchwork Fri Apr 3 20:20: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: 11473459 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 EC43C92C for ; Fri, 3 Apr 2020 20:20:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C71A02077D for ; Fri, 3 Apr 2020 20:20: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="Iyc0obib" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728249AbgDCUUh (ORCPT ); Fri, 3 Apr 2020 16:20:37 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:6373 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727907AbgDCUUf (ORCPT ); Fri, 3 Apr 2020 16:20:35 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBm4Y0HzwF; Fri, 3 Apr 2020 22:20:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945232; bh=8lunpxS98lM0f3PoyUteDz8Xwp4fV51FcDnCqkylrZA=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=Iyc0obibgawtZkWUWAKT3QtXps6e0EkHwuuOe0/HzZabBKfljWUBGOjUg5nO84hb4 xscPRpuTcyt2UYGEqFNbwhcwwCkP8sRwEXpZuM3keOTBwQw2DXmhOiUaaQfLGLymWp qZ9AXgb6ZyNmy+opgTV1kLK8kAwSli8epThhipPumDl90KQkeTQ44eH6k2xXlTytbZ Z7f1s4NJXBXIvYoDGOImyyYMi7UQvARsjDNuHli3lknqjBWZglekfsCd0D6bVk61eC Cn9msf8VmW+gHpCYy2pgT++GVrunHRlDaQGEqnR4D3xHg0PrLBpcVos2hBaEvvDzST gAH7rGJP3bqBw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:32 +0200 Message-Id: <16ca50739c664b3fa373306f3c08882d9d4cf55d.1585944770.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 04/11] 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 20:20: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: 11473471 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 5175F92C for ; Fri, 3 Apr 2020 20:21:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 24FA6206F5 for ; Fri, 3 Apr 2020 20:21:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="JGRJfZ4l" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728199AbgDCUUh (ORCPT ); Fri, 3 Apr 2020 16:20:37 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:34701 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727792AbgDCUUf (ORCPT ); Fri, 3 Apr 2020 16:20:35 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBn1g2qz1j9; Fri, 3 Apr 2020 22:20:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945233; bh=K+vbcp79f0yG60D3y6nK9BE+zeYjqGJsmkCt6t37wr0=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=JGRJfZ4lzhYomhDsdKkvEye2pRDfPOP3b87QiGWu2YLABh3eNOvY7jeyryavzHkmh QW9r1bjJj6KHmqCZ6dLXMO4pA+oXHkq1aR30xbOvSEkqs93vSli/2z6GbTbHInPpq1 01n6rUPXVw8c7srynqBDPiI+QmXU8r+uK+9oUEy0Lf5N70dDmuvqgh/+lpAvfwmkn8 932Flkg3TZx7IQ6PkSLNgwe3fGJsgjlMcBawZG7VCtWhHS/YuhjxbRf0BfrJDkUJsK btRCGsGEhAMXrcRmk3Fw3/gYSsJbDiKaPjWNOKat0TzMfPqx1fP7o+frqdxj3katMs utCczzYuiUVnQ== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:32 +0200 Message-Id: <1ebdfa76e2912c579c3c45fe86dbbedac6824167.1585944770.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 05/11] 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 --- 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 20:20: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: 11473457 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 C6FDA92C for ; Fri, 3 Apr 2020 20:20:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A495F2077D for ; Fri, 3 Apr 2020 20:20:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="Sev2Is24" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728168AbgDCUUg (ORCPT ); Fri, 3 Apr 2020 16:20:36 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:27349 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727842AbgDCUUg (ORCPT ); Fri, 3 Apr 2020 16:20:36 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBn5f29z1th; Fri, 3 Apr 2020 22:20:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945233; bh=fseErXmDkX64tuP/VBZQqH12qqnxX3YPVLXIds6NfEI=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=Sev2Is24W31jAIfgP5RNxcie7xoiBgYEQAISAsqZb786EeHIUZdwjd79Onl0SQlC9 EQmva5mmbOl7sqAx3Cyz4TFQgJ3mi7nywa2MXxDu4n3oNQRzDE0YwjJwFQFkvrtyoC ZZgS+1ecAXQxq3HGlNXTtCEhIe4W4j4rq2Rg5gMJAQ2iB9GJ+G6zxG3rqQhZo04Vb6 s8ZygMtiiGeEyk58liLxFrTldf4xWaWCy2+H8QrfG5i/fWGWdUagPzyJ7DG64wtUxU EnRiYnmdM2erixluvcbLtazWXrp1oRf1R+RoFRolLefaxGenwrRld+wQqD6S9aNq2X J/5yHFO/HrKJA== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:33 +0200 Message-Id: <4c33741ba56d3c7830827c140bccf13621e59232.1585944770.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 06/11] 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. 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 20:20: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: 11473473 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 B38BB1392 for ; Fri, 3 Apr 2020 20:21:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 889C721707 for ; Fri, 3 Apr 2020 20:21:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="ijfTS3sJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728184AbgDCUUh (ORCPT ); Fri, 3 Apr 2020 16:20:37 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:29625 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728160AbgDCUUg (ORCPT ); Fri, 3 Apr 2020 16:20:36 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBp3KTDz1vW; Fri, 3 Apr 2020 22:20:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945234; bh=st442Vea3rx7okupetdaDNbMLKhGLcbOOTUyYMwJJxU=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=ijfTS3sJW7Y6snZhLxrF6L9qpgGvMgFWOcy9O8so3V9kYbdMVbUANF9ysVpxfHLzc Qkx6EXmGGBe7gPzXbyd6rDyuGQepGLGNa2xtpphdGtAUwwGuNWM18cydh+syS5Jy7e SFcUmySB9GfeMpPL8uUYGfH654UvaP+VGcAEwH0cuTRrsQ4NSEZeOfp4J9PKGvipoJ x2ZVZvX1dsQ9m+BNxQw/iyWnceD0/CRO5ZKEplihQwZddInqYfX2Rg3s2fb3zT3T6w KeKyHR4QibDSJUy/Ak6MRBhb8t5XQJyEgwuvFwwb60CFL12HiRziHQlhUd1Eqc1LXY QwFQNOfetxi6g== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:33 +0200 Message-Id: <29b5043db9a51ef7a0cb6e3a8c69c91e36045cd6.1585944770.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 07/11] 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 Reported-by: kbuild test robot --- v2: split from fix temperature labels v3: remove power_supply_hwmon_read_string() parameter checks as it is internal API (suggested by Guenter Roeck) --- 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 67b6ee60085e..5621e72a39f0 100644 --- a/drivers/power/supply/power_supply_hwmon.c +++ b/drivers/power/supply/power_supply_hwmon.c @@ -13,6 +13,11 @@ struct power_supply_hwmon { unsigned long *props; }; +static const char *const ps_temp_label[] = { + "temp", + "ambient temp", +}; + static int power_supply_hwmon_in_to_property(u32 attr) { switch (attr) { @@ -144,7 +149,14 @@ static int power_supply_hwmon_read_string(struct device *dev, u32 attr, int channel, const char **str) { - *str = channel ? "temp ambient" : "temp"; + switch (type) { + case hwmon_temp: + *str = ps_temp_label[channel]; + break; + default: + unreachable(); + } + return 0; } From patchwork Fri Apr 3 20:20: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: 11473467 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 7E8421392 for ; Fri, 3 Apr 2020 20:21:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5C5B9207FF for ; Fri, 3 Apr 2020 20:21:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="EOlslryS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728264AbgDCUUh (ORCPT ); Fri, 3 Apr 2020 16:20:37 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:35348 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728164AbgDCUUg (ORCPT ); Fri, 3 Apr 2020 16:20:36 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBq2x0Sz1vh; Fri, 3 Apr 2020 22:20:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945235; bh=q44ic6PpS5HegVJV8bApjvL5Ua5oyJ9Mja9QqVR2KlQ=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=EOlslryS4tsUMrgf2EBgKRtOIEpupr3plYDe1T8//jZPzFw9Dhb1ijd714LO/u+Mk 02bFa8FJqZT38WuWolb7fOh0Row9qUAt2mgMzALLSAZ+cE+NWGLITYO29s4Ub0CyYw +tRO1qWAPB//biSshR/Xmit2aKLF771ZJBfkuN+ku+yfQTYdT0NB1r3eeiQ02EMH3m h02YqQNvxPuNgHGjwnIYQ5fHJ1mvmKvg+uJAopTZhLNrj70/YniIuqZiV5/ObXiH7Q 0s7Vj7x4y77dcPvb12DPFyKz7+u9bmLnOH92rkCwFjhCnRwq5+g0pNWH+RL8lXwhMY APfRkJUdwIG7w== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:34 +0200 Message-Id: <7ac1176497a246b59316efecef9912dcf9b1e48a.1585944770.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 08/11] 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 --- v3: use a tabule for type checking instead of switch() sequence --- drivers/power/supply/power_supply_hwmon.c | 42 +++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c index 5621e72a39f0..1b473deaf391 100644 --- a/drivers/power/supply/power_supply_hwmon.c +++ b/drivers/power/supply/power_supply_hwmon.c @@ -103,6 +103,39 @@ static bool power_supply_hwmon_is_a_label(enum hwmon_sensor_types type, return type == hwmon_temp && attr == hwmon_temp_label; } +struct hwmon_type_attr_list { + const u32 *attrs; + size_t n_attrs; +}; + +static const u32 ps_temp_attrs[] = { + hwmon_temp_input, + hwmon_temp_min, hwmon_temp_max, + hwmon_temp_min_alarm, hwmon_temp_max_alarm, +}; + +static const struct hwmon_type_attr_list ps_type_attrs[hwmon_max] = { + [hwmon_temp] = { ps_temp_attrs, ARRAY_SIZE(ps_temp_attrs) }, +}; + +static bool power_supply_hwmon_has_input( + const struct power_supply_hwmon *psyhw, + enum hwmon_sensor_types type, int channel) +{ + const struct hwmon_type_attr_list *attr_list = &ps_type_attrs[type]; + size_t i; + + for (i = 0; i < attr_list->n_attrs; ++i) { + int prop = power_supply_hwmon_to_property(type, + attr_list->attrs[i], channel); + + if (prop >= 0 && test_bit(prop, psyhw->props)) + return true; + } + + return false; +} + static bool power_supply_hwmon_is_writable(enum hwmon_sensor_types type, u32 attr) { @@ -129,9 +162,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 20:20:35 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: 11473463 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 D2C6C159A for ; Fri, 3 Apr 2020 20:20:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ADBBE207FF for ; Fri, 3 Apr 2020 20:20:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="G/dCik1q" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728318AbgDCUUj (ORCPT ); Fri, 3 Apr 2020 16:20:39 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:61944 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728178AbgDCUUi (ORCPT ); Fri, 3 Apr 2020 16:20:38 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBr2Bg5z28f; Fri, 3 Apr 2020 22:20:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945236; bh=k1CdcaDVROqMzO4WiVbxBppfDmL0/VYPx2xJy3Eon20=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=G/dCik1qteqn3jduGAIE9QLer7vpWGlKs2g3lQMT+LRLAOBqfSDy80eTaNAMkthDs NjI9FrhrW6eCt6TImnY6XcetM2Of+rBPzVOOxuzT3dxjZgqyL/rmCTDKi0/DqA5515 9b023dlzuIKrZaG6tqsBKxaMy/WrLz2VzOvoQvXCkM4thtKxev23GCakuj3JCOeMa0 Md/9GA9TwQVawqwwTL/tPDmd9hc1Wgl/nLxN6xiAeJ8Ryj33tRqEYUlVK5O7uww8Fm edqw9PzwGVd7GJxAvaxZb38BCCimT7x7lh9LL91ur0giSGX4ZlUbTpfinzgYc9B4CK 7OHImgg4cSlEQ== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:35 +0200 Message-Id: <5bb1faa73467fe648f665c9b9bbacfca0a553919.1585944770.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 09/11] 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() v3: remove power_supply_hwmon_read_string() parameter checks as it is internal API (suggested by Guenter Roeck) --- drivers/power/supply/power_supply_hwmon.c | 97 +++++++++++++++++++++-- drivers/power/supply/power_supply_sysfs.c | 2 + include/linux/power_supply.h | 2 + 3 files changed, 96 insertions(+), 5 deletions(-) diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c index 1b473deaf391..0fd2e7ccb767 100644 --- a/drivers/power/supply/power_supply_hwmon.c +++ b/drivers/power/supply/power_supply_hwmon.c @@ -13,12 +13,17 @@ struct power_supply_hwmon { unsigned long *props; }; +static const char *const ps_input_label[] = { + "battery", + "external source", +}; + static const char *const ps_temp_label[] = { "temp", "ambient temp", }; -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: @@ -34,7 +39,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: @@ -48,6 +77,30 @@ 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 int power_supply_hwmon_temp_to_property(u32 attr, int channel) { if (channel) { @@ -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); } struct hwmon_type_attr_list { @@ -114,7 +169,19 @@ static const u32 ps_temp_attrs[] = { hwmon_temp_min_alarm, hwmon_temp_max_alarm, }; +static const u32 ps_in_attrs[] = { + hwmon_in_input, hwmon_in_average, + hwmon_in_min, hwmon_in_max, +}; + +static const u32 ps_curr_attrs[] = { + hwmon_curr_input, hwmon_curr_average, + hwmon_curr_max, +}; + static const struct hwmon_type_attr_list ps_type_attrs[hwmon_max] = { + [hwmon_in] = { ps_in_attrs, ARRAY_SIZE(ps_in_attrs) }, + [hwmon_curr] = { ps_curr_attrs, ARRAY_SIZE(ps_curr_attrs) }, [hwmon_temp] = { ps_temp_attrs, ARRAY_SIZE(ps_temp_attrs) }, }; @@ -186,6 +253,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; @@ -303,15 +375,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 }; @@ -376,6 +459,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 20:20:36 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: 11473461 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 8096792C for ; Fri, 3 Apr 2020 20:20:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5F18B2080C for ; Fri, 3 Apr 2020 20:20:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="qFxUr7HZ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728296AbgDCUUj (ORCPT ); Fri, 3 Apr 2020 16:20:39 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:27349 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728229AbgDCUUi (ORCPT ); Fri, 3 Apr 2020 16:20:38 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBs01vjz2Bx; Fri, 3 Apr 2020 22:20:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945237; bh=VHgW4kYLRMsSeCF70YMgq9PQuT+zZX7FzGRskoQDqfs=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=qFxUr7HZ0uw81VkoLx9q9BrEaSnjFBes9UzOzSOUUTAmkwSJOeQOjXJGjsLojXTmZ UH1jIfLEUivZHi0FsU6ycT4VJluH59w7PJBd0Q4YXhowsfkTHBpF291xPyIDSIV2cS Wj/RQC3YNGixTc7ctfumm14lJCu8cdE+1fUDRzCLaaIwBONMCOizK885uoey6UCjzW 0IqRmxC1nNNeSCe7pbkIU0bPp3PkmCfu5h20nZ17Kc4PICW9R88f90r8+UoketeF5V yh+dsptC+ihGfSwIcHTQfQ7tqaqBJFkm25sw5/HLVLoLWp4yi7Yc2Qwc3hLivfnKDG HXDf4DGtGMDYw== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:36 +0200 Message-Id: <8d46214c860172b0cd8baad05fd0d3f09080e041.1585944770.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 10/11] 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 0fd2e7ccb767..9125854adcb0 100644 --- a/drivers/power/supply/power_supply_hwmon.c +++ b/drivers/power/supply/power_supply_hwmon.c @@ -16,6 +16,7 @@ struct power_supply_hwmon { static const char *const ps_input_label[] = { "battery", "external source", + "load", }; static const char *const ps_temp_label[] = { @@ -51,6 +52,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) { @@ -58,6 +73,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; } @@ -393,6 +410,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 @@ -463,6 +485,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 20:20:37 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: 11473465 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 91FAC1392 for ; Fri, 3 Apr 2020 20:21:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6E99320BED for ; Fri, 3 Apr 2020 20:21:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=rere.qmqm.pl header.i=@rere.qmqm.pl header.b="oSDYnQkD" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727977AbgDCUVA (ORCPT ); Fri, 3 Apr 2020 16:21:00 -0400 Received: from rere.qmqm.pl ([91.227.64.183]:29625 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728288AbgDCUUj (ORCPT ); Fri, 3 Apr 2020 16:20:39 -0400 Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 48vBBs588rz2CH; Fri, 3 Apr 2020 22:20:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1585945237; bh=i8rERO1eokJ5ICLdJIYDblCyT0yVXlWido55eTwKoeY=; h=Date:In-Reply-To:References:From:Subject:To:Cc:From; b=oSDYnQkDQXGyzQSHchOxSC8Y7ZsUUKssppn6e/zSVApzK0dJVUe3gTarwksErAVFw Woi/UY0Y7+G86AiNopTq8Z7CURxjTqyTRs61hclmEAVHACRi966NYflqr1Jd8EVZGp bt0I5KHwRzxOHjohgPNvsVOdBDFhwC9fRNX9jKYc1nFuGSLcUXskbXpmVGyfmVTAN6 7jGgavW1lEJaMv6gW4tdUT3qTWGP2BCgls5AwNwQVxeTKNwecxuv7rEnedFNyVTz8V gVhmi3BJ6sq2Nv2g3VS2mE+zkWH2KpXn5DVugOsjqsGGAdV/fxMYBtLrOqA9c5foQ/ /hNzTwmDu+Q/A== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.2 at mail Date: Fri, 03 Apr 2020 22:20:37 +0200 Message-Id: <8a68a586e2a3e51fd5a2a3d017844c8f77b0a794.1585944770.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Subject: [PATCH v3 11/11] 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 ~~~~~~~~~~~~~~~~~~~~~