* [PATCH v4 0/2] Add driver for Infineon TDA38740/TDA38725
@ 2026-09-10 12:35 Colin Huang
2026-09-10 12:35 ` [PATCH v4 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 Colin Huang
2026-09-10 12:35 ` [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang
0 siblings, 2 replies; 7+ messages in thread
From: Colin Huang @ 2026-09-10 12:35 UTC (permalink / raw)
To: Guenter Roeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Jonathan Corbet, Shuah Khan, Randy Dunlap
Cc: linux-hwmon, devicetree, linux-kernel, colin.huang2, linux-doc,
Colin Huang
Signed-off-by: Colin Huang <u8813345@gmail.com>
---
Changes in v4:
- Fix the DT binding so that compatible only enumerates the valid
hardware variants and does not imply a preferred or fallback
selection policy.
- Remove the vout-scale-micro property and related code.
- Rename the example node to reflect the regulator function.
- Link to v3: https://lore.kernel.org/r/20260910-add-tda38740-and-tda38725-v3-0-3e87637da3d6@gmail.com
Changes in v3:
- Clarify that TDA38725 and TDA38740 share the same PMBus programming
model, with infineon,tda38740 as the preferred compatible string and
infineon,tda38725 as a compatibility alias.
- The optional VOUT scaling property with a documented default
value of 1.0 to support devices that require output-voltage scaling.
- Update the driver to apply the scaling for READ_VOUT.
- Link to v2: https://lore.kernel.org/r/20260907-add-tda38740-and-tda38725-v2-0-1d051d63aa01@gmail.com
Changes in v2:
- Use standard http:// URIs for $id and $schema
- Add maintainers section.
- Use C99 named initializers.
- Link to v1: https://lore.kernel.org/r/20260907-add-tda38740-and-tda38725-v1-0-e2db1b2566b1@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 | 46 +++++++++++
Documentation/hwmon/index.rst | 1 +
Documentation/hwmon/tda38740.rst | 65 +++++++++++++++
drivers/hwmon/pmbus/Kconfig | 9 +++
drivers/hwmon/pmbus/Makefile | 1 +
drivers/hwmon/pmbus/tda38740.c | 94 ++++++++++++++++++++++
6 files changed, 216 insertions(+)
---
base-commit: ba08432bda66a7889d8f3d1581dabf10f59b25eb
change-id: 20260903-add-tda38740-and-tda38725-32bbb097d41e
Best regards,
--
Colin Huang <u8813345@gmail.com>
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v4 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 2026-09-10 12:35 [PATCH v4 0/2] Add driver for Infineon TDA38740/TDA38725 Colin Huang @ 2026-09-10 12:35 ` Colin Huang 2026-09-10 12:41 ` sashiko-bot 2026-09-11 8:49 ` Krzysztof Kozlowski 2026-09-10 12:35 ` [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang 1 sibling, 2 replies; 7+ messages in thread From: Colin Huang @ 2026-09-10 12:35 UTC (permalink / raw) To: Guenter Roeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: linux-hwmon, devicetree, linux-kernel, colin.huang2, linux-doc, 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 | 46 ++++++++++++++++++++++ 1 file changed, 46 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..28eeb85f13df --- /dev/null +++ b/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml @@ -0,0 +1,46 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- + +$id: http://devicetree.org/schemas/hwmon/pmbus/infineon,tda38740.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Infineon TDA38740 and TDA38725 PMBus Synchronous Buck Regulator + +maintainers: + - Colin Huang <u8813345@gmail.com> + +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 + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + i2c { + #address-cells = <1>; + #size-cells = <0>; + + regulator@40 { + compatible = "infineon,tda38740"; + reg = <0x40>; + }; + }; + -- 2.34.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v4 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 2026-09-10 12:35 ` [PATCH v4 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 Colin Huang @ 2026-09-10 12:41 ` sashiko-bot 2026-09-11 8:49 ` Krzysztof Kozlowski 1 sibling, 0 replies; 7+ messages in thread From: sashiko-bot @ 2026-09-10 12:41 UTC (permalink / raw) To: Colin Huang; +Cc: linux-hwmon, conor+dt, devicetree, robh Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] The binding omits standard properties for voltage regulators and PMBus alerts, preventing complete hardware description due to `additionalProperties: false`. -- commit ad3970039034a68048f73bbed304c8a0650c3bdf Author: Colin Huang <u8813345@gmail.com> dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 This commit adds device tree binding documentation for the Infineon TDA38740 and TDA38725 PMBus synchronous buck regulators. > diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml b/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml > new file mode 100644 > --- /dev/null > +++ b/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml [ ... ] > +required: > + - compatible > + - reg > + > +additionalProperties: false [Severity: Medium] Because this is a voltage regulator with a PMBus interface, board device trees might need to describe physical hardware connections like the SMBALERT# interrupt pin or standard regulator supply nodes. Will this strict constraint cause dt-schema validation failures if a board node attempts to add standard properties like interrupts? Should this schema include standard regulator and interrupt properties in the definition, or perhaps use unevaluatedProperties with the relevant $ref inclusions, to allow boards to completely describe their hardware without validation errors? > + > +examples: > + - | > + i2c { > + #address-cells = <1>; -- Sashiko AI review · https://sashiko.dev/#/patchset/20260910-add-tda38740-and-tda38725-v4-0-dbae7fabce09@gmail.com?part=1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 2026-09-10 12:35 ` [PATCH v4 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 Colin Huang 2026-09-10 12:41 ` sashiko-bot @ 2026-09-11 8:49 ` Krzysztof Kozlowski 1 sibling, 0 replies; 7+ messages in thread From: Krzysztof Kozlowski @ 2026-09-11 8:49 UTC (permalink / raw) To: Colin Huang Cc: Guenter Roeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jonathan Corbet, Shuah Khan, Randy Dunlap, linux-hwmon, devicetree, linux-kernel, linux-doc, Colin Huang On Thu, Sep 10, 2026 at 08:35:50PM +0800, Colin Huang wrote: > 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 | 46 ++++++++++++++++++++++ > 1 file changed, 46 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..28eeb85f13df > --- /dev/null > +++ b/Documentation/devicetree/bindings/hwmon/pmbus/infineon,tda38740.yaml > @@ -0,0 +1,46 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > + There is no blank line here. Do not come with own style (like your version 1). > +$id: http://devicetree.org/schemas/hwmon/pmbus/infineon,tda38740.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Infineon TDA38740 and TDA38725 PMBus Synchronous Buck Regulator > + > +maintainers: > + - Colin Huang <u8813345@gmail.com> > + > +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 I don't see how you responded to Conor's feedback. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 2026-09-10 12:35 [PATCH v4 0/2] Add driver for Infineon TDA38740/TDA38725 Colin Huang 2026-09-10 12:35 ` [PATCH v4 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 Colin Huang @ 2026-09-10 12:35 ` Colin Huang 2026-09-10 12:42 ` sashiko-bot 2026-09-10 15:19 ` Guenter Roeck 1 sibling, 2 replies; 7+ messages in thread From: Colin Huang @ 2026-09-10 12:35 UTC (permalink / raw) To: Guenter Roeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: linux-hwmon, devicetree, linux-kernel, colin.huang2, linux-doc, 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> --- Documentation/hwmon/index.rst | 1 + Documentation/hwmon/tda38740.rst | 65 +++++++++++++++++++++++++++ drivers/hwmon/pmbus/Kconfig | 9 ++++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/tda38740.c | 94 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 170 insertions(+) diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst index f07977a20271..aeff87b3d46d 100644 --- a/Documentation/hwmon/index.rst +++ b/Documentation/hwmon/index.rst @@ -265,6 +265,7 @@ Hardware Monitoring Kernel Drivers sy7636a-hwmon tc654 tc74 + tda38740 thmc50 tmp102 tmp103 diff --git a/Documentation/hwmon/tda38740.rst b/Documentation/hwmon/tda38740.rst new file mode 100644 index 000000000000..55ce12f14914 --- /dev/null +++ b/Documentation/hwmon/tda38740.rst @@ -0,0 +1,65 @@ +.. SPDX-License-Identifier: GPL-2.0-only + +==================================== +Kernel driver tda38740 +==================================== + +Supported chips: + * Infineon TDA38740 + * Infineon TDA38725 + + Prefix: 'tda38740' + + Addresses scanned: - + + Datasheet: + https://www.infineon.com/row/public/documents/24/49/infineon-tda38740-tda38725-datasheet-en.pdf + +Author: Colin Huang <u8813345@gmail.com> + +Description +----------- + +The TDA38740 and TDA38725 are single-output synchronous buck regulators with a +PMBus interface. They expose basic voltage, current, power and temperature +telemetry through the standard PMBus hwmon interfaces. + +Sysfs entries +------------- + +======================= ======================================================= +curr1_alarm Input current alarm +curr1_input Measured input current +curr1_label "iin" + +curr2_crit Critical maximum output current +curr2_crit_alarm Output current critical high alarm +curr2_input Measured output current +curr2_label "iout" + +in1_crit Critical maximum input voltage +in1_crit_alarm Input voltage critical high alarm +in1_input Measured input voltage +in1_label "vin" + +in2_crit Critical maximum output voltage +in2_crit_alarm Output voltage critical high alarm +in2_input Measured output voltage +in2_label "vout" +in2_lcrit Critical minimum output voltage +in2_lcrit_alarm Output voltage critical low alarm + +power1_alarm Input power alarm +power1_input Measured input power +power1_label "pin" + +power2_input Measured output power +power2_label "pout" + +temp1_crit Critical high temperature +temp1_crit_alarm Chip temperature critical high alarm +temp1_input Measured temperature +temp1_max Maximum temperature +temp1_max_alarm Chip temperature high alarm +======================= ======================================================= + 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..6d3e9884f733 --- /dev/null +++ b/drivers/hwmon/pmbus/tda38740.c @@ -0,0 +1,94 @@ +// 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" + +/* + * 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[] = { + { .name = "tda38725"}, + { .name = "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); + +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] 7+ messages in thread
* Re: [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 2026-09-10 12:35 ` [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang @ 2026-09-10 12:42 ` sashiko-bot 2026-09-10 15:19 ` Guenter Roeck 1 sibling, 0 replies; 7+ messages in thread From: sashiko-bot @ 2026-09-10 12:42 UTC (permalink / raw) To: Colin Huang; +Cc: conor+dt, robh, devicetree, linux-hwmon Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Low] The `struct tda38740_data` is used and allocated in `tda38740_probe()` but is never defined, causing a compilation error. -- commit 38416ec86775dd4db25c806a9c1584cb372a401b Author: Colin Huang <u8813345@gmail.com> hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 This commit adds a new PMBus driver for Infineon TDA38740 and TDA38725 single-voltage synchronous buck regulators. It provides standard PMBus hardware monitoring telemetry. > diff --git a/drivers/hwmon/pmbus/tda38740.c b/drivers/hwmon/pmbus/tda38740.c > new file mode 100644 > index 0000000000000..6d3e9884f733b > --- /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); [Severity: Low] Is struct tda38740_data missing its definition? It appears this struct is never defined in this file or included headers. Does this result in a compilation error here, since sizeof() cannot evaluate an incomplete type? > + if (!data) > + return -ENOMEM; > + > + memcpy(&data->info, &tda38740_info, sizeof(tda38740_info)); [Severity: Low] Because the type is incomplete, does dereferencing data->info here also cause a build failure? Would it be better to define the struct locally with the info member, or directly allocate a struct pmbus_driver_info instead? [ ... ] -- Sashiko AI review · https://sashiko.dev/#/patchset/20260910-add-tda38740-and-tda38725-v4-0-dbae7fabce09@gmail.com?part=2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 2026-09-10 12:35 ` [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang 2026-09-10 12:42 ` sashiko-bot @ 2026-09-10 15:19 ` Guenter Roeck 1 sibling, 0 replies; 7+ messages in thread From: Guenter Roeck @ 2026-09-10 15:19 UTC (permalink / raw) To: Colin Huang, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: linux-hwmon, devicetree, linux-kernel, linux-doc, Colin Huang On 9/10/26 05:35, Colin Huang wrote: > 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> > --- > Documentation/hwmon/index.rst | 1 + > Documentation/hwmon/tda38740.rst | 65 +++++++++++++++++++++++++++ > drivers/hwmon/pmbus/Kconfig | 9 ++++ > drivers/hwmon/pmbus/Makefile | 1 + > drivers/hwmon/pmbus/tda38740.c | 94 ++++++++++++++++++++++++++++++++++++++++ > 5 files changed, 170 insertions(+) > > diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst > index f07977a20271..aeff87b3d46d 100644 > --- a/Documentation/hwmon/index.rst > +++ b/Documentation/hwmon/index.rst > @@ -265,6 +265,7 @@ Hardware Monitoring Kernel Drivers > sy7636a-hwmon > tc654 > tc74 > + tda38740 > thmc50 > tmp102 > tmp103 > diff --git a/Documentation/hwmon/tda38740.rst b/Documentation/hwmon/tda38740.rst > new file mode 100644 > index 000000000000..55ce12f14914 > --- /dev/null > +++ b/Documentation/hwmon/tda38740.rst > @@ -0,0 +1,65 @@ > +.. SPDX-License-Identifier: GPL-2.0-only > + > +==================================== > +Kernel driver tda38740 > +==================================== > + > +Supported chips: > + * Infineon TDA38740 > + * Infineon TDA38725 > + > + Prefix: 'tda38740' > + > + Addresses scanned: - > + > + Datasheet: > + https://www.infineon.com/row/public/documents/24/49/infineon-tda38740-tda38725-datasheet-en.pdf > + > +Author: Colin Huang <u8813345@gmail.com> > + > +Description > +----------- > + > +The TDA38740 and TDA38725 are single-output synchronous buck regulators with a > +PMBus interface. They expose basic voltage, current, power and temperature > +telemetry through the standard PMBus hwmon interfaces. > + > +Sysfs entries > +------------- > + > +======================= ======================================================= > +curr1_alarm Input current alarm > +curr1_input Measured input current > +curr1_label "iin" > + > +curr2_crit Critical maximum output current > +curr2_crit_alarm Output current critical high alarm > +curr2_input Measured output current > +curr2_label "iout" > + > +in1_crit Critical maximum input voltage > +in1_crit_alarm Input voltage critical high alarm > +in1_input Measured input voltage > +in1_label "vin" > + > +in2_crit Critical maximum output voltage > +in2_crit_alarm Output voltage critical high alarm > +in2_input Measured output voltage > +in2_label "vout" > +in2_lcrit Critical minimum output voltage > +in2_lcrit_alarm Output voltage critical low alarm > + > +power1_alarm Input power alarm > +power1_input Measured input power > +power1_label "pin" > + > +power2_input Measured output power > +power2_label "pout" > + > +temp1_crit Critical high temperature > +temp1_crit_alarm Chip temperature critical high alarm > +temp1_input Measured temperature > +temp1_max Maximum temperature > +temp1_max_alarm Chip temperature high alarm > +======================= ======================================================= > + > 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..6d3e9884f733 > --- /dev/null > +++ b/drivers/hwmon/pmbus/tda38740.c > @@ -0,0 +1,94 @@ > +// 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" > + > +/* > + * 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; > + What is the point of this code ? The PMBus core, in pmbus_identify_common(), already compares the configured mode (info->format[PSC_VOLTAGE_OUT]) with the value in the PMBUS_VOUT_MODE register and bails out if it does not match. The code here just seems to duplicate that. Am I missing something ? > + 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; > + This definition got lost, and I don't immediately see why it would be needed. Thanks, Guenter > + 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[] = { > + { .name = "tda38725"}, > + { .name = "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); > + > +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"); > ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-09-11 8:49 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-09-10 12:35 [PATCH v4 0/2] Add driver for Infineon TDA38740/TDA38725 Colin Huang 2026-09-10 12:35 ` [PATCH v4 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 Colin Huang 2026-09-10 12:41 ` sashiko-bot 2026-09-11 8:49 ` Krzysztof Kozlowski 2026-09-10 12:35 ` [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang 2026-09-10 12:42 ` sashiko-bot 2026-09-10 15:19 ` Guenter Roeck
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox