linux-hwmon.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH hwmon-next v1 0/6] hwmon: (pmbus) Add support for vid mode calculation per page bases
@ 2020-01-13 15:08 Vadim Pasternak
  2020-01-13 15:08 ` [PATCH hwmon-next v1 1/6] hwmon: (pmbus/core) Add support for vid mode detection " Vadim Pasternak
                   ` (5 more replies)
  0 siblings, 6 replies; 14+ messages in thread
From: Vadim Pasternak @ 2020-01-13 15:08 UTC (permalink / raw)
  To: linux, robh+dt, vijaykhemka; +Cc: linux-hwmon, devicetree, Vadim Pasternak

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


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH hwmon-next v1 1/6] hwmon: (pmbus/core) Add support for vid mode detection per page bases
  2020-01-13 15:08 [PATCH hwmon-next v1 0/6] hwmon: (pmbus) Add support for vid mode calculation per page bases Vadim Pasternak
@ 2020-01-13 15:08 ` Vadim Pasternak
  2020-01-14 14:06   ` Guenter Roeck
  2020-01-13 15:08 ` [PATCH hwmon-next v1 2/6] hwmon: (pmbus/core) Add support for Intel IMVP9 and AMD 6.25mV modes Vadim Pasternak
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Vadim Pasternak @ 2020-01-13 15:08 UTC (permalink / raw)
  To: linux, robh+dt, vijaykhemka; +Cc: linux-hwmon, devicetree, Vadim Pasternak

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


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH hwmon-next v1 2/6] hwmon: (pmbus/core) Add support for Intel IMVP9 and AMD 6.25mV modes
  2020-01-13 15:08 [PATCH hwmon-next v1 0/6] hwmon: (pmbus) Add support for vid mode calculation per page bases Vadim Pasternak
  2020-01-13 15:08 ` [PATCH hwmon-next v1 1/6] hwmon: (pmbus/core) Add support for vid mode detection " Vadim Pasternak
@ 2020-01-13 15:08 ` Vadim Pasternak
  2020-01-14 14:06   ` Guenter Roeck
  2020-01-13 15:08 ` [PATCH hwmon-next v1 3/6] hwmon: (pmbus/tps53679) Extend device list supported by driver Vadim Pasternak
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Vadim Pasternak @ 2020-01-13 15:08 UTC (permalink / raw)
  To: linux, robh+dt, vijaykhemka; +Cc: linux-hwmon, devicetree, Vadim Pasternak

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


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH hwmon-next v1 3/6] hwmon: (pmbus/tps53679) Extend device list supported by driver
  2020-01-13 15:08 [PATCH hwmon-next v1 0/6] hwmon: (pmbus) Add support for vid mode calculation per page bases Vadim Pasternak
  2020-01-13 15:08 ` [PATCH hwmon-next v1 1/6] hwmon: (pmbus/core) Add support for vid mode detection " Vadim Pasternak
  2020-01-13 15:08 ` [PATCH hwmon-next v1 2/6] hwmon: (pmbus/core) Add support for Intel IMVP9 and AMD 6.25mV modes Vadim Pasternak
@ 2020-01-13 15:08 ` Vadim Pasternak
  2020-01-14 14:07   ` Guenter Roeck
  2020-01-13 15:08 ` [PATCH hwmon-next v1 4/6] hwmon: (pmbus) Add support for Infineon Multi-phase xdpe122 family controllers Vadim Pasternak
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Vadim Pasternak @ 2020-01-13 15:08 UTC (permalink / raw)
  To: linux, robh+dt, vijaykhemka; +Cc: linux-hwmon, devicetree, Vadim Pasternak

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


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH hwmon-next v1 4/6] hwmon: (pmbus) Add support for Infineon Multi-phase xdpe122 family controllers
  2020-01-13 15:08 [PATCH hwmon-next v1 0/6] hwmon: (pmbus) Add support for vid mode calculation per page bases Vadim Pasternak
                   ` (2 preceding siblings ...)
  2020-01-13 15:08 ` [PATCH hwmon-next v1 3/6] hwmon: (pmbus/tps53679) Extend device list supported by driver Vadim Pasternak
