Support pli1209bc Digital Supervisor
Subsystems (3)
v4 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 v4:
- Add Documetation to index.rst
- Add missing license identifier
- Fix typo and Makefile obj order
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/index.rst | 1 + Documentation/hwmon/pli1209bc.rst | 75 +++++++++ drivers/hwmon/pmbus/Kconfig | 16 ++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/pli1209bc.c | 146 ++++++++++++++++++ 7 files changed, 243 insertions(+) create mode 100644 Documentation/hwmon/pli1209bc.rst create mode 100644 drivers/hwmon/pmbus/pli1209bc.c
Signature · 1 line
2.34.1
PATCH v4 1/4 dt-bindings: vendor-prefixes: add Vicor Corporation
Add 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
Re: [PATCH v4 1/4] dt-bindings: vendor-prefixes: add Vicor Corporation
Quoted 7 lines · Marcello Sylvester Bauer
Add vendor prefix for Vicor Corporation.
Signed-off-by Marcello Sylvester Bauer <[email protected]>--- Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ 1 file changed, 2 insertions(+)
Re: [PATCH v4 1/4] dt-bindings: vendor-prefixes: add Vicor Corporation
In reply to Marcello Sylvester BauerQuoted 4 lines · Marcello Sylvester Bauer
Add vendor prefix for Vicor Corporation.
Signed-off-by Marcello Sylvester Bauer <[email protected]>Acked-by Rob Herring <[email protected]>
Applied to hwmon-next.
Thanks,
Guenter
Quoted 17 lines
--- 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,.*":
PATCH v4 2/4 dt-bindings:trivial-devices: Add pli1209bc
In reply to Marcello Sylvester BauerAdd 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
Re: [PATCH v4 2/4] dt-bindings:trivial-devices: Add pli1209bc
Quoted 8 lines · Marcello Sylvester Bauer
Add trivial device entry for PLI1209BC Digital Supervisor from Vicor Corporation.
Signed-off-by Marcello Sylvester Bauer <[email protected]>--- Documentation/devicetree/bindings/trivial-devices.yaml | 2 ++ 1 file changed, 2 insertions(+)
Re: [PATCH v4 2/4] dt-bindings:trivial-devices: Add pli1209bc
In reply to Marcello Sylvester BauerQuoted 5 lines · Marcello Sylvester Bauer
Add trivial device entry for PLI1209BC Digital Supervisor from Vicor Corporation.
Signed-off-by Marcello Sylvester Bauer <[email protected]>Acked-by Rob Herring <[email protected]>
Applied to hwmon-next.
Thanks,
Guenter
Quoted 17 lines
--- 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
PATCH v4 3/4 pmbus: Add support for pli1209bc
In reply to Marcello Sylvester BauerPLI1209BC is a Digital Supervisor from Vicor Corporation.
--- Documentation/hwmon/index.rst | 1 + Documentation/hwmon/pli1209bc.rst | 75 +++++++++++++++++++ drivers/hwmon/pmbus/Kconfig | 9 +++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/pli1209bc.c | 115 ++++++++++++++++++++++++++++++ 5 files changed, 201 insertions(+) create mode 100644 Documentation/hwmon/pli1209bc.rst create mode 100644 drivers/hwmon/pmbus/pli1209bc.c
Documentation/hwmon/index.rst +1 -0
@@ -161,6 +161,7 @@ Hardware Monitoring Kernel Drivers pc87427 pcf8591 pim4328 + pli1209bc pm6764tr pmbus powr1220
Documentation/hwmon/pli1209bc.rst new file +75 -0
75 lines not on this page · raw message
drivers/hwmon/pmbus/Kconfig +9 -0
@@ -317,6 +317,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
@@ -33,6 +33,7 @@ obj-$(CONFIG_SENSORS_MAX8688) += max8688.o obj-$(CONFIG_SENSORS_MP2888) += mp2888.o obj-$(CONFIG_SENSORS_MP2975) += mp2975.o obj-$(CONFIG_SENSORS_MP5023) += mp5023.o +obj-$(CONFIG_SENSORS_PLI1209BC) += pli1209bc.o obj-$(CONFIG_SENSORS_PM6764TR) += pm6764tr.o obj-$(CONFIG_SENSORS_PXE1610) += pxe1610.o obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o
drivers/hwmon/pmbus/pli1209bc.c new file +115 -0
115 lines not on this page · raw message
Signature · 1 line
2.34.1
Re: [PATCH v4 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]>
Applied to hwmon-next.
Thanks,
Guenter
Quoted 256 lines
--- Documentation/hwmon/index.rst | 1 + Documentation/hwmon/pli1209bc.rst | 75 +++++++++++++++++++ drivers/hwmon/pmbus/Kconfig | 9 +++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/pli1209bc.c | 115 ++++++++++++++++++++++++++++++ 5 files changed, 201 insertions(+) create mode 100644 Documentation/hwmon/pli1209bc.rst create mode 100644 drivers/hwmon/pmbus/pli1209bc.cDocumentation/hwmon/index.rst +1
-0@@ -161,6 +161,7 @@ Hardware Monitoring Kernel Drivers pc87427 pcf8591 pim4328 + pli1209bc pm6764tr pmbus powr1220Documentation/hwmon/pli1209bc.rst new file +75
-0@@ -0,0 +1,75 @@ +.. SPDX-License-Identifier: GPL-2.0 + +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 that provides +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@@ -317,6 +317,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 +1
-0@@ -33,6 +33,7 @@ obj-$(CONFIG_SENSORS_MAX8688) += max8688.o obj-$(CONFIG_SENSORS_MP2888) += mp2888.o obj-$(CONFIG_SENSORS_MP2975) += mp2975.o obj-$(CONFIG_SENSORS_MP5023) += mp5023.o +obj-$(CONFIG_SENSORS_PLI1209BC) += pli1209bc.o obj-$(CONFIG_SENSORS_PM6764TR) += pm6764tr.o obj-$(CONFIG_SENSORS_PXE1610) += pxe1610.o obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.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 );
PATCH v4 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
@@ -326,6 +326,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
Re: [PATCH v4 4/4] pmbus (pli1209bc): Add regulator support
Quoted 3 lines · Marcello Sylvester Bauer
Add regulator support for PLI1209BC Digital Supervisor.
Signed-off-by Marcello Sylvester Bauer <[email protected]>
Applied to hwmon-next.
Thanks,
Guenter
Quoted 84 lines
--- drivers/hwmon/pmbus/Kconfig | 7 +++++++ drivers/hwmon/pmbus/pli1209bc.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+)drivers/hwmon/pmbus/Kconfig +7
-0@@ -326,6 +326,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" helpdrivers/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)