Currently "pmbus" infrastructure does not build for support reading "vout" in "vid" mode, for cases when device is configured with the different modes per page bases. However some devices could be configured in such way. The patchset includes: Patch#1 allows selection mode per pmbus page bases, by extending "vrm_version" field to per page array and modify the drivers using this field. Patch#2 introduces support for "vrm" Intel specification mode "IMVP9" and AMD specification mode "6.25mV". Patch#3 extends "tps53679" driver with support of the additional device TPS53688. Patch#4 introduces new driver for Infineon Multi-phase Digital VR Controller Sierra controllers XDPE12254, XDPE12284. Patch#5 extends binding documentation for trivial devices. Patch#6 adds documentation. Vadim Pasternak (6): hwmon: (pmbus/core) Add support for vid mode detection per page bases hwmon: (pmbus/core) Add support for Intel IMVP9 and AMD 6.25mV modes hwmon: (pmbus/tps53679) Extend device list supported by driver hwmon: (pmbus) Add support for Infineon Multi-phase xdpe122 family controllers dt-bindings: Add TI and Infineon VR Controllers as trivial devices docs: hwmon: Include 'xdpe12284.rst' into docs .../devicetree/bindings/trivial-devices.yaml | 8 ++ Documentation/hwmon/xdpe12284.rst | 101 ++++++++++++++++++ drivers/hwmon/pmbus/Kconfig | 13 ++- drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/max20751.c | 2 +- drivers/hwmon/pmbus/pmbus.c | 5 +- drivers/hwmon/pmbus/pmbus.h | 4 +- drivers/hwmon/pmbus/pmbus_core.c | 10 +- drivers/hwmon/pmbus/pxe1610.c | 44 ++++---- drivers/hwmon/pmbus/tps53679.c | 46 ++++---- drivers/hwmon/pmbus/xdpe12284.c | 116 +++++++++++++++++++++ 11 files changed, 301 insertions(+), 49 deletions(-) create mode 100644 Documentation/hwmon/xdpe12284.rst create mode 100644 drivers/hwmon/pmbus/xdpe12284.c -- 2.11.0
Add support for VID protocol detection per page bases, instead of detecting it based on "PMBU_VOUT" readout from page 0 for all the pages supported by particular device. The reason that some devices allows to configure different VID modes per page within the same device. Patch modifies the field "vrm_version" within the structure "pmbus_driver_info" to be per page array. Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> --- drivers/hwmon/pmbus/max20751.c | 2 +- drivers/hwmon/pmbus/pmbus.c | 5 +++-- drivers/hwmon/pmbus/pmbus.h | 2 +- drivers/hwmon/pmbus/pmbus_core.c | 2 +- drivers/hwmon/pmbus/pxe1610.c | 44 ++++++++++++++++++++++------------------ drivers/hwmon/pmbus/tps53679.c | 44 +++++++++++++++++++++------------------- 6 files changed, 53 insertions(+), 46 deletions(-) diff --git a/drivers/hwmon/pmbus/max20751.c b/drivers/hwmon/pmbus/max20751.c index ee5f0cdbde06..da3c38cb9a5c 100644 --- a/drivers/hwmon/pmbus/max20751.c +++ b/drivers/hwmon/pmbus/max20751.c @@ -16,7 +16,7 @@ static struct pmbus_driver_info max20751_info = { .pages = 1, .format[PSC_VOLTAGE_IN] = linear, .format[PSC_VOLTAGE_OUT] = vid, - .vrm_version = vr12, + .vrm_version[0] = vr12, .format[PSC_TEMPERATURE] = linear, .format[PSC_CURRENT_OUT] = linear, .format[PSC_POWER] = linear, diff --git a/drivers/hwmon/pmbus/pmbus.c b/drivers/hwmon/pmbus/pmbus.c index c0bc43d01018..9109f305ebbb 100644 --- a/drivers/hwmon/pmbus/pmbus.c +++ b/drivers/hwmon/pmbus/pmbus.c @@ -115,7 +115,7 @@ static int pmbus_identify(struct i2c_client *client, } if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE)) { - int vout_mode; + int vout_mode, i; vout_mode = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); if (vout_mode >= 0 && vout_mode != 0xff) { @@ -124,7 +124,8 @@ static int pmbus_identify(struct i2c_client *client, break; case 1: info->format[PSC_VOLTAGE_OUT] = vid; - info->vrm_version = vr11; + for (i = 0; i < info->pages; i++) + info->vrm_version[i] = vr11; break; case 2: info->format[PSC_VOLTAGE_OUT] = direct; diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h index d198af3a92b6..2bdebd0ea9c1 100644 --- a/drivers/hwmon/pmbus/pmbus.h +++ b/drivers/hwmon/pmbus/pmbus.h @@ -382,7 +382,7 @@ enum vrm_version { vr11 = 0, vr12, vr13 }; struct pmbus_driver_info { int pages; /* Total number of pages */ enum pmbus_data_format format[PSC_NUM_CLASSES]; - enum vrm_version vrm_version; + enum vrm_version vrm_version[PMBUS_PAGES]; /* vrm version per page */ /* * Support one set of coefficients for each sensor type * Used for chips providing data in direct mode. diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c index 8470097907bc..98226e84b351 100644 --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c @@ -696,7 +696,7 @@ static long pmbus_reg2data_vid(struct pmbus_data *data, long val = sensor->data; long rv = 0; - switch (data->info->vrm_version) { + switch (data->info->vrm_version[sensor->page]) { case vr11: if (val >= 0x02 && val <= 0xb2) rv = DIV_ROUND_CLOSEST(160000 - (val - 2) * 625, 100); diff --git a/drivers/hwmon/pmbus/pxe1610.c b/drivers/hwmon/pmbus/pxe1610.c index ebe3f023f840..517584cff3de 100644 --- a/drivers/hwmon/pmbus/pxe1610.c +++ b/drivers/hwmon/pmbus/pxe1610.c @@ -19,26 +19,30 @@ static int pxe1610_identify(struct i2c_client *client, struct pmbus_driver_info *info) { - if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE)) { - u8 vout_mode; - int ret; - - /* Read the register with VOUT scaling value.*/ - ret = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); - if (ret < 0) - return ret; - - vout_mode = ret & GENMASK(4, 0); - - switch (vout_mode) { - case 1: - info->vrm_version = vr12; - break; - case 2: - info->vrm_version = vr13; - break; - default: - return -ENODEV; + int i; + + for (i = 0; i < PXE1610_NUM_PAGES; i++) { + if (pmbus_check_byte_register(client, i, PMBUS_VOUT_MODE)) { + u8 vout_mode; + int ret; + + /* Read the register with VOUT scaling value.*/ + ret = pmbus_read_byte_data(client, i, PMBUS_VOUT_MODE); + if (ret < 0) + return ret; + + vout_mode = ret & GENMASK(4, 0); + + switch (vout_mode) { + case 1: + info->vrm_version[i] = vr12; + break; + case 2: + info->vrm_version[i] = vr13; + break; + default: + return -ENODEV; + } } } diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c index 86bb3aca09ed..163e8c6aaa8e 100644 --- a/drivers/hwmon/pmbus/tps53679.c +++ b/drivers/hwmon/pmbus/tps53679.c @@ -24,27 +24,29 @@ static int tps53679_identify(struct i2c_client *client, struct pmbus_driver_info *info) { u8 vout_params; - int ret; - - /* Read the register with VOUT scaling value.*/ - ret = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); - if (ret < 0) - return ret; - - vout_params = ret & GENMASK(4, 0); - - switch (vout_params) { - case TPS53679_PROT_VR13_10MV: - case TPS53679_PROT_VR12_5_10MV: - info->vrm_version = vr13; - break; - case TPS53679_PROT_VR13_5MV: - case TPS53679_PROT_VR12_5MV: - case TPS53679_PROT_IMVP8_5MV: - info->vrm_version = vr12; - break; - default: - return -EINVAL; + int i, ret; + + for (i = 0; i < TPS53679_PAGE_NUM; i++) { + /* Read the register with VOUT scaling value.*/ + ret = pmbus_read_byte_data(client, i, PMBUS_VOUT_MODE); + if (ret < 0) + return ret; + + vout_params = ret & GENMASK(4, 0); + + switch (vout_params) { + case TPS53679_PROT_VR13_10MV: + case TPS53679_PROT_VR12_5_10MV: + info->vrm_version[i] = vr13; + break; + case TPS53679_PROT_VR13_5MV: + case TPS53679_PROT_VR12_5MV: + case TPS53679_PROT_IMVP8_5MV: + info->vrm_version[i] = vr12; + break; + default: + return -EINVAL; + } } return 0; -- 2.11.0
Extend "vrm_version" with the type for Intel IMVP9 and AMD 6.25mV VID modes. Add calculation for those types. Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> --- drivers/hwmon/pmbus/pmbus.h | 2 +- drivers/hwmon/pmbus/pmbus_core.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h index 2bdebd0ea9c1..a7f90e18119c 100644 --- a/drivers/hwmon/pmbus/pmbus.h +++ b/drivers/hwmon/pmbus/pmbus.h @@ -377,7 +377,7 @@ enum pmbus_sensor_classes { #define PMBUS_PAGE_VIRTUAL BIT(31) enum pmbus_data_format { linear = 0, direct, vid }; -enum vrm_version { vr11 = 0, vr12, vr13 }; +enum vrm_version { vr11 = 0, vr12, vr13, imvp9, amd625mv }; struct pmbus_driver_info { int pages; /* Total number of pages */ diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c index 98226e84b351..811819e41a72 100644 --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c @@ -709,6 +709,14 @@ static long pmbus_reg2data_vid(struct pmbus_data *data, if (val >= 0x01) rv = 500 + (val - 1) * 10; break; + case imvp9: + if (val >= 0x01) + rv = 200 + (val - 1) * 10; + break; + case amd625mv: + if (val >= 0x0 && val <= 0xd8) + rv = DIV_ROUND_CLOSEST(155000 - val * 625, 100); + break; } return rv; } -- 2.11.0
Extends driver with support of the additional devices: Texas Instruments Dual channel DCAP+ multiphase controllers: TPS53688. Extend Kconfig with added device. Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> --- drivers/hwmon/pmbus/Kconfig | 4 ++-- drivers/hwmon/pmbus/tps53679.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig index 59859979571d..0dd30b07bf18 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig @@ -200,10 +200,10 @@ config SENSORS_TPS40422 be called tps40422. config SENSORS_TPS53679 - tristate "TI TPS53679" + tristate "TI TPS53679, TPS53688" help If you say yes here you get hardware monitoring support for TI - TPS53679. + TPS53679, TPS53688 This driver can also be built as a module. If so, the module will be called tps53679. diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c index 163e8c6aaa8e..9c22e9013dd7 100644 --- a/drivers/hwmon/pmbus/tps53679.c +++ b/drivers/hwmon/pmbus/tps53679.c @@ -85,6 +85,7 @@ static int tps53679_probe(struct i2c_client *client, static const struct i2c_device_id tps53679_id[] = { {"tps53679", 0}, + {"tps53688", 0}, {} }; @@ -92,6 +93,7 @@ MODULE_DEVICE_TABLE(i2c, tps53679_id); static const struct of_device_id __maybe_unused tps53679_of_match[] = { {.compatible = "ti,tps53679"}, + {.compatible = "ti,tps53688"}, {} }; MODULE_DEVICE_TABLE(of, tps53679_of_match); -- 2.11.0
Add support for devices XDPE12254, XDPE12284. All these device support two pages. The below lists of VOUT_MODE command readout with their related VID protocols, Digital to Analog Converter steps, supported by these devices: VR12.0 mode, 5-mV DAC - 0x01; VR12.5 mode, 10-mV DAC - 0x02; IMVP9 mode, 5-mV DAC - 0x03; AMD mode 6.25mV - 0x10. Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> --- RFC-v1: Changes added by Vadim: - Add format for current in; - Extend functions for both pages with "PMBUS_HAVE_IIN", "PMBUS_HAVE_PIN" and "PMBUS_HAVE_STATUS_INPUT". - Drop others than xdpe12284, xdpe12254 devices, since there is not clear confirmation from Infineon regarding availability of the others. --- drivers/hwmon/pmbus/Kconfig | 9 ++++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/xdpe12284.c | 116 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 drivers/hwmon/pmbus/xdpe12284.c diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig index 0dd30b07bf18..128e91de5209 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig @@ -228,6 +228,15 @@ config SENSORS_UCD9200 This driver can also be built as a module. If so, the module will be called ucd9200. +config SENSORS_XDPE122 + tristate "Infineon XDPE122 family" + help + If you say yes here you get hardware monitoring support for Infineon + XDPE12254, XDPE12284, device. + + This driver can also be built as a module. If so, the module will + be called xdpe12284. + config SENSORS_ZL6100 tristate "Intersil ZL6100 and compatibles" help diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile index 3f8c1014938b..5421fcc0a01c 100644 --- a/drivers/hwmon/pmbus/Makefile +++ b/drivers/hwmon/pmbus/Makefile @@ -26,4 +26,5 @@ obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o obj-$(CONFIG_SENSORS_TPS53679) += tps53679.o obj-$(CONFIG_SENSORS_UCD9000) += ucd9000.o obj-$(CONFIG_SENSORS_UCD9200) += ucd9200.o +obj-$(CONFIG_SENSORS_XDPE122) += xdpe12284.o obj-$(CONFIG_SENSORS_ZL6100) += zl6100.o diff --git a/drivers/hwmon/pmbus/xdpe12284.c b/drivers/hwmon/pmbus/xdpe12284.c new file mode 100644 index 000000000000..cb03ce30a527 --- /dev/null +++ b/drivers/hwmon/pmbus/xdpe12284.c @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Hardware monitoring driver for Infineon Multi-phase Digital VR Controllers + * + * Copyright (c) 2020 Mellanox Technologies. All rights reserved. + */ + +#include <linux/err.h> +#include <linux/i2c.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include "pmbus.h" + +#define XDPE122_PROT_VR12_5MV 0x01 /* VR12.0 mode, 5-mV DAC */ +#define XDPE122_PROT_VR12_5_10MV 0x02 /* VR12.5 mode, 10-mV DAC */ +#define XDPE122_PROT_IMVP9_10MV 0x03 /* IMVP9 mode, 10-mV DAC */ +#define XDPE122_AMD_625MV 0x10 /* AMD mode 6.25mV */ +#define XDPE122_PAGE_NUM 2 + +static int xdpe122_identify(struct i2c_client *client, + struct pmbus_driver_info *info) +{ + u8 vout_params; + int i, ret; + + for (i = 0; i < XDPE122_PAGE_NUM; i++) { + /* Read the register with VOUT scaling value.*/ + ret = pmbus_read_byte_data(client, i, PMBUS_VOUT_MODE); + if (ret < 0) + return ret; + + vout_params = ret & GENMASK(4, 0); + + switch (vout_params) { + case XDPE122_PROT_VR12_5_10MV: + info->vrm_version[i] = vr13; + break; + case XDPE122_PROT_VR12_5MV: + info->vrm_version[i] = vr12; + break; + case XDPE122_PROT_IMVP9_10MV: + info->vrm_version[i] = imvp9; + case XDPE122_AMD_625MV: + info->vrm_version[i] = amd625mv; + break; + default: + return -EINVAL; + } + } + + return 0; +} + +static struct pmbus_driver_info xdpe122_info = { + .pages = XDPE122_PAGE_NUM, + .format[PSC_VOLTAGE_IN] = linear, + .format[PSC_VOLTAGE_OUT] = vid, + .format[PSC_TEMPERATURE] = linear, + .format[PSC_CURRENT_IN] = linear, + .format[PSC_CURRENT_OUT] = linear, + .format[PSC_POWER] = linear, + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | + PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | + PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | + PMBUS_HAVE_POUT | PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT, + .func[1] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | + PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | + PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | + PMBUS_HAVE_POUT | PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT, + .identify = xdpe122_identify, +}; + +static int xdpe122_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct pmbus_driver_info *info; + + info = devm_kmemdup(&client->dev, &xdpe122_info, sizeof(*info), + GFP_KERNEL); + if (!info) + return -ENOMEM; + + return pmbus_do_probe(client, id, info); +} + +static const struct i2c_device_id xdpe122_id[] = { + {"xdpe12254", 0}, + {"xdpe12284", 0}, + {} +}; + +MODULE_DEVICE_TABLE(i2c, xdpe122_id); + +static const struct of_device_id __maybe_unused xdpe122_of_match[] = { + {.compatible = "infineon, xdpe12254"}, + {.compatible = "infineon, xdpe12284"}, + {} +}; +MODULE_DEVICE_TABLE(of, xdpe122_of_match); + +static struct i2c_driver xdpe122_driver = { + .driver = { + .name = "xdpe12284", + .of_match_table = of_match_ptr(xdpe122_of_match), + }, + .probe = xdpe122_probe, + .remove = pmbus_do_remove, + .id_table = xdpe122_id, +}; + +module_i2c_driver(xdpe122_driver); + +MODULE_AUTHOR("Vadim Pasternak <vadimp@mellanox.com>"); +MODULE_DESCRIPTION("PMBus driver for Infineon XDPE122 family"); +MODULE_LICENSE("GPL"); -- 2.11.0
Add Texas Instruments Dual channel DCAP+ multiphase controllers: TPS53679, TPS53688, and Infineon Multi-phase Digital VR controllers XDPE12284, XDPE12254 as trivial devices. Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> --- RFC-v1: Changes added by Vadim: - Drop others than xdpe12284, xdpe12254 devices, since there is not clear confirmation from Infineon regarding availability of the others. --- Documentation/devicetree/bindings/trivial-devices.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml index 765fd1c170df..dfe22e0a82eb 100644 --- a/Documentation/devicetree/bindings/trivial-devices.yaml +++ b/Documentation/devicetree/bindings/trivial-devices.yaml @@ -104,6 +104,10 @@ properties: - infineon,slb9645tt # Infineon TLV493D-A1B6 I2C 3D Magnetic Sensor - infineon,tlv493d-a1b6 + # Infineon Multi-phase Digital VR Controller xdpe12254 + - infineon,xdpe12254 + # Infineon Multi-phase Digital VR Controller xdpe12284 + - infineon,xdpe12284 # Inspur Power System power supply unit version 1 - inspur,ipsps1 # Intersil ISL29028 Ambient Light and Proximity Sensor @@ -354,6 +358,10 @@ properties: - ti,tmp103 # Digital Temperature Sensor - ti,tmp275 + # TI Dual channel DCAP+ multiphase controller TPS53679 + - ti,tps53679 + # TI Dual channel DCAP+ multiphase controller TPS53688 + - ti,tps53688 # Winbond/Nuvoton H/W Monitor - winbond,w83793 # i2c trusted platform module (TPM) -- 2.11.0
Add documentation for 'xdpe122' devices. Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> --- Documentation/hwmon/xdpe12284.rst | 101 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 Documentation/hwmon/xdpe12284.rst diff --git a/Documentation/hwmon/xdpe12284.rst b/Documentation/hwmon/xdpe12284.rst new file mode 100644 index 000000000000..6b7ae98cc536 --- /dev/null +++ b/Documentation/hwmon/xdpe12284.rst @@ -0,0 +1,101 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Kernel driver xdpe122 +===================== + +Supported chips: + + * Infineon XDPE12254 + + Prefix: 'xdpe12254' + + * Infineon XDPE12284 + + Prefix: 'xdpe12284' + +Authors: + + Vadim Pasternak <vadimp@mellanox.com> + +Description +----------- + +This driver implements support for Infineon Multi-phase XDPE122 family +dual loop voltage regulators. +The family includes XDPE12284 and XDPE12254 devices. +The devices from this family complaint with: +- Intel VR13 and VR13HC rev 1.3, IMVP8 rev 1.2 and IMPVP9 rev 1.3 DC-DC + converter specification. +- Intel SVID rev 1.9. protocol. +- PMBus rev 1.3 interface. + +Devices support linear format for reading input voltage, input and output current, +input and output power and temperature. +Device supports VID format for reading output voltage. The below modes are +supported: +- VR12.0 mode, 5-mV DAC - 0x01. +- VR12.5 mode, 10-mV DAC - 0x02. +- IMVP9 mode, 5-mV DAC - 0x03. +- AMD mode 6.25mV - 0x10. + +Devices support two pages for telemetry. + +The driver provides for current: input, maximum and critical thresholds +and maximum and critical alarms. Critical thresholds and critical alarm are +supported only for current output. +The driver exports the following attributes for via the sysfs files, where +indexes 1, 2 are for "iin" and 3, 4 for "iout": + +**curr[3-4]_crit** + +**curr[3-4]_crit_alarm** + +**curr[1-4]_input** + +**curr[1-4]_label** + +**curr[1-4]_max** + +**curr[1-4]_max_alarm** + +The driver provides for voltage: input, critical and low critical thresholds +and critical and low critical alarms. +The driver exports the following attributes for via the sysfs files, where +indexes 1, 2 are for "vin" and 3, 4 for "vout": + +**in[1-4]_crit** + +**in[1-4_crit_alarm** + +**in[1-4]_input** + +**in[1-4_label** + +**in[1-4]_lcrit** + +**in[1-41_lcrit_alarm** + +The driver provides for power: input and alarms. Power alarm is supported only +for power input. +The driver exports the following attributes for via the sysfs files, where +indexes 1, 2 are for "pin" and 3, 4 for "pout": + +**power[1-2]_alarm** + +**power[1-4]_input** + +**power[1-4]_label** + +The driver provides for temperature: input, maximum and critical thresholds +and maximum and critical alarms. +The driver exports the following attributes for via the sysfs files: + +**temp[1-2]_crit** + +**temp[1-2]_crit_alarm** + +**temp[1-2]_input** + +**temp[1-2]_max** + +**temp[1-2]_max_alarm** -- 2.11.0
On Mon, Jan 13, 2020 at 03:08:40PM +0000, Vadim Pasternak wrote: > Add Texas Instruments Dual channel DCAP+ multiphase controllers: > TPS53679, TPS53688, and Infineon Multi-phase Digital VR controllers > XDPE12284, XDPE12254 as trivial devices. > > Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> Acked-by: Guenter Roeck <linux@roeck-us.net> I assume this patch will be pushed through the devicetree branch. If not, let me know and I'll apply it to hwmon-next. > --- > RFC-v1: > Changes added by Vadim: > - Drop others than xdpe12284, xdpe12254 devices, since there is not > clear confirmation from Infineon regarding availability of the > others. > --- > Documentation/devicetree/bindings/trivial-devices.yaml | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml > index 765fd1c170df..dfe22e0a82eb 100644 > --- a/Documentation/devicetree/bindings/trivial-devices.yaml > +++ b/Documentation/devicetree/bindings/trivial-devices.yaml > @@ -104,6 +104,10 @@ properties: > - infineon,slb9645tt > # Infineon TLV493D-A1B6 I2C 3D Magnetic Sensor > - infineon,tlv493d-a1b6 > + # Infineon Multi-phase Digital VR Controller xdpe12254 > + - infineon,xdpe12254 > + # Infineon Multi-phase Digital VR Controller xdpe12284 > + - infineon,xdpe12284 > # Inspur Power System power supply unit version 1 > - inspur,ipsps1 > # Intersil ISL29028 Ambient Light and Proximity Sensor > @@ -354,6 +358,10 @@ properties: > - ti,tmp103 > # Digital Temperature Sensor > - ti,tmp275 > + # TI Dual channel DCAP+ multiphase controller TPS53679 > + - ti,tps53679 > + # TI Dual channel DCAP+ multiphase controller TPS53688 > + - ti,tps53688 > # Winbond/Nuvoton H/W Monitor > - winbond,w83793 > # i2c trusted platform module (TPM)
On Mon, Jan 13, 2020 at 03:08:36PM +0000, Vadim Pasternak wrote: > Add support for VID protocol detection per page bases, instead of > detecting it based on "PMBU_VOUT" readout from page 0 for all the pages > supported by particular device. > The reason that some devices allows to configure different VID modes > per page within the same device. > Patch modifies the field "vrm_version" within the structure > "pmbus_driver_info" to be per page array. > > Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> Applied to hwmon-next. Thanks, Guenter > --- > drivers/hwmon/pmbus/max20751.c | 2 +- > drivers/hwmon/pmbus/pmbus.c | 5 +++-- > drivers/hwmon/pmbus/pmbus.h | 2 +- > drivers/hwmon/pmbus/pmbus_core.c | 2 +- > drivers/hwmon/pmbus/pxe1610.c | 44 ++++++++++++++++++++++------------------ > drivers/hwmon/pmbus/tps53679.c | 44 +++++++++++++++++++++------------------- > 6 files changed, 53 insertions(+), 46 deletions(-) > > diff --git a/drivers/hwmon/pmbus/max20751.c b/drivers/hwmon/pmbus/max20751.c > index ee5f0cdbde06..da3c38cb9a5c 100644 > --- a/drivers/hwmon/pmbus/max20751.c > +++ b/drivers/hwmon/pmbus/max20751.c > @@ -16,7 +16,7 @@ static struct pmbus_driver_info max20751_info = { > .pages = 1, > .format[PSC_VOLTAGE_IN] = linear, > .format[PSC_VOLTAGE_OUT] = vid, > - .vrm_version = vr12, > + .vrm_version[0] = vr12, > .format[PSC_TEMPERATURE] = linear, > .format[PSC_CURRENT_OUT] = linear, > .format[PSC_POWER] = linear, > diff --git a/drivers/hwmon/pmbus/pmbus.c b/drivers/hwmon/pmbus/pmbus.c > index c0bc43d01018..9109f305ebbb 100644 > --- a/drivers/hwmon/pmbus/pmbus.c > +++ b/drivers/hwmon/pmbus/pmbus.c > @@ -115,7 +115,7 @@ static int pmbus_identify(struct i2c_client *client, > } > > if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE)) { > - int vout_mode; > + int vout_mode, i; > > vout_mode = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); > if (vout_mode >= 0 && vout_mode != 0xff) { > @@ -124,7 +124,8 @@ static int pmbus_identify(struct i2c_client *client, > break; > case 1: > info->format[PSC_VOLTAGE_OUT] = vid; > - info->vrm_version = vr11; > + for (i = 0; i < info->pages; i++) > + info->vrm_version[i] = vr11; > break; > case 2: > info->format[PSC_VOLTAGE_OUT] = direct; > diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h > index d198af3a92b6..2bdebd0ea9c1 100644 > --- a/drivers/hwmon/pmbus/pmbus.h > +++ b/drivers/hwmon/pmbus/pmbus.h > @@ -382,7 +382,7 @@ enum vrm_version { vr11 = 0, vr12, vr13 }; > struct pmbus_driver_info { > int pages; /* Total number of pages */ > enum pmbus_data_format format[PSC_NUM_CLASSES]; > - enum vrm_version vrm_version; > + enum vrm_version vrm_version[PMBUS_PAGES]; /* vrm version per page */ > /* > * Support one set of coefficients for each sensor type > * Used for chips providing data in direct mode. > diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c > index 8470097907bc..98226e84b351 100644 > --- a/drivers/hwmon/pmbus/pmbus_core.c > +++ b/drivers/hwmon/pmbus/pmbus_core.c > @@ -696,7 +696,7 @@ static long pmbus_reg2data_vid(struct pmbus_data *data, > long val = sensor->data; > long rv = 0; > > - switch (data->info->vrm_version) { > + switch (data->info->vrm_version[sensor->page]) { > case vr11: > if (val >= 0x02 && val <= 0xb2) > rv = DIV_ROUND_CLOSEST(160000 - (val - 2) * 625, 100); > diff --git a/drivers/hwmon/pmbus/pxe1610.c b/drivers/hwmon/pmbus/pxe1610.c > index ebe3f023f840..517584cff3de 100644 > --- a/drivers/hwmon/pmbus/pxe1610.c > +++ b/drivers/hwmon/pmbus/pxe1610.c > @@ -19,26 +19,30 @@ > static int pxe1610_identify(struct i2c_client *client, > struct pmbus_driver_info *info) > { > - if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE)) { > - u8 vout_mode; > - int ret; > - > - /* Read the register with VOUT scaling value.*/ > - ret = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); > - if (ret < 0) > - return ret; > - > - vout_mode = ret & GENMASK(4, 0); > - > - switch (vout_mode) { > - case 1: > - info->vrm_version = vr12; > - break; > - case 2: > - info->vrm_version = vr13; > - break; > - default: > - return -ENODEV; > + int i; > + > + for (i = 0; i < PXE1610_NUM_PAGES; i++) { > + if (pmbus_check_byte_register(client, i, PMBUS_VOUT_MODE)) { > + u8 vout_mode; > + int ret; > + > + /* Read the register with VOUT scaling value.*/ > + ret = pmbus_read_byte_data(client, i, PMBUS_VOUT_MODE); > + if (ret < 0) > + return ret; > + > + vout_mode = ret & GENMASK(4, 0); > + > + switch (vout_mode) { > + case 1: > + info->vrm_version[i] = vr12; > + break; > + case 2: > + info->vrm_version[i] = vr13; > + break; > + default: > + return -ENODEV; > + } > } > } > > diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c > index 86bb3aca09ed..163e8c6aaa8e 100644 > --- a/drivers/hwmon/pmbus/tps53679.c > +++ b/drivers/hwmon/pmbus/tps53679.c > @@ -24,27 +24,29 @@ static int tps53679_identify(struct i2c_client *client, > struct pmbus_driver_info *info) > { > u8 vout_params; > - int ret; > - > - /* Read the register with VOUT scaling value.*/ > - ret = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); > - if (ret < 0) > - return ret; > - > - vout_params = ret & GENMASK(4, 0); > - > - switch (vout_params) { > - case TPS53679_PROT_VR13_10MV: > - case TPS53679_PROT_VR12_5_10MV: > - info->vrm_version = vr13; > - break; > - case TPS53679_PROT_VR13_5MV: > - case TPS53679_PROT_VR12_5MV: > - case TPS53679_PROT_IMVP8_5MV: > - info->vrm_version = vr12; > - break; > - default: > - return -EINVAL; > + int i, ret; > + > + for (i = 0; i < TPS53679_PAGE_NUM; i++) { > + /* Read the register with VOUT scaling value.*/ > + ret = pmbus_read_byte_data(client, i, PMBUS_VOUT_MODE); > + if (ret < 0) > + return ret; > + > + vout_params = ret & GENMASK(4, 0); > + > + switch (vout_params) { > + case TPS53679_PROT_VR13_10MV: > + case TPS53679_PROT_VR12_5_10MV: > + info->vrm_version[i] = vr13; > + break; > + case TPS53679_PROT_VR13_5MV: > + case TPS53679_PROT_VR12_5MV: > + case TPS53679_PROT_IMVP8_5MV: > + info->vrm_version[i] = vr12; > + break; > + default: > + return -EINVAL; > + } > } > > return 0;
On Mon, Jan 13, 2020 at 03:08:37PM +0000, Vadim Pasternak wrote: > Extend "vrm_version" with the type for Intel IMVP9 and AMD 6.25mV VID > modes. > Add calculation for those types. > > Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> Applied to hwmon-next. Thanks, Guenter > --- > drivers/hwmon/pmbus/pmbus.h | 2 +- > drivers/hwmon/pmbus/pmbus_core.c | 8 ++++++++ > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h > index 2bdebd0ea9c1..a7f90e18119c 100644 > --- a/drivers/hwmon/pmbus/pmbus.h > +++ b/drivers/hwmon/pmbus/pmbus.h > @@ -377,7 +377,7 @@ enum pmbus_sensor_classes { > #define PMBUS_PAGE_VIRTUAL BIT(31) > > enum pmbus_data_format { linear = 0, direct, vid }; > -enum vrm_version { vr11 = 0, vr12, vr13 }; > +enum vrm_version { vr11 = 0, vr12, vr13, imvp9, amd625mv }; > > struct pmbus_driver_info { > int pages; /* Total number of pages */ > diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c > index 98226e84b351..811819e41a72 100644 > --- a/drivers/hwmon/pmbus/pmbus_core.c > +++ b/drivers/hwmon/pmbus/pmbus_core.c > @@ -709,6 +709,14 @@ static long pmbus_reg2data_vid(struct pmbus_data *data, > if (val >= 0x01) > rv = 500 + (val - 1) * 10; > break; > + case imvp9: > + if (val >= 0x01) > + rv = 200 + (val - 1) * 10; > + break; > + case amd625mv: > + if (val >= 0x0 && val <= 0xd8) > + rv = DIV_ROUND_CLOSEST(155000 - val * 625, 100); > + break; > } > return rv; > }
On Mon, Jan 13, 2020 at 03:08:38PM +0000, Vadim Pasternak wrote: > Extends driver with support of the additional devices: > Texas Instruments Dual channel DCAP+ multiphase controllers: TPS53688. > > Extend Kconfig with added device. > > Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> Applied to hwmon-next. Thanks, Guenter > --- > drivers/hwmon/pmbus/Kconfig | 4 ++-- > drivers/hwmon/pmbus/tps53679.c | 2 ++ > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig > index 59859979571d..0dd30b07bf18 100644 > --- a/drivers/hwmon/pmbus/Kconfig > +++ b/drivers/hwmon/pmbus/Kconfig > @@ -200,10 +200,10 @@ config SENSORS_TPS40422 > be called tps40422. > > config SENSORS_TPS53679 > - tristate "TI TPS53679" > + tristate "TI TPS53679, TPS53688" > help > If you say yes here you get hardware monitoring support for TI > - TPS53679. > + TPS53679, TPS53688 > > This driver can also be built as a module. If so, the module will > be called tps53679. > diff --git a/drivers/hwmon/pmbus/tps53679.c b/drivers/hwmon/pmbus/tps53679.c > index 163e8c6aaa8e..9c22e9013dd7 100644 > --- a/drivers/hwmon/pmbus/tps53679.c > +++ b/drivers/hwmon/pmbus/tps53679.c > @@ -85,6 +85,7 @@ static int tps53679_probe(struct i2c_client *client, > > static const struct i2c_device_id tps53679_id[] = { > {"tps53679", 0}, > + {"tps53688", 0}, > {} > }; > > @@ -92,6 +93,7 @@ MODULE_DEVICE_TABLE(i2c, tps53679_id); > > static const struct of_device_id __maybe_unused tps53679_of_match[] = { > {.compatible = "ti,tps53679"}, > + {.compatible = "ti,tps53688"}, > {} > }; > MODULE_DEVICE_TABLE(of, tps53679_of_match);
On Mon, Jan 13, 2020 at 03:08:39PM +0000, Vadim Pasternak wrote: > Add support for devices XDPE12254, XDPE12284. > > All these device support two pages. > The below lists of VOUT_MODE command readout with their related VID > protocols, Digital to Analog Converter steps, supported by these > devices: > VR12.0 mode, 5-mV DAC - 0x01; > VR12.5 mode, 10-mV DAC - 0x02; > IMVP9 mode, 5-mV DAC - 0x03; > AMD mode 6.25mV - 0x10. > > Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> Applied to hwmon-next (with fix applied - see below). Thanks, Guenter > --- > RFC-v1: > Changes added by Vadim: > - Add format for current in; > - Extend functions for both pages with "PMBUS_HAVE_IIN", > "PMBUS_HAVE_PIN" and "PMBUS_HAVE_STATUS_INPUT". > - Drop others than xdpe12284, xdpe12254 devices, since there is not > clear confirmation from Infineon regarding availability of the > others. > --- > drivers/hwmon/pmbus/Kconfig | 9 ++++ > drivers/hwmon/pmbus/Makefile | 1 + > drivers/hwmon/pmbus/xdpe12284.c | 116 ++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 126 insertions(+) > create mode 100644 drivers/hwmon/pmbus/xdpe12284.c > > diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig > index 0dd30b07bf18..128e91de5209 100644 > --- a/drivers/hwmon/pmbus/Kconfig > +++ b/drivers/hwmon/pmbus/Kconfig > @@ -228,6 +228,15 @@ config SENSORS_UCD9200 > This driver can also be built as a module. If so, the module will > be called ucd9200. > > +config SENSORS_XDPE122 > + tristate "Infineon XDPE122 family" > + help > + If you say yes here you get hardware monitoring support for Infineon > + XDPE12254, XDPE12284, device. > + > + This driver can also be built as a module. If so, the module will > + be called xdpe12284. > + > config SENSORS_ZL6100 > tristate "Intersil ZL6100 and compatibles" > help > diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile > index 3f8c1014938b..5421fcc0a01c 100644 > --- a/drivers/hwmon/pmbus/Makefile > +++ b/drivers/hwmon/pmbus/Makefile > @@ -26,4 +26,5 @@ obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o > obj-$(CONFIG_SENSORS_TPS53679) += tps53679.o > obj-$(CONFIG_SENSORS_UCD9000) += ucd9000.o > obj-$(CONFIG_SENSORS_UCD9200) += ucd9200.o > +obj-$(CONFIG_SENSORS_XDPE122) += xdpe12284.o > obj-$(CONFIG_SENSORS_ZL6100) += zl6100.o > diff --git a/drivers/hwmon/pmbus/xdpe12284.c b/drivers/hwmon/pmbus/xdpe12284.c > new file mode 100644 > index 000000000000..cb03ce30a527 > --- /dev/null > +++ b/drivers/hwmon/pmbus/xdpe12284.c > @@ -0,0 +1,116 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Hardware monitoring driver for Infineon Multi-phase Digital VR Controllers > + * > + * Copyright (c) 2020 Mellanox Technologies. All rights reserved. > + */ > + > +#include <linux/err.h> > +#include <linux/i2c.h> > +#include <linux/init.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include "pmbus.h" > + > +#define XDPE122_PROT_VR12_5MV 0x01 /* VR12.0 mode, 5-mV DAC */ > +#define XDPE122_PROT_VR12_5_10MV 0x02 /* VR12.5 mode, 10-mV DAC */ > +#define XDPE122_PROT_IMVP9_10MV 0x03 /* IMVP9 mode, 10-mV DAC */ > +#define XDPE122_AMD_625MV 0x10 /* AMD mode 6.25mV */ > +#define XDPE122_PAGE_NUM 2 > + > +static int xdpe122_identify(struct i2c_client *client, > + struct pmbus_driver_info *info) > +{ > + u8 vout_params; > + int i, ret; > + > + for (i = 0; i < XDPE122_PAGE_NUM; i++) { > + /* Read the register with VOUT scaling value.*/ > + ret = pmbus_read_byte_data(client, i, PMBUS_VOUT_MODE); > + if (ret < 0) > + return ret; > + > + vout_params = ret & GENMASK(4, 0); > + > + switch (vout_params) { > + case XDPE122_PROT_VR12_5_10MV: > + info->vrm_version[i] = vr13; > + break; > + case XDPE122_PROT_VR12_5MV: > + info->vrm_version[i] = vr12; > + break; > + case XDPE122_PROT_IMVP9_10MV: > + info->vrm_version[i] = imvp9; break; > + case XDPE122_AMD_625MV: > + info->vrm_version[i] = amd625mv; > + break; > + default: > + return -EINVAL; > + } > + } > + > + return 0; > +} > + > +static struct pmbus_driver_info xdpe122_info = { > + .pages = XDPE122_PAGE_NUM, > + .format[PSC_VOLTAGE_IN] = linear, > + .format[PSC_VOLTAGE_OUT] = vid, > + .format[PSC_TEMPERATURE] = linear, > + .format[PSC_CURRENT_IN] = linear, > + .format[PSC_CURRENT_OUT] = linear, > + .format[PSC_POWER] = linear, > + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | > + PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | > + PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | > + PMBUS_HAVE_POUT | PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT, > + .func[1] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | > + PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | > + PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | > + PMBUS_HAVE_POUT | PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT, > + .identify = xdpe122_identify, > +}; > + > +static int xdpe122_probe(struct i2c_client *client, > + const struct i2c_device_id *id) > +{ > + struct pmbus_driver_info *info; > + > + info = devm_kmemdup(&client->dev, &xdpe122_info, sizeof(*info), > + GFP_KERNEL); > + if (!info) > + return -ENOMEM; > + > + return pmbus_do_probe(client, id, info); > +} > + > +static const struct i2c_device_id xdpe122_id[] = { > + {"xdpe12254", 0}, > + {"xdpe12284", 0}, > + {} > +}; > + > +MODULE_DEVICE_TABLE(i2c, xdpe122_id); > + > +static const struct of_device_id __maybe_unused xdpe122_of_match[] = { > + {.compatible = "infineon, xdpe12254"}, > + {.compatible = "infineon, xdpe12284"}, > + {} > +}; > +MODULE_DEVICE_TABLE(of, xdpe122_of_match); > + > +static struct i2c_driver xdpe122_driver = { > + .driver = { > + .name = "xdpe12284", > + .of_match_table = of_match_ptr(xdpe122_of_match), > + }, > + .probe = xdpe122_probe, > + .remove = pmbus_do_remove, > + .id_table = xdpe122_id, > +}; > + > +module_i2c_driver(xdpe122_driver); > + > +MODULE_AUTHOR("Vadim Pasternak <vadimp@mellanox.com>"); > +MODULE_DESCRIPTION("PMBus driver for Infineon XDPE122 family"); > +MODULE_LICENSE("GPL");
On Mon, Jan 13, 2020 at 03:08:41PM +0000, Vadim Pasternak wrote: > Add documentation for 'xdpe122' devices. > > Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> Applied to hwmon-next (and added to index.rst). Thanks, Guenter > --- > Documentation/hwmon/xdpe12284.rst | 101 ++++++++++++++++++++++++++++++++++++++ > 1 file changed, 101 insertions(+) > create mode 100644 Documentation/hwmon/xdpe12284.rst > > diff --git a/Documentation/hwmon/xdpe12284.rst b/Documentation/hwmon/xdpe12284.rst > new file mode 100644 > index 000000000000..6b7ae98cc536 > --- /dev/null > +++ b/Documentation/hwmon/xdpe12284.rst > @@ -0,0 +1,101 @@ > +.. SPDX-License-Identifier: GPL-2.0 > + > +Kernel driver xdpe122 > +===================== > + > +Supported chips: > + > + * Infineon XDPE12254 > + > + Prefix: 'xdpe12254' > + > + * Infineon XDPE12284 > + > + Prefix: 'xdpe12284' > + > +Authors: > + > + Vadim Pasternak <vadimp@mellanox.com> > + > +Description > +----------- > + > +This driver implements support for Infineon Multi-phase XDPE122 family > +dual loop voltage regulators. > +The family includes XDPE12284 and XDPE12254 devices. > +The devices from this family complaint with: > +- Intel VR13 and VR13HC rev 1.3, IMVP8 rev 1.2 and IMPVP9 rev 1.3 DC-DC > + converter specification. > +- Intel SVID rev 1.9. protocol. > +- PMBus rev 1.3 interface. > + > +Devices support linear format for reading input voltage, input and output current, > +input and output power and temperature. > +Device supports VID format for reading output voltage. The below modes are > +supported: > +- VR12.0 mode, 5-mV DAC - 0x01. > +- VR12.5 mode, 10-mV DAC - 0x02. > +- IMVP9 mode, 5-mV DAC - 0x03. > +- AMD mode 6.25mV - 0x10. > + > +Devices support two pages for telemetry. > + > +The driver provides for current: input, maximum and critical thresholds > +and maximum and critical alarms. Critical thresholds and critical alarm are > +supported only for current output. > +The driver exports the following attributes for via the sysfs files, where > +indexes 1, 2 are for "iin" and 3, 4 for "iout": > + > +**curr[3-4]_crit** > + > +**curr[3-4]_crit_alarm** > + > +**curr[1-4]_input** > + > +**curr[1-4]_label** > + > +**curr[1-4]_max** > + > +**curr[1-4]_max_alarm** > + > +The driver provides for voltage: input, critical and low critical thresholds > +and critical and low critical alarms. > +The driver exports the following attributes for via the sysfs files, where > +indexes 1, 2 are for "vin" and 3, 4 for "vout": > + > +**in[1-4]_crit** > + > +**in[1-4_crit_alarm** > + > +**in[1-4]_input** > + > +**in[1-4_label** > + > +**in[1-4]_lcrit** > + > +**in[1-41_lcrit_alarm** > + > +The driver provides for power: input and alarms. Power alarm is supported only > +for power input. > +The driver exports the following attributes for via the sysfs files, where > +indexes 1, 2 are for "pin" and 3, 4 for "pout": > + > +**power[1-2]_alarm** > + > +**power[1-4]_input** > + > +**power[1-4]_label** > + > +The driver provides for temperature: input, maximum and critical thresholds > +and maximum and critical alarms. > +The driver exports the following attributes for via the sysfs files: > + > +**temp[1-2]_crit** > + > +**temp[1-2]_crit_alarm** > + > +**temp[1-2]_input** > + > +**temp[1-2]_max** > + > +**temp[1-2]_max_alarm**
On Mon, 13 Jan 2020 15:08:40 +0000, Vadim Pasternak wrote:
> Add Texas Instruments Dual channel DCAP+ multiphase controllers:
> TPS53679, TPS53688, and Infineon Multi-phase Digital VR controllers
> XDPE12284, XDPE12254 as trivial devices.
>
> Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
> ---
> RFC-v1:
> Changes added by Vadim:
> - Drop others than xdpe12284, xdpe12254 devices, since there is not
> clear confirmation from Infineon regarding availability of the
> others.
> ---
> Documentation/devicetree/bindings/trivial-devices.yaml | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
Applied, thanks.
Rob