@ 2020-01-13 15:08 ` Vadim Pasternak
  2020-01-14 14:08   ` Guenter Roeck
  2020-01-13 15:08 ` [PATCH hwmon-next v1 5/6] dt-bindings: Add TI and Infineon VR Controllers as trivial devices Vadim Pasternak
  2020-01-13 15:08 ` [PATCH hwmon-next v1 6/6] docs: hwmon: Include 'xdpe12284.rst' into docs Vadim Pasternak
  5 siblings, 1 reply; 14+ messages in thread
From: Vadim Pasternak @ 2020-01-13 15:08 UTC (permalink / raw)
  To: linux, robh+dt, vijaykhemka; +Cc: linux-hwmon, devicetree, Vadim Pasternak

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


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH hwmon-next v1 5/6] dt-bindings: Add TI and Infineon VR Controllers as trivial devices
  2020-01-13 15:08 [PATCH hwmon-next v1 0/6] hwmon: (pmbus) Add support for vid mode calculation per page bases Vadim Pasternak
                   ` (3 preceding siblings ...)
  2020-01-13 15:08 ` [PATCH hwmon-next v1 4/6] hwmon: (pmbus) Add support for Infineon Multi-phase xdpe122 family controllers Vadim Pasternak
@ 2020-01-13 15:08 ` Vadim Pasternak
  2020-01-14 14:04   ` Guenter Roeck
  2020-01-15 16:05   ` Rob Herring
  2020-01-13 15:08 ` [PATCH hwmon-next v1 6/6] docs: hwmon: Include 'xdpe12284.rst' into docs Vadim Pasternak
  5 siblings, 2 replies; 14+ messages in thread
From: Vadim Pasternak @ 2020-01-13 15:08 UTC (permalink / raw)
  To: linux, robh+dt, vijaykhemka; +Cc: linux-hwmon, devicetree, Vadim Pasternak

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


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH hwmon-next v1 6/6] docs: hwmon: Include 'xdpe12284.rst' into docs
  2020-01-13 15:08 [PATCH hwmon-next v1 0/6] hwmon: (pmbus) Add support for vid mode calculation per page bases Vadim Pasternak
                   ` (4 preceding siblings ...)
  2020-01-13 15:08 ` [PATCH hwmon-next v1 5/6] dt-bindings: Add TI and Infineon VR Controllers as trivial devices Vadim Pasternak
@ 2020-01-13 15:08 ` Vadim Pasternak
  2020-01-14 14:08   ` Guenter Roeck
  5 siblings, 1 reply; 14+ messages in thread
From: Vadim Pasternak @ 2020-01-13 15:08 UTC (permalink / raw)
  To: linux, robh+dt, vijaykhemka; +Cc: linux-hwmon, devicetree, Vadim Pasternak

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


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH hwmon-next v1 5/6] dt-bindings: Add TI and Infineon VR Controllers as trivial devices
  2020-01-13 15:08 ` [PATCH hwmon-next v1 5/6] dt-bindings: Add TI and Infineon VR Controllers as trivial devices Vadim Pasternak
@ 2020-01-14 14:04   ` Guenter Roeck
  2020-01-15 16:05   ` Rob Herring
  1 sibling, 0 replies; 14+ messages in thread
From: Guenter Roeck @ 2020-01-14 14:04 UTC (permalink / raw)
  To: Vadim Pasternak; +Cc: robh+dt, vijaykhemka, linux-hwmon, devicetree

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)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH hwmon-next v1 1/6] hwmon: (pmbus/core) Add support for vid mode detection per page bases
  2020-01-13 15:08 ` [PATCH hwmon-next v1 1/6] hwmon: (pmbus/core) Add support for vid mode detection " Vadim Pasternak
@ 2020-01-14 14:06   ` Guenter Roeck
  0 siblings, 0 replies; 14+ messages in thread
From: Guenter Roeck @ 2020-01-14 14:06 UTC (permalink / raw)
  To: Vadim Pasternak; +Cc: robh+dt, vijaykhemka, linux-hwmon, devicetree

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;

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH hwmon-next v1 2/6] hwmon: (pmbus/core) Add support for Intel IMVP9 and AMD 6.25mV modes
  2020-01-13 15:08 ` [PATCH hwmon-next v1 2/6] hwmon: (pmbus/core) Add support for Intel IMVP9 and AMD 6.25mV modes Vadim Pasternak
