Support pli1209bc Digital Supervisor
Subsystems (3)
PATCH v3 1/4 dt-bindings: vendor-prefixes: add Vicor Corporation
In reply to Marcello Sylvester BauerAdd vendor prefix for Vicor Corporation.
--- Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ 1 file changed, 2 insertions(+)
Documentation/devicetree/bindings/vendor-prefixes.yaml +2 -0
@@ -1298,6 +1298,8 @@ patternProperties: description: Vertexcom Technologies, Inc. "^via,.*": description: VIA Technologies, Inc. + "^vicor,.*": + description: Vicor Corporation "^videostrong,.*": description: Videostrong Technology Co., Ltd. "^virtio,.*":
Signature · 1 line
2.34.1
v3 cover Support pli1209bc Digital Supervisor
Hi,
This patch set adds support for PLI1209BC Digital Supervisor from Vicor Corporation. It replaces the previous submitted driver "bcm6123" [1], since there are multiple digital supervisors, which uses BCMs in different configurations [2].
Change in v3:
- prevent potential over- or underflow of PMBUS_READ_POUT
Changes in v2:
- Multiply PMBUS_READ_POUT with 10 (R=1)
instead of dividing PMBUS_READ_PIN by 10.
- Set all pmbus formats to direct.
- Comment reason why page 0 is redundant.
- Import pmbus namespace.
[1]: https://www.spinics.net/lists/linux-hwmon/msg14097.html
[2]: https://www.spinics.net/lists/linux-hwmon/msg14123.html
Marcello Sylvester Bauer (4):
dt-bindings: vendor-prefixes: add Vicor Corporation dt-bindings:trivial-devices: Add pli1209bc
pmbus: Add support for pli1209bc
pmbus (pli1209bc): Add regulator support
.../devicetree/bindings/trivial-devices.yaml | 2 + .../devicetree/bindings/vendor-prefixes.yaml | 2 + Documentation/hwmon/pli1209bc.rst | 73 +++++++++ drivers/hwmon/pmbus/Kconfig | 16 ++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/pli1209bc.c | 146 ++++++++++++++++++ 6 files changed, 240 insertions(+) create mode 100644 Documentation/hwmon/pli1209bc.rst create mode 100644 drivers/hwmon/pmbus/pli1209bc.c
Signature · 1 line
2.34.1
PATCH v3 2/4 dt-bindings:trivial-devices: Add pli1209bc
Add trivial device entry for PLI1209BC Digital Supervisor from Vicor Corporation.
--- Documentation/devicetree/bindings/trivial-devices.yaml | 2 ++ 1 file changed, 2 insertions(+)
Documentation/devicetree/bindings/trivial-devices.yaml +2 -0
@@ -354,6 +354,8 @@ properties: - ti,tps544c25 # Winbond/Nuvoton H/W Monitor - winbond,w83793 + # Vicor Corporation Digital Supervisor + - vicor,pli1209bc # i2c trusted platform module (TPM) - winbond,wpct301
Signature · 1 line
2.34.1
PATCH v3 4/4 pmbus (pli1209bc): Add regulator support
In reply to Marcello Sylvester BauerAdd regulator support for PLI1209BC Digital Supervisor.
--- drivers/hwmon/pmbus/Kconfig | 7 +++++++ drivers/hwmon/pmbus/pli1209bc.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+)
drivers/hwmon/pmbus/Kconfig +7 -0
@@ -319,6 +319,13 @@ config SENSORS_PLI1209BC This driver can also be built as a module. If so, the module will be called pli1209bc. +config SENSORS_PLI1209BC_REGULATOR + bool "Regulator support for PLI1209BC" + depends on SENSORS_PLI1209BC && REGULATOR + help + If you say yes here you get regulator support for Vicor PLI1209BC + Digital Supervisor. + config SENSORS_PM6764TR tristate "ST PM6764TR" help
drivers/hwmon/pmbus/pli1209bc.c +31 -0
@@ -8,6 +8,7 @@#include <linux/i2c.h> #include <linux/module.h> #include <linux/pmbus.h> +#include <linux/regulator/driver.h> #include "pmbus.h" /*
@@ -33,11 +34,37 @@ static int pli1209bc_read_word_data(struct i2c_client *client, int page,return data; data =sign_extend32 (data,15 ) *10 ;return clamp_val (data,-32768 ,32767 ) &0xffff ; +/* +* PMBUS_READ_VOUT and PMBUS_READ_TEMPERATURE_1 return invalid data +* when the BCM is turned off. Since it is not possible to return +* ENODATA error, return zero instead. +*/ +case PMBUS_READ_VOUT : +case PMBUS_READ_TEMPERATURE_1 : + data =pmbus_read_word_data (client, page, phase, +PMBUS_STATUS_WORD ); +if (data <0 ) +return data; +if (data &PB_STATUS_POWER_GOOD_N ) +return 0 ; +return pmbus_read_word_data (client, page, phase, reg);default :return -ENODATA ; } } +#if IS_ENABLED (CONFIG_SENSORS_PLI1209BC_REGULATOR ) +static const struct regulator_desc pli1209bc_reg_desc = { + .name ="vout2" , + .id =1 , + .of_match =of_match_ptr ("vout2" ), + .regulators_node =of_match_ptr ("regulators" ), + .ops = &pmbus_regulator_ops, + .type =REGULATOR_VOLTAGE , + .owner =THIS_MODULE , +}; +#endif +static struct pmbus_driver_info pli1209bc_info = { .pages =2 , .format[PSC_VOLTAGE_IN ] = direct,
@@ -75,6 +102,10 @@ static struct pmbus_driver_info pli1209bc_info = { | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT, .read_word_data = pli1209bc_read_word_data, +#if IS_ENABLED(CONFIG_SENSORS_PLI1209BC_REGULATOR) + .num_regulators =1 , + .reg_desc = &pli1209bc_reg_desc, +#endif };static int pli1209bc_probe (struct i2c_client *client)
Signature · 1 line
2.34.1
PATCH v3 3/4 pmbus: Add support for pli1209bc
In reply to Marcello Sylvester BauerPLI1209BC is a Digital Supervisor from Vicor Corporation.
--- Documentation/hwmon/pli1209bc.rst | 73 +++++++++++++++++++ drivers/hwmon/pmbus/Kconfig | 9 +++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/pli1209bc.c | 115 ++++++++++++++++++++++++++++++ 4 files changed, 198 insertions(+) create mode 100644 Documentation/hwmon/pli1209bc.rst create mode 100644 drivers/hwmon/pmbus/pli1209bc.c
Documentation/hwmon/pli1209bc.rst new file +73 -0
@@ -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 <[email protected]> + +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. +======================= ========================================================
drivers/hwmon/pmbus/Kconfig +9 -0
@@ -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
drivers/hwmon/pmbus/Makefile +1 -0
@@ -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
drivers/hwmon/pmbus/pli1209bc.c new file +115 -0
115 lines not on this page · raw message
Signature · 1 line
2.34.1
Guenter Roeck
maintainerRe: [PATCH v3 3/4] pmbus: Add support for pli1209bc
Quoted 3 lines · Marcello Sylvester Bauer
PLI1209BC is a Digital Supervisor from Vicor Corporation.
Signed-off-by Marcello Sylvester Bauer <[email protected]>
checkpatch says:
WARNING: Missing or malformed SPDX-License-Identifier tag in line 1 #82: FILE: Documentation/hwmon/pli1209bc.rst:1:
+Kernel driver pli1209bc
I can not accept the patch without license identifier.
Quoted 2 lines
--- Documentation/hwmon/pli1209bc.rst | 73 +++++++++++++++++++
This needs to be added to Documentation/hwmon/index.rst.
Quoted 23 lines
drivers/hwmon/pmbus/Kconfig | 9 +++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/pli1209bc.c | 115 ++++++++++++++++++++++++++++++ 4 files changed, 198 insertions(+) create mode 100644 Documentation/hwmon/pli1209bc.rst create mode 100644 drivers/hwmon/pmbus/pli1209bc.cDocumentation/hwmon/pli1209bc.rst new file +10
-0@@ -0,0 +1,73 @@ +Kernel driver pli1209bc +======================= + +Supported chips: + + * Digital Supervisor PLI1209BC + + Prefix: 'pli1209bc' + + Addresses scanned: 0x50 - 0x5F
Documentation/hwmon/pli1209bc.rst line 20
Quoted 10 lines
Documentation/hwmon/pli1209bc.rst new file +10
-0+ + Datasheet: https://www.vicorpower.com/documents/datasheets/ds-PLI1209BCxyzz-VICOR.pdf + +Authors: + - Marcello Sylvester Bauer <[email protected]> + +Description +----------- + +The Vicor PLI1209BC is an isolated digital power system supervisor thatprovides
that provides
Quoted 78 lines
Documentation/hwmon/pli1209bc.rst new file +53
-0+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. +======================= ========================================================drivers/hwmon/pmbus/Kconfig +9
-0@@ -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" helpdrivers/hwmon/pmbus/Makefile +0
-0
drivers/hwmon/pmbus/Makefile obj-$(CONFIG_SENSORS_MP2888) += mp2888.o · line 37
Quoted 4 lines
drivers/hwmon/pmbus/Makefile +1
-0@@ -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
Alphabetic order please.
Quoted 124 lines
drivers/hwmon/pmbus/Makefile +0
-0obj-$(CONFIG_SENSORS_PXE1610) += pxe1610.o obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o obj-$(CONFIG_SENSORS_STPDDC60) += stpddc60.odrivers/hwmon/pmbus/pli1209bc.c new file +115
-0@@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* +* Hardware monitoring driver for Vicor PLI1209BC Digital Supervisor +* +* Copyright (c) 2022 9elements GmbH +*/ + +#include <linux/i2c.h> +#include <linux/module.h> +#include <linux/pmbus.h> +#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; + data =sign_extend32 (data,15 ) *10 ; +return clamp_val (data,-32768 ,32767 ) &0xffff ; +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 <[email protected]>" ); +MODULE_DESCRIPTION ("PMBus driver for Vicor PLI1209BC" ); +MODULE_LICENSE ("GPL" ); +MODULE_IMPORT_NS (PMBUS );
Re: [PATCH v3 3/4] pmbus: Add support for pli1209bc
Quoted 6 lines · Guenter Roeck
Quoted 3 lines · Marcello Sylvester Bauer
PLI1209BC is a Digital Supervisor from Vicor Corporation.
Signed-off-by Marcello Sylvester Bauer <[email protected]>
Quoted 7 lines
checkpatch says:
WARNING: Missing or malformed SPDX-License-Identifier tag in line 1 #82: FILE:
Documentation/hwmon/pli1209bc.rst:1:
+Kernel driver pli1209bcI can not accept the patch without license identifier.
oh, sure. I thought it is still optional for documentation entries.
Quoted 37 lines
Quoted 3 lines
---
Documentation/hwmon/pli1209bc.rst | 73 +++++++++++++++++++This needs to be added to
Documentation/hwmon/index.rst.Quoted 31 lines
drivers/hwmon/pmbus/Kconfig | 9 +++
drivers/hwmon/pmbus/Makefile | 1 +
drivers/hwmon/pmbus/pli1209bc.c | 115
++++++++++++++++++++++++++++++4 files changed, 198 insertions(+)create mode 100644
Documentation/hwmon/pli1209bc.rstcreate mode 100644drivers/hwmon/pmbus/pli1209bc.cDocumentation/hwmon/pli1209bc.rst new file +12
-0@@ -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
Documentation/hwmon/pli1209bc.rst new file +3
-0+ +Authors: + - Marcello Sylvester Bauer <[email protected]>
Quoted 8 lines
Quoted 6 lines
Documentation/hwmon/pli1209bc.rst new file +5
-0+ +Description +----------- + +The Vicor PLI1209BC is an isolated digital power system supervisorthatprovides
that provides
ack.
Quoted 87 lines
Quoted 87 lines
+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 processorDocumentation/hwmon/pli1209bc.rst new file +6
-0+can configure, set protection limits, and monitor the BCM. + +Sysfs entries +------------- + +===============================================================================
Documentation/hwmon/pli1209bc.rst new file +44
-0+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. +===============================================================================
drivers/hwmon/pmbus/Kconfig +0
-0@@ -310,6 +310,15 @@ config SENSORS_PIM4328This driver can also be built as a module. If so, the module will
be called pim4328.
+configSENSORS_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.
+
configSENSORS_PM6764TR
tristate "ST PM6764TR"
helpdrivers/hwmon/pmbus/Makefile +0
-1--- a/drivers/hwmon/pmbus/Makefile
Quoted 8 lines
Quoted 6 lines
+++ b/drivers/hwmon/pmbus/Makefile
drivers/hwmon/pmbus/Makefile +0
-0@@ -34,6 +34,7 @@ obj-$(CONFIG_SENSORS_MP2888) += mp2888.oobj-$(CONFIG_SENSORS_MP2975) += mp2975.o obj-$(CONFIG_SENSORS_MP5023) += mp5023.o obj-$(CONFIG_SENSORS_PM6764TR) += pm6764tr.o +obj-$(CONFIG_SENSORS_PLI1209BC) += pli1209bc.o
Alphabetic order please.
ack.
Thanks,
Marcello
Quoted 134 lines
Quoted 134 lines
obj-$(CONFIG_SENSORS_PXE1610) += pxe1610.o obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o obj-$(CONFIG_SENSORS_STPDDC60) += stpddc60.o
drivers/hwmon/pmbus/pli1209bc.c new file +3
-0@@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* +* Hardware monitoring driver for Vicor PLI1209BC Digital Supervisor
+ *
+ * Copyright (c) 2022 9elements GmbH
+ */drivers/hwmon/pmbus/pli1209bc.c new file +8
-0+ +#include <linux/i2c.h> +#include <linux/module.h> +#include <linux/pmbus.h> +#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.
+ */drivers/hwmon/pmbus/pli1209bc.c new file +5
-0+static struct pmbus_platform_data pli1209bc_plat_data = { + .flags = PMBUS_NO_CAPABILITY, +}; + +static int pli1209bc_read_word_data(struct i2c_client *client, intpage,
+ int phase, int reg)drivers/hwmon/pmbus/pli1209bc.c new file +7
-0+{ + 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;
+ data =sign_extend32(data, 15)* 10; + returnclamp_val(data, -32768, 32767)&0xffff; + default:
+ return-ENODATA;
+ }drivers/hwmon/pmbus/pli1209bc.c new file +31
-0+} + +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 singleBCM, 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,drivers/hwmon/pmbus/pli1209bc.c new file +27
-0+}; + +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,drivers/hwmon/pmbus/pli1209bc.c new file +8
-0+}; + +module_i2c_driver (pli1209bc_driver); + +MODULE_AUTHOR ("Marcello Sylvester Bauer <[email protected]>" ); +MODULE_DESCRIPTION ("PMBus driver for Vicor PLI1209BC" ); +MODULE_LICENSE ("GPL" ); +MODULE_IMPORT_NS (PMBUS );