[PATCH v6 2/2] hwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725
Colin Huang <[email protected]>
| Newsgroups | org.kernel.vger.linux-doc,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-hwmon,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Add a PMBus driver for Infineon TDA38740 and TDA38725 single-voltage synchronous buck regulators. Signed-off-by: Colin Huang <[email protected]> --- 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 | 64 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 140 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 <[email protected]> + +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..067de07ba9fb --- /dev/null +++ b/drivers/hwmon/pmbus/tda38740.c @@ -0,0 +1,64 @@ +// 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" + +static struct pmbus_driver_info tda38740_info = { + .pages = 1, + .format[PSC_VOLTAGE_IN] = linear, + .format[PSC_VOLTAGE_OUT] = 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, +}; + +static int tda38740_probe(struct i2c_client *client) +{ + return pmbus_do_probe(client, &tda38740_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 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 = 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