Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp5993532pxb; Mon, 14 Feb 2022 12:37:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJx9JOdB8wc1fXn3HfrJAhKPkGr5RefwRPHozb8sYKYpMlu6oypgjiVIt4qso0vGqVrFTZqA X-Received: by 2002:a05:6a00:2487:: with SMTP id c7mr633992pfv.29.1644871062883; Mon, 14 Feb 2022 12:37:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644871062; cv=none; d=google.com; s=arc-20160816; b=We0/BJkG3hBqwfsmRzRGtk3T7zjTuo59aK9QyGnl0LQFAjdAFKAM7E8ISXlrtdgMSM 5m4L3NqoSr/HWTKxVXDfc90jtWq6Qn75biKoiui9lQ9gAfn3dDPlCxcWqSrWR49nQBHH jRaEFN958T/nTiPa5W/uK/EV95B+hDRgZkhwLflmauUy9MaLGvAtjE0PNZ4ahHgFJ9nH 4yXb91O7Wb2u9e/tKXDavaMRvHpVlB4spiNC57lGDMruyZu3U3TJl5qon152coJyYaEe 2GBbVMg+VXJZVoxlKOThby+Hnv3tw8b4UsjH3Kv5KhjRPD5cP5WlI1g7gdfpJfjuB+VM T1qA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:subject :from:references:cc:to:content-language:user-agent:mime-version:date :message-id:sender:dkim-signature; bh=Z6QtGjyebNj17/54kv2z2LcBR1p+WI1Nf06btBSvcJg=; b=Bg8dZ9rBN1lRYSlRbHHzv7gpxoaLvUYEb7JFGryPwiCNmvoabin/9evAC98GcsnZaY pMM9Ecz2IzpmqdDjTl6vOggbd4NGO9xWWvAfUoBjulUlKsIpKaa8Y0IBvVWKQOnA5qsF ehAqxuHkgWIviAYreGbfgLb7fQ9LpM+TF4HFP4xVDssq/7UzWYpmp+YNDiPzTVKxZnEd BBFqNgbPrg9zfHRyXVWjLmFFNLmDH84KnpsR0nE2jKv6Vq8dpaWpnonTyt9HkPaa3My3 BNdvzhspqSmjvAQNwzCk+jBE1dbdsP60b+VyiZphALF6ATIHhqNxx1QZi5TGuPSulTyJ o3DA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ZjsyX6YZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id q1si14286759plx.465.2022.02.14.12.37.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 12:37:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ZjsyX6YZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id F2D5EB7F4; Mon, 14 Feb 2022 12:06:24 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357134AbiBNRgU (ORCPT + 99 others); Mon, 14 Feb 2022 12:36:20 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:58718 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232607AbiBNRgS (ORCPT ); Mon, 14 Feb 2022 12:36:18 -0500 Received: from mail-ot1-x32f.google.com (mail-ot1-x32f.google.com [IPv6:2607:f8b0:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEAF76540B; Mon, 14 Feb 2022 09:36:09 -0800 (PST) Received: by mail-ot1-x32f.google.com with SMTP id p3-20020a0568301d4300b005a7a702f921so12073378oth.9; Mon, 14 Feb 2022 09:36:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:message-id:date:mime-version:user-agent:content-language:to :cc:references:from:subject:in-reply-to:content-transfer-encoding; bh=Z6QtGjyebNj17/54kv2z2LcBR1p+WI1Nf06btBSvcJg=; b=ZjsyX6YZB7IMgIQGVoLo4Mv4EZ4hFB4/YqSFBKSerB/98+yLXqOyOHjdBo87zpo37Y NWauQTxvhmEyAQAZdumzNhwl1TJ1TBCL/JFD84lP8AzCd4OqbJpM7KPjnd4Sl0gkqfvY yUyr5YttWcZbK608BI/GbaAr0iYz0ibLHBNHG/xCkn2fRIipq9toP7Kp55sV+qM1bj0W EL/32mZ7rXjKOhgVfLLcExNd8jPrc05PcXHtRQDvT9ngUJE8ap16LFhLIDDgMPRtXX5M fIfpRZol+SsEJbbbejxNkFkg6cHMSWtyWRIXIqT3zX7LJubMmN4QZApuC2/he5v+Eogx S4PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:message-id:date:mime-version:user-agent :content-language:to:cc:references:from:subject:in-reply-to :content-transfer-encoding; bh=Z6QtGjyebNj17/54kv2z2LcBR1p+WI1Nf06btBSvcJg=; b=djxWAg/rghjCMM+4tt7EPKbcSCfZ6++Izs5pjw9Ypu2HZngNvPXGWQ1Xv772M2spQD r8Uim1YWxLz8F0O+8sF27Nk7RTZ8yYxmP/bl5IMxCQe+RfVFax4lm1mFgzHELpIUVFQs ijqC5leQEBPDHjykgYv3jmSLfR8n1w32wJzekMLh7ffQi4M1KZl+4BKdcQN2aTC12iP4 mJmlWGjG6BNrK4V5gNyp/yexfXrY0eZ/BZ10BeSxJSIxjCv6JgPksG5c3Z/qLQUnO7+c adDgLJRpRvoAVbug++vPT4mFVuMzH5oH02FaGeI0MZBZAKpfxBPotdyKO5JLVQRSKaAM D7Sg== X-Gm-Message-State: AOAM531TJEOJ/BuC6hk0uf/xFe1f4h1OO1Y+FxPQT9b5RSOB44IVNSmI +VG/t5ia3GBJ/tUaN3/DDNIZgEJUF8hcog== X-Received: by 2002:a9d:75c6:: with SMTP id c6mr1378otl.360.1644860168962; Mon, 14 Feb 2022 09:36:08 -0800 (PST) Received: from ?IPV6:2600:1700:e321:62f0:329c:23ff:fee3:9d7c? ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id z17sm12493199otk.62.2022.02.14.09.36.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 14 Feb 2022 09:36:08 -0800 (PST) Sender: Guenter Roeck Message-ID: Date: Mon, 14 Feb 2022 09:36:06 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Content-Language: en-US To: Marcello Sylvester Bauer , Jean Delvare , Jonathan Corbet Cc: linux-kernel@vger.kernel.org, linux-hwmon@vger.kernel.org, Patrick Rudolph , linux-doc@vger.kernel.org References: <43ebb83e403c56e44709facf937b386282862092.1644834803.git.sylv@sylv.io> From: Guenter Roeck Subject: Re: [PATCH v2 3/4] pmbus: Add support for pli1209bc In-Reply-To: <43ebb83e403c56e44709facf937b386282862092.1644834803.git.sylv@sylv.io> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2/14/22 04:40, Marcello Sylvester Bauer wrote: > PLI1209BC is a Digital Supervisor from Vicor Corporation. > > Signed-off-by: Marcello Sylvester Bauer > --- > Documentation/hwmon/pli1209bc.rst | 73 +++++++++++++++++++ > drivers/hwmon/pmbus/Kconfig | 9 +++ > drivers/hwmon/pmbus/Makefile | 1 + > drivers/hwmon/pmbus/pli1209bc.c | 114 ++++++++++++++++++++++++++++++ > 4 files changed, 197 insertions(+) > create mode 100644 Documentation/hwmon/pli1209bc.rst > create mode 100644 drivers/hwmon/pmbus/pli1209bc.c > > diff --git a/Documentation/hwmon/pli1209bc.rst b/Documentation/hwmon/pli1209bc.rst > new file mode 100644 > index 000000000000..a3f686d03cf2 > --- /dev/null > +++ b/Documentation/hwmon/pli1209bc.rst > @@ -0,0 +1,73 @@ > +Kernel driver pli1209bc > +======================= > + > +Supported chips: > + > + * Digital Supervisor PLI1209BC > + > + Prefix: 'pli1209bc' > + > + Addresses scanned: 0x50 - 0x5F > + > + Datasheet: https://www.vicorpower.com/documents/datasheets/ds-PLI1209BCxyzz-VICOR.pdf > + > +Authors: > + - Marcello Sylvester Bauer > + > +Description > +----------- > + > +The Vicor PLI1209BC is an isolated digital power system supervisor thatprovides > +a communication interface between a host processor and one Bus Converter Module > +(BCM). The PLI communicates with a system controller via a PMBus compatible > +interface over an isolated UART interface. Through the PLI, the host processor > +can configure, set protection limits, and monitor the BCM. > + > +Sysfs entries > +------------- > + > +======================= ======================================================== > +in1_label "vin2" > +in1_input Input voltage. > +in1_rated_min Minimum rated input voltage. > +in1_rated_max Maximum rated input voltage. > +in1_max Maximum input voltage. > +in1_max_alarm Input voltage high alarm. > +in1_crit Critical input voltage. > +in1_crit_alarm Input voltage critical alarm. > + > +in2_label "vout2" > +in2_input Output voltage. > +in2_rated_min Minimum rated output voltage. > +in2_rated_max Maximum rated output voltage. > +in2_alarm Output voltage alarm > + > +curr1_label "iin2" > +curr1_input Input current. > +curr1_max Maximum input current. > +curr1_max_alarm Maximum input current high alarm. > +curr1_crit Critical input current. > +curr1_crit_alarm Input current critical alarm. > + > +curr2_label "iout2" > +curr2_input Output current. > +curr2_crit Critical output current. > +curr2_crit_alarm Output current critical alarm. > +curr2_max Maximum output current. > +curr2_max_alarm Output current high alarm. > + > +power1_label "pin2" > +power1_input Input power. > +power1_alarm Input power alarm. > + > +power2_label "pout2" > +power2_input Output power. > +power2_rated_max Maximum rated output power. > + > +temp1_input Die temperature. > +temp1_alarm Die temperature alarm. > +temp1_max Maximum die temperature. > +temp1_max_alarm Die temperature high alarm. > +temp1_crit Critical die temperature. > +temp1_crit_alarm Die temperature critical alarm. > +======================= ======================================================== > diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig > index c96f7b7338bd..831db423bea0 100644 > --- a/drivers/hwmon/pmbus/Kconfig > +++ b/drivers/hwmon/pmbus/Kconfig > @@ -310,6 +310,15 @@ config SENSORS_PIM4328 > This driver can also be built as a module. If so, the module will > be called pim4328. > > +config SENSORS_PLI1209BC > + tristate "Vicor PLI1209BC" > + help > + If you say yes here you get hardware monitoring support for Vicor > + PLI1209BC Digital Supervisor. > + > + This driver can also be built as a module. If so, the module will > + be called pli1209bc. > + > config SENSORS_PM6764TR > tristate "ST PM6764TR" > help > diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile > index e5935f70c9e0..7ce74e3b8552 100644 > --- a/drivers/hwmon/pmbus/Makefile > +++ b/drivers/hwmon/pmbus/Makefile > @@ -34,6 +34,7 @@ obj-$(CONFIG_SENSORS_MP2888) += mp2888.o > obj-$(CONFIG_SENSORS_MP2975) += mp2975.o > obj-$(CONFIG_SENSORS_MP5023) += mp5023.o > obj-$(CONFIG_SENSORS_PM6764TR) += pm6764tr.o > +obj-$(CONFIG_SENSORS_PLI1209BC) += pli1209bc.o > obj-$(CONFIG_SENSORS_PXE1610) += pxe1610.o > obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o > obj-$(CONFIG_SENSORS_STPDDC60) += stpddc60.o > diff --git a/drivers/hwmon/pmbus/pli1209bc.c b/drivers/hwmon/pmbus/pli1209bc.c > new file mode 100644 > index 000000000000..8a9af2ccc46f > --- /dev/null > +++ b/drivers/hwmon/pmbus/pli1209bc.c > @@ -0,0 +1,114 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Hardware monitoring driver for Vicor PLI1209BC Digital Supervisor > + * > + * Copyright (c) 2022 9elements GmbH > + */ > + > +#include > +#include > +#include > +#include "pmbus.h" > + > +/* > + * The capability command is only supported at page 0. Probing the device while > + * the page register is set to 1 will falsely enable PEC support. Disable > + * capability probing accordingly, since the PLI1209BC does not have any > + * additional capabilities. > + */ > +static struct pmbus_platform_data pli1209bc_plat_data = { > + .flags = PMBUS_NO_CAPABILITY, > +}; > + > +static int pli1209bc_read_word_data(struct i2c_client *client, int page, > + int phase, int reg) > +{ > + int data; > + > + switch (reg) { > + /* PMBUS_READ_POUT uses a direct format with R=0 */ > + case PMBUS_READ_POUT: > + data = pmbus_read_word_data(client, page, phase, reg); > + if (data < 0) > + return data; > + return data * 10; We have to be more careful here. While the datasheet doesn't explicitly say if the reported value is signed or not, the standard says that it is supposed to be signed, so let's assume that this is the case. That means that 'data' is really 16-bit signed value. We have to make sure that it doesn't over- or underflow when multiplying it, and that the sign is retained. Something like the following should do. data = sign_extend32(data, 15) * 10; return clamp_val(data, -32768, 32767) & 0xffff; Otherwise the patch looks good. Thanks, Guenter > + default: > + return -ENODATA; > + } > +} > + > +static struct pmbus_driver_info pli1209bc_info = { > + .pages = 2, > + .format[PSC_VOLTAGE_IN] = direct, > + .format[PSC_VOLTAGE_OUT] = direct, > + .format[PSC_CURRENT_IN] = direct, > + .format[PSC_CURRENT_OUT] = direct, > + .format[PSC_POWER] = direct, > + .format[PSC_TEMPERATURE] = direct, > + .m[PSC_VOLTAGE_IN] = 1, > + .b[PSC_VOLTAGE_IN] = 0, > + .R[PSC_VOLTAGE_IN] = 1, > + .m[PSC_VOLTAGE_OUT] = 1, > + .b[PSC_VOLTAGE_OUT] = 0, > + .R[PSC_VOLTAGE_OUT] = 1, > + .m[PSC_CURRENT_IN] = 1, > + .b[PSC_CURRENT_IN] = 0, > + .R[PSC_CURRENT_IN] = 3, > + .m[PSC_CURRENT_OUT] = 1, > + .b[PSC_CURRENT_OUT] = 0, > + .R[PSC_CURRENT_OUT] = 2, > + .m[PSC_POWER] = 1, > + .b[PSC_POWER] = 0, > + .R[PSC_POWER] = 1, > + .m[PSC_TEMPERATURE] = 1, > + .b[PSC_TEMPERATURE] = 0, > + .R[PSC_TEMPERATURE] = 0, > + /* > + * Page 0 sums up all attributes except voltage readings. > + * The pli1209 digital supervisor only contains a single BCM, making > + * page 0 redundant. > + */ > + .func[1] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT > + | PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT > + | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT > + | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP > + | PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT, > + .read_word_data = pli1209bc_read_word_data, > +}; > + > +static int pli1209bc_probe(struct i2c_client *client) > +{ > + client->dev.platform_data = &pli1209bc_plat_data; > + return pmbus_do_probe(client, &pli1209bc_info); > +} > + > +static const struct i2c_device_id pli1209bc_id[] = { > + {"pli1209bc", 0}, > + {} > +}; > + > +MODULE_DEVICE_TABLE(i2c, pli1209bc_id); > + > +#ifdef CONFIG_OF > +static const struct of_device_id pli1209bc_of_match[] = { > + { .compatible = "vicor,pli1209bc" }, > + { }, > +}; > +MODULE_DEVICE_TABLE(of, pli1209bc_of_match); > +#endif > + > +static struct i2c_driver pli1209bc_driver = { > + .driver = { > + .name = "pli1209bc", > + .of_match_table = of_match_ptr(pli1209bc_of_match), > + }, > + .probe_new = pli1209bc_probe, > + .id_table = pli1209bc_id, > +}; > + > +module_i2c_driver(pli1209bc_driver); > + > +MODULE_AUTHOR("Marcello Sylvester Bauer "); > +MODULE_DESCRIPTION("PMBus driver for Vicor PLI1209BC"); > +MODULE_LICENSE("GPL"); > +MODULE_IMPORT_NS(PMBUS);