* [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-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, 1 reply; 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-11 8:49 ` Krzysztof Kozlowski 2026-09-14 9:22 ` Colin Huang 0 siblings, 1 reply; 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
* Re: [PATCH v4 1/2] dt-bindings: hwmon: pmbus: Add Infineon tda38740 and tda38725 2026-09-11 8:49 ` Krzysztof Kozlowski @ 2026-09-14 9:22 ` Colin Huang 0 siblings, 0 replies; 7+ messages in thread From: Colin Huang @ 2026-09-14 9:22 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Colin Huang, Guenter Roeck, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jonathan Corbet, Shuah Khan, Randy Dunlap, linux-hwmon, devicetree, linux-kernel, linux-doc Krzysztof Kozlowski <krzk@kernel.org> 於 2026年9月11日週五 下午4:49寫道: > > 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). > Hi Krzysztof Thanks for review. I will remove this blank line in next rev. Best regards, Colin Huang > > +$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. > Thanks for remind. I have responded Connor's feedback today. Best regards, Colin Huang > 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 15:19 ` Guenter Roeck 1 sibling, 1 reply; 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 15:19 ` Guenter Roeck 2026-09-14 9:36 ` Colin Huang 0 siblings, 1 reply; 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
* Re: [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 2026-09-10 15:19 ` Guenter Roeck @ 2026-09-14 9:36 ` Colin Huang 0 siblings, 0 replies; 7+ messages in thread From: Colin Huang @ 2026-09-14 9:36 UTC (permalink / raw) To: Guenter Roeck Cc: Colin Huang, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jonathan Corbet, Shuah Khan, Randy Dunlap, linux-hwmon, devicetree, linux-kernel, linux-doc Guenter Roeck <linux@roeck-us.net> 於 2026年9月10日週四 下午11:19寫道: > > 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 ? Hi Guenter, Thanks for your review. Yes, code is duplicating. I will remove this function in next. Best regards, Colin Huang > > + 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 > Thanks for the review. I plan to change it to: ``` static int tda38740_probe(struct i2c_client *client) { return pmbus_do_probe(client, &tda38740_info); } ``` Best regards, Colin Huang > > + 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-14 9:36 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-11 8:49 ` Krzysztof Kozlowski 2026-09-14 9:22 ` Colin Huang 2026-09-10 12:35 ` [PATCH v4 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725 Colin Huang 2026-09-10 15:19 ` Guenter Roeck 2026-09-14 9:36 ` Colin Huang
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).