Message ID | 20250124-upstream-lt3074-v1-2-7603f346433e@analog.com |
---|---|
State | New |
Headers | show |
Series | Add support for LT3074 low voltage linear regulator | expand |
Hi Cedric, kernel test robot noticed the following build warnings: [auto build test WARNING on a76539b293677c5c163b9285b0cd8dd420d33989] url: https://github.com/intel-lab-lkp/linux/commits/Cedric-Encarnacion/dt-bindings-trivial-devices-add-lt3074/20250124-234209 base: a76539b293677c5c163b9285b0cd8dd420d33989 patch link: https://lore.kernel.org/r/20250124-upstream-lt3074-v1-2-7603f346433e%40analog.com patch subject: [PATCH 2/2] hwmon: (pmbus/lt3074): add support for lt3074 config: hexagon-randconfig-r073-20250126 (https://download.01.org/0day-ci/archive/20250126/202501260605.Ad7sJxQM-lkp@intel.com/config) compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project 19306351a2c45e266fa11b41eb1362b20b6ca56d) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250126/202501260605.Ad7sJxQM-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202501260605.Ad7sJxQM-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from drivers/hwmon/pmbus/lt3074.c:8: In file included from include/linux/i2c.h:19: In file included from include/linux/regulator/consumer.h:35: In file included from include/linux/suspend.h:5: In file included from include/linux/swap.h:9: In file included from include/linux/memcontrol.h:21: In file included from include/linux/mm.h:2223: include/linux/vmstat.h:518:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 518 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_" | ~~~~~~~~~~~ ^ ~~~ >> drivers/hwmon/pmbus/lt3074.c:103:34: warning: unused variable 'lt3074_of_match' [-Wunused-const-variable] 103 | static const struct of_device_id lt3074_of_match[] = { | ^~~~~~~~~~~~~~~ 2 warnings generated. vim +/lt3074_of_match +103 drivers/hwmon/pmbus/lt3074.c 102 > 103 static const struct of_device_id lt3074_of_match[] = { 104 { .compatible = "adi,lt3074" }, 105 {} 106 }; 107 MODULE_DEVICE_TABLE(of, lt3074_of_match); 108
On 1/24/25 07:39, Cedric Encarnacion wrote: > Add hardware monitoring and regulator support for LT3074. The LT3074 is an > ultrafast, ultralow noise 3A, 5.5V dropout linear regulator. The PMBus > serial interface allows telemetry for input/output voltage, bias voltage, > output current, and die temperature. > > Signed-off-by: Cedric Encarnacion <cedricjustine.encarnacion@analog.com> > --- .... > + > +static const struct i2c_device_id lt3074_id[] = { > + { "lt3074", 0 }, > + {} > +}; > +MODULE_DEVICE_TABLE(i2c, lt3074_id); > + > +static const struct of_device_id lt3074_of_match[] = { Needs __maybe_unused Guenter
Hi Cedric, kernel test robot noticed the following build warnings: [auto build test WARNING on a76539b293677c5c163b9285b0cd8dd420d33989] url: https://github.com/intel-lab-lkp/linux/commits/Cedric-Encarnacion/dt-bindings-trivial-devices-add-lt3074/20250124-234209 base: a76539b293677c5c163b9285b0cd8dd420d33989 patch link: https://lore.kernel.org/r/20250124-upstream-lt3074-v1-2-7603f346433e%40analog.com patch subject: [PATCH 2/2] hwmon: (pmbus/lt3074): add support for lt3074 config: x86_64-randconfig-r071-20250126 (https://download.01.org/0day-ci/archive/20250128/202501280459.uH0yw7av-lkp@intel.com/config) compiler: gcc-11 (Debian 11.3.0-12) 11.3.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250128/202501280459.uH0yw7av-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202501280459.uH0yw7av-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/hwmon/pmbus/lt3074.c:103:34: warning: 'lt3074_of_match' defined but not used [-Wunused-const-variable=] 103 | static const struct of_device_id lt3074_of_match[] = { | ^~~~~~~~~~~~~~~ vim +/lt3074_of_match +103 drivers/hwmon/pmbus/lt3074.c 102 > 103 static const struct of_device_id lt3074_of_match[] = { 104 { .compatible = "adi,lt3074" }, 105 {} 106 }; 107 MODULE_DEVICE_TABLE(of, lt3074_of_match); 108
On Fri, Jan 24, 2025 at 11:39:07PM +0800, Cedric Encarnacion wrote: > Add hardware monitoring and regulator support for LT3074. The LT3074 is an > ultrafast, ultralow noise 3A, 5.5V dropout linear regulator. The PMBus > serial interface allows telemetry for input/output voltage, bias voltage, > output current, and die temperature. > > Signed-off-by: Cedric Encarnacion <cedricjustine.encarnacion@analog.com> Just in case it is not obvious: I do not apply or for the most part not even review patches if the kernel test robot reported a problem. This applies to all patches, not just this one. Thanks, Guenter
> -----Original Message----- > From: Guenter Roeck <groeck7@gmail.com> On Behalf Of Guenter Roeck > Sent: Thursday, January 30, 2025 12:15 AM > To: Encarnacion, Cedric justine <Cedricjustine.Encarnacion@analog.com> > Cc: Rob Herring <robh@kernel.org>; Krzysztof Kozlowski <krzk+dt@kernel.org>; > Conor Dooley <conor+dt@kernel.org>; Jean Delvare <jdelvare@suse.com>; > Jonathan Corbet <corbet@lwn.net>; Delphine CC Chiu > <Delphine_CC_Chiu@wiwynn.com>; devicetree@vger.kernel.org; linux- > kernel@vger.kernel.org; linux-hwmon@vger.kernel.org; linux- > doc@vger.kernel.org; linux-i2c@vger.kernel.org > Subject: Re: [PATCH 2/2] hwmon: (pmbus/lt3074): add support for lt3074 > > [External] > > On Fri, Jan 24, 2025 at 11:39:07PM +0800, Cedric Encarnacion wrote: > > Add hardware monitoring and regulator support for LT3074. The LT3074 is an > > ultrafast, ultralow noise 3A, 5.5V dropout linear regulator. The PMBus > > serial interface allows telemetry for input/output voltage, bias voltage, > > output current, and die temperature. > > > > Signed-off-by: Cedric Encarnacion <cedricjustine.encarnacion@analog.com> > > Just in case it is not obvious: I do not apply or for the most part not > even review patches if the kernel test robot reported a problem. > This applies to all patches, not just this one. > > Thanks, > Guenter This is understood. I'll submit a new patch version soon to address the kernel test robot warning. Best regards, Cedric
diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst index b1ea445479b0..5be511506d50 100644 --- a/Documentation/hwmon/index.rst +++ b/Documentation/hwmon/index.rst @@ -122,6 +122,7 @@ Hardware Monitoring Kernel Drivers lm95234 lm95245 lochnagar + lt3074 lt7182s ltc2992 ltc2945 diff --git a/Documentation/hwmon/lt3074.rst b/Documentation/hwmon/lt3074.rst new file mode 100644 index 000000000000..234f369153cf --- /dev/null +++ b/Documentation/hwmon/lt3074.rst @@ -0,0 +1,72 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Kernel driver lt3074 +==================== + +Supported chips: + + * Analog Devices LT3074 + + Prefix: 'lt3074' + + Addresses scanned: - + + Datasheet: https://www.analog.com/en/products/lt3074.html + +Authors: Cedric Encarnacion <cedricjustine.encarnacion@analog.com> + + +Description +----------- + +This driver supports hardware monitoring for Analog Devices LT3074 Linear +Regulator with PMBus interface. + +The LT3074 is a low voltage, ultra-low noise and ultra-fast transient +response linear regulator with PMBus serial interface. PMBus telemetry +feature provides information regarding the output voltage and current, +input voltage, bias voltage and die temperature. + +The driver is a client driver to the core PMBus driver. Please see +Documentation/hwmon/pmbus.rst for details on PMBus client drivers. + +Usage Notes +----------- + +This driver does not auto-detect devices. You will have to instantiate +the devices explicitly. Please see Documentation/i2c/instantiating-devices.rst +for details. + +Platform data support +--------------------- + +The driver supports standard PMBus driver platform data. + +Sysfs entries +------------- + +======================= ======================================================= +in1_label "vin" +in1_input Measured input voltage +in1_max Input overvoltage warning limit +in1_max_alarm Input overvoltage warning status +in1_min Input undervoltage warning limit +in1_min_alarm Input undervoltage warning status +in2_label "vmon" +in2_input Measured bias voltage +in2_max Bias overvoltage warning limit +in2_min Bias undervoltage warning limit +in3_label "vout1" +in3_input Measured output voltage +in3_max Output overvoltage warning limit +in3_max_alarm Output overvoltage warning status +in3_min Output undervoltage warning limit +in3_min_alarm Output undervoltage warning status +curr1_label "iout1" +curr1_input Measured output current. +curr1_crit Output overcurrent fault limit +curr1_crit_alarm Output overcurrent fault status +temp1_input Measured temperature +temp1_max Maximum temperature limit +temp1_max_alarm Overtemperature warning status +======================= ======================================================= diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig index 419469f40ba0..32564a64e225 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig @@ -209,6 +209,24 @@ config SENSORS_LM25066_REGULATOR If you say yes here you get regulator support for National Semiconductor LM25066, LM5064, and LM5066. +config SENSORS_LT3074 + tristate "Analog Devices LT3074" + help + If you say yes here you get hardware monitoring support for Analog + Devices LT3074. + + This driver can also be built as a module. If so, the module will + be called lt3074. + +config SENSORS_LT3074_REGULATOR + tristate "Regulator support for LT3074" + depends on SENSORS_LT3074 && REGULATOR + help + If you say yes here you get regulator support for Analog Devices + LT3074. The LT3074 is a low voltage, ultralow noise, high PSRR, + dropout linear regulator. The device supplies up to 3A with a + typical dropout voltage of 45mV. + config SENSORS_LT7182S tristate "Analog Devices LT7182S" help diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile index c7eb7739b7f8..5ef388c10581 100644 --- a/drivers/hwmon/pmbus/Makefile +++ b/drivers/hwmon/pmbus/Makefile @@ -22,6 +22,7 @@ obj-$(CONFIG_SENSORS_IR38064) += ir38064.o obj-$(CONFIG_SENSORS_IRPS5401) += irps5401.o obj-$(CONFIG_SENSORS_ISL68137) += isl68137.o obj-$(CONFIG_SENSORS_LM25066) += lm25066.o +obj-$(CONFIG_SENSORS_LT3074) += lt3074.o obj-$(CONFIG_SENSORS_LT7182S) += lt7182s.o obj-$(CONFIG_SENSORS_LTC2978) += ltc2978.o obj-$(CONFIG_SENSORS_LTC3815) += ltc3815.o diff --git a/drivers/hwmon/pmbus/lt3074.c b/drivers/hwmon/pmbus/lt3074.c new file mode 100644 index 000000000000..430e3a0c0a5f --- /dev/null +++ b/drivers/hwmon/pmbus/lt3074.c @@ -0,0 +1,122 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Hardware monitoring driver for Analog Devices LT3074 + * + * Copyright (C) 2025 Analog Devices, Inc. + */ +#include <linux/err.h> +#include <linux/i2c.h> +#include <linux/mod_devicetable.h> +#include <linux/module.h> + +#include "pmbus.h" + +#define LT3074_MFR_READ_VBIAS 0xc6 +#define LT3074_MFR_BIAS_OV_WARN_LIMIT 0xc7 +#define LT3074_MFR_BIAS_UV_WARN_LIMIT 0xc8 +#define LT3074_MFR_SPECIAL_ID 0xe7 + +#define LT3074_SPECIAL_ID_VALUE 0x1c1d + +static const struct regulator_desc __maybe_unused lt3074_reg_desc[] = { + PMBUS_REGULATOR_ONE("vout"), +}; + +static int lt3074_read_word_data(struct i2c_client *client, int page, + int phase, int reg) +{ + switch (reg) { + case PMBUS_VIRT_READ_VMON: + return pmbus_read_word_data(client, page, phase, + LT3074_MFR_READ_VBIAS); + case PMBUS_VIRT_VMON_UV_WARN_LIMIT: + return pmbus_read_word_data(client, page, phase, + LT3074_MFR_BIAS_UV_WARN_LIMIT); + case PMBUS_VIRT_VMON_OV_WARN_LIMIT: + return pmbus_read_word_data(client, page, phase, + LT3074_MFR_BIAS_OV_WARN_LIMIT); + default: + return -ENODATA; + } +} + +static int lt3074_write_word_data(struct i2c_client *client, int page, + int reg, u16 word) +{ + switch (reg) { + case PMBUS_VIRT_VMON_UV_WARN_LIMIT: + return pmbus_write_word_data(client, 0, + LT3074_MFR_BIAS_UV_WARN_LIMIT, + word); + case PMBUS_VIRT_VMON_OV_WARN_LIMIT: + return pmbus_write_word_data(client, 0, + LT3074_MFR_BIAS_OV_WARN_LIMIT, + word); + default: + return -ENODATA; + } +} + +static struct pmbus_driver_info lt3074_info = { + .pages = 1, + .format[PSC_VOLTAGE_IN] = linear, + .format[PSC_VOLTAGE_OUT] = linear, + .format[PSC_CURRENT_OUT] = linear, + .format[PSC_TEMPERATURE] = linear, + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT | + PMBUS_HAVE_TEMP | PMBUS_HAVE_VMON | + PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT | + PMBUS_HAVE_STATUS_INPUT | PMBUS_HAVE_STATUS_TEMP, + .read_word_data = lt3074_read_word_data, + .write_word_data = lt3074_write_word_data, +#if IS_ENABLED(CONFIG_SENSORS_LT3074_REGULATOR) + .num_regulators = 1, + .reg_desc = lt3074_reg_desc, +#endif +}; + +static int lt3074_probe(struct i2c_client *client) +{ + int ret; + struct device *dev = &client->dev; + + if (!i2c_check_functionality(client->adapter, + I2C_FUNC_SMBUS_READ_WORD_DATA)) + return -ENODEV; + + ret = i2c_smbus_read_word_data(client, LT3074_MFR_SPECIAL_ID); + if (ret < 0) + return dev_err_probe(dev, ret, "Failed to read ID\n"); + + if (ret != LT3074_SPECIAL_ID_VALUE) + return dev_err_probe(dev, -ENODEV, "ID mismatch\n"); + + return pmbus_do_probe(client, <3074_info); +} + +static const struct i2c_device_id lt3074_id[] = { + { "lt3074", 0 }, + {} +}; +MODULE_DEVICE_TABLE(i2c, lt3074_id); + +static const struct of_device_id lt3074_of_match[] = { + { .compatible = "adi,lt3074" }, + {} +}; +MODULE_DEVICE_TABLE(of, lt3074_of_match); + +static struct i2c_driver lt3074_driver = { + .driver = { + .name = "lt3074", + .of_match_table = of_match_ptr(lt3074_of_match), + }, + .probe = lt3074_probe, + .id_table = lt3074_id, +}; +module_i2c_driver(lt3074_driver); + +MODULE_AUTHOR("Cedric Encarnacion <cedricjustine.encarnacion@analog.com>"); +MODULE_DESCRIPTION("PMBus driver for Analog Devices LT3074"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS("PMBUS");
Add hardware monitoring and regulator support for LT3074. The LT3074 is an ultrafast, ultralow noise 3A, 5.5V dropout linear regulator. The PMBus serial interface allows telemetry for input/output voltage, bias voltage, output current, and die temperature. Signed-off-by: Cedric Encarnacion <cedricjustine.encarnacion@analog.com> --- Documentation/hwmon/index.rst | 1 + Documentation/hwmon/lt3074.rst | 72 ++++++++++++++++++++++++ drivers/hwmon/pmbus/Kconfig | 18 ++++++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/lt3074.c | 122 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 214 insertions(+)