1- From 984090311edebbf7f3b246230f567847540b66bd Mon Sep 17 00:00:00 2001
1+ From 102d4beb0d3813ea47699eab05c1494520ac971a Mon Sep 17 00:00:00 2001
22From: Vadim Pasternak <vadimp@nvidia.com>
33Date: Wed, 14 Jan 2026 19:19:20 +0200
44Subject: [PATCH backport 6.1 1/1] hwmon:(pmbus/xdpe1a2g7b) XDPE1A2G7B Digital
@@ -9,12 +9,12 @@ Controller.
99
1010Signed-off-by: Ashish Yadav <ashish.yadav@infineon.com>
1111---
12- drivers/hwmon/pmbus/Kconfig | 9 + ++
13- drivers/hwmon/pmbus/Makefile | 1 +
14- drivers/hwmon/pmbus/pmbus.h | 2 +-
15- drivers/hwmon/pmbus/pmbus_core.c | 4 + +
16- drivers/hwmon/pmbus/xdpe1a2g7b.c | 97 + +++++++++++++++++++++++++++++++
17- 5 files changed, 112 insertions(+), 1 deletion(-)
12+ drivers/hwmon/pmbus/Kconfig | 9 ++
13+ drivers/hwmon/pmbus/Makefile | 1 +
14+ drivers/hwmon/pmbus/pmbus.h | 2 +-
15+ drivers/hwmon/pmbus/pmbus_core.c | 4 +
16+ drivers/hwmon/pmbus/xdpe1a2g7b.c | 109 +++++++++++++++++++++++++++++++
17+ 5 files changed, 124 insertions(+), 1 deletion(-)
1818 create mode 100644 drivers/hwmon/pmbus/xdpe1a2g7b.c
1919
2020diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig
@@ -78,11 +78,11 @@ index 4b73c7b27..43502f730 100644
7878 }
7979diff --git a/drivers/hwmon/pmbus/xdpe1a2g7b.c b/drivers/hwmon/pmbus/xdpe1a2g7b.c
8080new file mode 100644
81- index 000000000..c7e230dc8
81+ index 000000000..fccca5a8a
8282--- /dev/null
8383+++ b/drivers/hwmon/pmbus/xdpe1a2g7b.c
84- @@ -0,0 +1,97 @@
85- + // SPDX-License-Identifier: GPL-2.0+
84+ @@ -0,0 +1,109 @@
85+ + // SPDX-License-Identifier: GPL-2.0
8686+ /*
8787+ * Hardware monitoring driver for Infineon Multi-phase Digital VR Controllers
8888+ *
@@ -97,30 +97,27 @@ index 000000000..c7e230dc8
9797+ #include "pmbus.h"
9898+
9999+ #define XDPE1A2G7B_PAGE_NUM 2
100- + #define XDPE122_NVIDIA_195MV 0x1E /* NVIDIA mode 1.95mV */
101- +
102- + static struct pmbus_driver_info xdpe1a2g7b_info = {
103- + .pages = XDPE1A2G7B_PAGE_NUM,
104- + .format[PSC_VOLTAGE_IN] = linear,
105- + .format[PSC_VOLTAGE_OUT] = vid,
106- + .format[PSC_TEMPERATURE] = linear,
107- + .format[PSC_CURRENT_IN] = linear,
108- + .format[PSC_CURRENT_OUT] = linear,
109- + .format[PSC_POWER] = linear,
110- + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT |
111- + PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT |
112- + PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP |
113- + PMBUS_HAVE_POUT | PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT,
114- + .func[1] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT |
115- + PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT |
116- + PMBUS_HAVE_POUT | PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT,
117- + };
100+ + #define XDPE1A2G7B_NVIDIA_195MV 0x1E /* NVIDIA mode 1.95mV, VID step is 5mV */
118101+
119102+ static int xdpe1a2g7b_identify(struct i2c_client *client,
120103+ struct pmbus_driver_info *info)
121104+ {
122105+ u8 vout_params;
123- + int i, ret;
106+ + int i, ret, vout_mode;
107+ +
108+ + vout_mode = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE);
109+ + if (vout_mode >= 0 && vout_mode != 0xff) {
110+ + switch (vout_mode >> 5) {
111+ + case 0:
112+ + info->format[PSC_VOLTAGE_OUT] = linear;
113+ + return 0;
114+ + case 1:
115+ + info->format[PSC_VOLTAGE_OUT] = vid;
116+ + break;
117+ + default:
118+ + return -ENODEV;
119+ + }
120+ + }
124121+
125122+ for (i = 0; i < info->pages; i++) {
126123+ /* Read the register with VOUT for VID Code Type. */
@@ -129,9 +126,8 @@ index 000000000..c7e230dc8
129126+ return ret;
130127+
131128+ vout_params = ret & GENMASK(4, 0);
132- +
133129+ switch (vout_params) {
134- + case XDPE122_NVIDIA_195MV :
130+ + case XDPE1A2G7B_NVIDIA_195MV :
135131+ info->vrm_version[i] = nvidia195mv;
136132+ break;
137133+ default:
@@ -142,6 +138,23 @@ index 000000000..c7e230dc8
142138+ return 0;
143139+ }
144140+
141+ + static struct pmbus_driver_info xdpe1a2g7b_info = {
142+ + .pages = XDPE1A2G7B_PAGE_NUM,
143+ + .identify = xdpe1a2g7b_identify,
144+ + .format[PSC_VOLTAGE_IN] = linear,
145+ + .format[PSC_TEMPERATURE] = linear,
146+ + .format[PSC_CURRENT_IN] = linear,
147+ + .format[PSC_CURRENT_OUT] = linear,
148+ + .format[PSC_POWER] = linear,
149+ + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT |
150+ + PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT |
151+ + PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP |
152+ + PMBUS_HAVE_POUT | PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT,
153+ + .func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_IIN |
154+ + PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_PIN |
155+ + PMBUS_HAVE_POUT | PMBUS_HAVE_STATUS_INPUT,
156+ + };
157+ +
145158+ static int xdpe1a2g7b_probe(struct i2c_client *client)
146159+ {
147160+ struct pmbus_driver_info *info;
@@ -151,8 +164,6 @@ index 000000000..c7e230dc8
151164+ if (!info)
152165+ return -ENOMEM;
153166+
154- + info->identify = xdpe1a2g7b_identify;
155- +
156167+ return pmbus_do_probe(client, info);
157168+ }
158169+
@@ -179,6 +190,7 @@ index 000000000..c7e230dc8
179190+ MODULE_DESCRIPTION("PMBus driver for Infineon XDPE1A2G7B");
180191+ MODULE_LICENSE("GPL");
181192+ MODULE_IMPORT_NS(PMBUS);
193+ +
182194- -
1831952.34.1
184196
0 commit comments