@ 2020-01-14 14:06   ` Guenter Roeck
  0 siblings, 0 replies; 14+ messages in thread
From: Guenter Roeck @ 2020-01-14 14:06 UTC (permalink / raw)
  To: Vadim Pasternak; +Cc: robh+dt, vijaykhemka, linux-hwmon, devicetree

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;
>  }

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH hwmon-next v1 3/6] hwmon: (pmbus/tps53679) Extend device list supported by driver
  2020-01-13 15:08 ` [PATCH hwmon-next v1 3/6] hwmon: (pmbus/tps53679) Extend device list supported by driver Vadim Pasternak
@ 2020-01-14 14:07   ` Guenter Roeck
  0 siblings, 0 replies; 14+ messages in thread
From: Guenter Roeck @ 2020-01-14 14:07 UTC (permalink / raw)
  To: Vadim Pasternak; +Cc: robh+dt, vijaykhemka, linux-hwmon, devicetree

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);

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH hwmon-next v1 4/6] hwmon: (pmbus) Add support for Infineon Multi-phase xdpe122 family controllers
  2020-01-13 15:08 ` [PATCH hwmon-next v1 4/6] hwmon: (pmbus) Add support for Infineon Multi-phase xdpe122 family controllers Vadim Pasternak
@ 2020-01-14 14:08   ` Guenter Roeck
  0 siblings, 0 replies; 14+ messages in thread
From: Guenter Roeck @ 2020-01-14 14:08 UTC (permalink / raw)
  To: Vadim Pasternak; +Cc: robh+dt, vijaykhemka, linux-hwmon, devicetree

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");

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH hwmon-next v1 6/6] docs: hwmon: Include 'xdpe12284.rst' into docs
  2020-01-13 15:08 ` [PATCH hwmon-next v1 6/6] docs: hwmon: Include 'xdpe12284.rst' into docs Vadim Pasternak
@ 2020-01-14 14:08   ` Guenter Roeck
  0 siblings, 0 replies; 14+ messages in thread
From: Guenter Roeck @ 2020-01-14 14:08 UTC (permalink / raw)
  To: Vadim Pasternak; +Cc: robh+dt, vijaykhemka, linux-hwmon, devicetree

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**

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH hwmon-next v1 5/6] dt-bindings: Add TI and Infineon VR Controllers as trivial devices
  2020-01-13 15:08 ` [PATCH hwmon-next v1 5/6] dt-bindings: Add TI and Infineon VR Controllers as trivial devices Vadim Pasternak
  2020-01-14 14:04   ` Guenter Roeck
@ 2020-01-15 16:05   ` Rob Herring
  1 sibling, 0 replies; 14+ messages in thread
From: Rob Herring @ 2020-01-15 16:05 UTC (permalink / raw)
  To: Vadim Pasternak
  Cc: linux, robh+dt, vijaykhemka, linux-hwmon, devicetree, Vadim Pasternak

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2020-01-15 16:05 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-13 15:08 [PATCH hwmon-next v1 0/6] hwmon: (pmbus) Add support for vid mode calculation per page bases Vadim Pasternak
2020-01-13 15:08 ` [PATCH hwmon-next v1 1/6] hwmon: (pmbus/core) Add support for vid mode detection " Vadim Pasternak
2020-01-14 14:06   ` Guenter Roeck
2020-01-13 15:08 ` [PATCH hwmon-next v1 2/6] hwmon: (pmbus/core) Add support for Intel IMVP9 and AMD 6.25mV modes Vadim Pasternak
2020-01-14 14:06   ` Guenter Roeck
2020-01-13 15:08 ` [PATCH hwmon-next v1 3/6] hwmon: (pmbus/tps53679) Extend device list supported by driver Vadim Pasternak
2020-01-14 14:07   ` Guenter Roeck
2020-01-13 15:08 ` [PATCH hwmon-next v1 4/6] hwmon: (pmbus) Add support for Infineon Multi-phase xdpe122 family controllers Vadim Pasternak
2020-01-14 14:08   ` Guenter Roeck
2020-01-13 15:08 ` [PATCH hwmon-next v1 5/6] dt-bindings: Add TI and Infineon VR Controllers as trivial devices Vadim Pasternak
2020-01-14 14:04   ` Guenter Roeck
2020-01-15 16:05   ` Rob Herring
2020-01-13 15:08 ` [PATCH hwmon-next v1 6/6] docs: hwmon: Include 'xdpe12284.rst' into docs Vadim Pasternak
2020-01-14 14:08   ` Guenter Roeck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).