linux-hwmon.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Add driver for Infineon TDA38740/TDA38725
@ 2026-09-07  3:28 Colin Huang
  2026-09-07  3:28 ` [PATCH 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 Colin Huang
  2026-09-07  3:28 ` [PATCH 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang
  0 siblings, 2 replies; 5+ messages in thread
From: Colin Huang @ 2026-09-07  3:28 UTC (permalink / raw)
  To: Guenter Roeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley
  Cc: linux-hwmon, devicetree, linux-kernel, colin.huang2, Colin Huang

Signed-off-by: Colin Huang <u8813345@gmail.com>
---
Colin Huang (2):
      dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725
      hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725

 .../bindings/hwmon/pmbus/infineon,tda38740.yaml    | 79 +++++++++++++++++
 drivers/hwmon/pmbus/Kconfig                        |  9 ++
 drivers/hwmon/pmbus/Makefile                       |  1 +
 drivers/hwmon/pmbus/tda38740.c                     | 98 ++++++++++++++++++++++
 4 files changed, 187 insertions(+)
---
base-commit: ba08432bda66a7889d8f3d1581dabf10f59b25eb
change-id: 20260903-add-tda38740-and-tda38725-32bbb097d41e

Best regards,
-- 
Colin Huang <u8813345@gmail.com>


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

* [PATCH 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725
  2026-09-07  3:28 [PATCH 0/2] Add driver for Infineon TDA38740/TDA38725 Colin Huang
@ 2026-09-07  3:28 ` Colin Huang
  2026-09-07  3:33   ` sashiko-bot
  2026-09-07  3:28 ` [PATCH 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang
  1 sibling, 1 reply; 5+ messages in thread
From: Colin Huang @ 2026-09-07  3:28 UTC (permalink / raw)
  To: Guenter Roeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley
  Cc: linux-hwmon, devicetree, linux-kernel, colin.huang2, Colin Huang

From: Colin Huang <u8813345@gmail.com>

Add devicetree bindings for the Infineon TDA38740 and TDA38725
single-voltage synchronous buck regulators with PMBus interface.

Signed-off-by: Colin Huang <u8813345@gmail.com>
---
 .../bindings/hwmon/pmbus/infineon,tda38740.yaml    | 79 ++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml b/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml
new file mode 100644
index 000000000000..02380c09c5f5
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml
@@ -0,0 +1,79 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+
+$id: https://devicetree.org/schemas/hwmon/pmbus/infineon,tda38740.yaml#
+$schema: https://devicetree.org/meta-schemas/core.yaml#
+
+title: Infineon TDA38740 and TDA38725 PMBus Synchronous Buck Regulator
+
+description: |
+  The Infineon TDA38740/TDA38725 is a 40A/25A single-voltage synchronous
+  buck regulator with a PMBus interface designed for industrial use.
+
+  Datasheet:
+  https://www.infineon.com/row/public/documents/24/49/infineon-tda38740-tda38725-datasheet-en.pdf
+
+properties:
+  compatible:
+    enum:
+      - infineon,tda38725
+      - infineon,tda38740
+
+  reg:
+    maxItems: 1
+
+  infineon,vout-scale-micro:
+    description: |
+      Scaling factor applied to READ_VOUT telemetry.
+
+      TDA38740/25 pin strap parts are available in two flavors of
+      VOUT_SCALE_LOOP: 1:1 and 1:2.
+
+      For the 1:1 VOUT_SCALE_LOOP version, output voltage sense pins are
+      directly connected to the output, and no resistor divider is used.
+
+      For the 1:2 version, a resistor divider is typically used (for example,
+      499 ohms for both top and bottom resistors).
+
+      In some designs, users intentionally modify the feedback divider ratio
+      to obtain an output voltage different from the internally configured
+      VBOOT or VOUT value.
+
+      In such cases, the device telemetry (READ_VOUT) continues to report
+      the internally programmed voltage and does not reflect the actual
+      externally adjusted output voltage.
+
+      This property provides a multiplier to scale the reported telemetry
+      value so that the monitoring system reflects the actual output voltage.
+
+      The value shall be expressed in micro units where 1,000,000 represents
+      a scaling factor of 1.0.
+
+      Example:
+        If actual Vout = 0.75V and READ_VOUT reports 0.7V:
+        scaling factor = 0.75 / 0.7 = 1.071
+        value = 1071000
+    $ref: /schemas/types.yaml#/definitions/uint32
+    minimum: 100000
+    maximum: 2000000
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        sensor@40 {
+            compatible = "infineon,tda38740";
+            reg = <0x40>;
+            infineon,vout-scale-micro = <1071000>;
+        };
+    };
+

-- 
2.34.1


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

* [PATCH 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725
  2026-09-07  3:28 [PATCH 0/2] Add driver for Infineon TDA38740/TDA38725 Colin Huang
  2026-09-07  3:28 ` [PATCH 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 Colin Huang
@ 2026-09-07  3:28 ` Colin Huang
  2026-09-07  3:34   ` sashiko-bot
  1 sibling, 1 reply; 5+ messages in thread
From: Colin Huang @ 2026-09-07  3:28 UTC (permalink / raw)
  To: Guenter Roeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley
  Cc: linux-hwmon, devicetree, linux-kernel, colin.huang2, Colin Huang

From: Colin Huang <u8813345@gmail.com>

Add a PMBus driver for Infineon TDA38740 and TDA38725
single-voltage synchronous buck regulators.

Signed-off-by: Colin Huang <u8813345@gmail.com>
---
 drivers/hwmon/pmbus/Kconfig    |  9 ++++
 drivers/hwmon/pmbus/Makefile   |  1 +
 drivers/hwmon/pmbus/tda38740.c | 98 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 108 insertions(+)

diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig
index bcfdc4ce4c10..e4ca80dd0574 100644
--- a/drivers/hwmon/pmbus/Kconfig
+++ b/drivers/hwmon/pmbus/Kconfig
@@ -763,6 +763,15 @@ config SENSORS_TDA38640_REGULATOR
 	  If you say yes here you get regulator support for Infineon
 	  TDA38640 as regulator.
 
+config SENSORS_TDA38740
+	tristate "Infineon TDA38725/TDA38740"
+	help
+	  If you say yes here you get hardware monitoring support for Infineon
+	  TDA38725 and TDA38740.
+
+	  This driver can also be built as a module. If so, the module will
+	  be called tda38740.
+
 config SENSORS_TPS25990
 	tristate "TI TPS25990"
 	help
diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile
index e288fe72a437..eb06d47816fd 100644
--- a/drivers/hwmon/pmbus/Makefile
+++ b/drivers/hwmon/pmbus/Makefile
@@ -70,6 +70,7 @@ obj-$(CONFIG_SENSORS_STEF48H28)	+= stef48h28.o
 obj-$(CONFIG_SENSORS_SQ24860)	+= sq24860.o
 obj-$(CONFIG_SENSORS_STPDDC60)	+= stpddc60.o
 obj-$(CONFIG_SENSORS_TDA38640)	+= tda38640.o
+obj-$(CONFIG_SENSORS_TDA38740)	+= tda38740.o
 obj-$(CONFIG_SENSORS_TPS25990)	+= tps25990.o
 obj-$(CONFIG_SENSORS_TPS40422)	+= tps40422.o
 obj-$(CONFIG_SENSORS_TPS53679)	+= tps53679.o
diff --git a/drivers/hwmon/pmbus/tda38740.c b/drivers/hwmon/pmbus/tda38740.c
new file mode 100644
index 000000000000..4217a5a9ee66
--- /dev/null
+++ b/drivers/hwmon/pmbus/tda38740.c
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Hardware monitoring driver for Infineon TDA38725/TDA38740
+ *
+ * Copyright (c) 2023 9elements GmbH
+ *
+ */
+
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include "pmbus.h"
+
+struct tda38740_data {
+	struct pmbus_driver_info info;
+};
+
+/*
+ * TDA38725/TDA38740 only support Linear format for VOUT related commands,
+ * with exponents in the range of -8 to -12 (see datasheet VOUT_MODE
+ * description). Direct format is not supported by this device.
+ */
+static int tda38740_identify(struct i2c_client *client,
+			     struct pmbus_driver_info *info)
+{
+	int vout_mode;
+
+	vout_mode = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE);
+	if (vout_mode < 0 || vout_mode == 0xff)
+		return vout_mode < 0 ? vout_mode : -ENODEV;
+
+	if ((vout_mode >> 5) != 0)
+		return -ENODEV;
+
+	info->format[PSC_VOLTAGE_OUT] = linear;
+
+	return 0;
+}
+
+static struct pmbus_driver_info tda38740_info = {
+	.pages = 1,
+	.format[PSC_VOLTAGE_IN] = linear,
+	.format[PSC_CURRENT_OUT] = linear,
+	.format[PSC_CURRENT_IN] = linear,
+	.format[PSC_POWER] = linear,
+	.format[PSC_TEMPERATURE] = linear,
+	.func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT
+	    | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP
+	    | PMBUS_HAVE_IIN
+	    | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT
+	    | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT
+	    | PMBUS_HAVE_POUT | PMBUS_HAVE_PIN,
+	.identify = tda38740_identify,
+};
+
+static int tda38740_probe(struct i2c_client *client)
+{
+	struct tda38740_data *data;
+
+	data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
+	if (!data)
+		return -ENOMEM;
+	memcpy(&data->info, &tda38740_info, sizeof(tda38740_info));
+
+	return pmbus_do_probe(client, &data->info);
+}
+
+static const struct i2c_device_id tda38740_id[] = {
+	{"tda38725"},
+	{"tda38740"},
+	{}
+};
+MODULE_DEVICE_TABLE(i2c, tda38740_id);
+
+static const struct of_device_id __maybe_unused tda38740_of_match[] = {
+	{ .compatible = "infineon,tda38725"},
+	{ .compatible = "infineon,tda38740"},
+	{ },
+};
+MODULE_DEVICE_TABLE(of, tda38740_of_match);
+
+/* This is the driver that will be inserted */
+static struct i2c_driver tda38740_driver = {
+	.driver = {
+		.name = "tda38740",
+		.of_match_table = of_match_ptr(tda38740_of_match),
+	},
+	.probe = tda38740_probe,
+	.id_table = tda38740_id,
+};
+
+module_i2c_driver(tda38740_driver);
+
+MODULE_DESCRIPTION("PMBus driver for Infineon TDA38725/TDA38740");
+MODULE_LICENSE("GPL");
+MODULE_IMPORT_NS("PMBUS");

-- 
2.34.1


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

* Re: [PATCH 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725
  2026-09-07  3:28 ` [PATCH 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 Colin Huang
@ 2026-09-07  3:33   ` sashiko-bot
  0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-09-07  3:33 UTC (permalink / raw)
  To: Colin Huang; +Cc: linux-hwmon, robh, devicetree, conor+dt

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] The `$id` and `$schema` properties use the `https://` protocol instead of the required `http://` prefix.
- [Low] The mandatory `maintainers` property is missing from the top-level schema.
--

commit 394e1f6fb8099cdca94075856e1923221cb81dae
Author: Colin Huang <u8813345@gmail.com>

dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725

This commit adds devicetree bindings for the Infineon TDA38740 and
TDA38725 synchronous buck regulators. The hardware uses a PMBus interface
and the binding documents custom properties such as vout scaling.

> diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml b/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml
> new file mode 100644
> index 0000000000000..02380c09c5f55
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml
> @@ -0,0 +1,79 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +
> +$id: https://devicetree.org/schemas/hwmon/pmbus/infineon,tda38740.yaml#
> +$schema: https://devicetree.org/meta-schemas/core.yaml#

[Severity: Medium]
Does using the https:// protocol instead of http:// for the $id and $schema
fields break the schema cross-reference system? Modern dt-schema validation
tools rely on exact string matches for these URIs, and an incorrect prefix
might cause dt_binding_check to report misleading errors or silently skip
validation.

> +
> +title: Infineon TDA38740 and TDA38725 PMBus Synchronous Buck Regulator

[Severity: Low]
Is the mandatory maintainers property missing from the top-level schema?
Device tree schema files validated against core.yaml are required to specify
a maintainers array (typically right after the title or description), and
omitting it will likely cause dt_binding_check to report a validation
failure.

[ ... ]

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260907-add-tda38740-and-tda38725-v1-0-e2db1b2566b1@gmail.com?part=1

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

* Re: [PATCH 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725
  2026-09-07  3:28 ` [PATCH 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang
@ 2026-09-07  3:34   ` sashiko-bot
  0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-09-07  3:34 UTC (permalink / raw)
  To: Colin Huang; +Cc: devicetree, linux-hwmon, robh, conor+dt

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] The i2c_device_id array uses unnamed (positional) initializers, violating the I2C subsystem guidelines.
--

commit eb4e8412377fc06c23e75ea2aa72286755317004
Author: Colin Huang <u8813345@gmail.com>

hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725

This commit adds a new PMBus driver for the Infineon TDA38740 and TDA38725
single-voltage synchronous buck regulators.

> diff --git a/drivers/hwmon/pmbus/tda38740.c b/drivers/hwmon/pmbus/tda38740.c
> new file mode 100644
> index 0000000000000..4217a5a9ee661
> --- /dev/null
> +++ b/drivers/hwmon/pmbus/tda38740.c

[ ... ]

> +static int tda38740_probe(struct i2c_client *client)
> +{
> +	struct tda38740_data *data;
> +
> +	data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
> +	if (!data)
> +		return -ENOMEM;
> +	memcpy(&data->info, &tda38740_info, sizeof(tda38740_info));
> +
> +	return pmbus_do_probe(client, &data->info);
> +}
> +
> +static const struct i2c_device_id tda38740_id[] = {
> +	{"tda38725"},
> +	{"tda38740"},
> +	{}
> +};

[Severity: Low]
Could we update this i2c_device_id array to use C99 named initializers? The
I2C subsystem guidelines mandate the use of named initializers for initialized
arrays of type struct i2c_device_id.

> +MODULE_DEVICE_TABLE(i2c, tda38740_id);

[ ... ]

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260907-add-tda38740-and-tda38725-v1-0-e2db1b2566b1@gmail.com?part=2

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

end of thread, other threads:[~2026-09-07  3:34 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-07  3:28 [PATCH 0/2] Add driver for Infineon TDA38740/TDA38725 Colin Huang
2026-09-07  3:28 ` [PATCH 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 Colin Huang
2026-09-07  3:33   ` sashiko-bot
2026-09-07  3:28 ` [PATCH 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang
2026-09-07  3:34   ` sashiko-bot

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