Message ID | 1662617599-15270-1-git-send-email-Duke.Du@quantatw.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | [v4] hwmon: Add driver for the TEXAS TPS546D24 Buck Converter. | expand |
On 9/7/22 23:13, Duke Du wrote: > From: Duke Du <dukedu83@gmail.com> > > Add the pmbus driver for TEXAS tps546d24 Buck Converter. > The vout mode of tps546d24 supported relative data format, > which is not meet for the original driver (pmbus.c). "which is not supported by the PMBus core" > > Signed-off-by: Duke Du <dukedu83@gmail.com> > --- > Change in v1: > Initial patchset. > Change in v2: > Correct the tps546d24.rst format. > Change in v3: > 1. Modify the patch description. > 2. Put the change log between the dashes and diffstat. > Change in v4: > 1. Modify the patch description. > 2. Clear the bit 7 of PMBUS_VOUT_MODE to change the mode from relative > to absolute. > 3. Add the vendor prefix. > --- > --- > Documentation/hwmon/index.rst | 1 + > Documentation/hwmon/tps546d24.rst | 35 ++++++++++++++++++++++ > MAINTAINERS | 7 +++++ > drivers/hwmon/pmbus/Kconfig | 9 ++++++ > drivers/hwmon/pmbus/Makefile | 1 + > drivers/hwmon/pmbus/tps546d24.c | 63 +++++++++++++++++++++++++++++++++++++++ > 6 files changed, 116 insertions(+) > create mode 100644 Documentation/hwmon/tps546d24.rst > create mode 100644 drivers/hwmon/pmbus/tps546d24.c > > diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst > index f7113b0..d3eede4 100644 > --- a/Documentation/hwmon/index.rst > +++ b/Documentation/hwmon/index.rst > @@ -205,6 +205,7 @@ Hardware Monitoring Kernel Drivers > tps23861 > tps40422 > tps53679 > + tps546d24 > twl4030-madc-hwmon > ucd9000 > ucd9200 > diff --git a/Documentation/hwmon/tps546d24.rst b/Documentation/hwmon/tps546d24.rst > new file mode 100644 > index 0000000..3061fd8 > --- /dev/null > +++ b/Documentation/hwmon/tps546d24.rst > @@ -0,0 +1,35 @@ > +.. SPDX-License-Identifier: GPL-2.0-only > + > +Kernel driver tps546d24 > +====================== > + > +Supported chips: > + > + * TI TPS546D24 > + > + Prefix: 'tps546d24' > + > + Addresses scanned: - > + > + Datasheet: https://www.ti.com/lit/gpn/tps546d24 > + > +Author: Duke Du <dukedu83@gmail.com> > + > + > +Description > +----------- > + > +The TPS546D24A is a highly integrated, non-isolated DC/DC converter capable > +of high frequency operation and 40-A current output from a 7-mm x 5-mm > +package. > + > +Two, three, and four TPS546D24A devices can be interconnected > +to provide up to 160 A on a single output. The device has an option to > +overdrive the internal 5-V LDO with an external 5-V supply via the VDD5 > +pin to improve efficiency and reduce power dissipation of the converter. > + > + > +Platform data support > +--------------------- > + > +The driver supports standard PMBus driver platform data. > diff --git a/MAINTAINERS b/MAINTAINERS > index 8a5012b..fa2d4fb 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -20583,6 +20583,13 @@ Q: https://patchwork.kernel.org/project/linux-integrity/list/ > T: git git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git > F: drivers/char/tpm/ > > +TPS546D24 DRIVER > +M: Duke Du <dukedu83@gmail.com> > +L: linux-hwmon@vger.kernel.org > +S: Maintained > +F: Documentation/hwmon/tps546d24.rst > +F: drivers/hwmon/pmbus/tps546d24.c > + > TRACING > M: Steven Rostedt <rostedt@goodmis.org> > M: Ingo Molnar <mingo@redhat.com> > diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig > index 951e4a9..89668af 100644 > --- a/drivers/hwmon/pmbus/Kconfig > +++ b/drivers/hwmon/pmbus/Kconfig > @@ -397,6 +397,15 @@ config SENSORS_TPS53679 > This driver can also be built as a module. If so, the module will > be called tps53679. > > +config SENSORS_TPS546D24 > + tristate "TPS546D24" > + help > + If you say yes here you get hardware monitoring support for TEXAS > + TPS546D24. > + > + This driver can also be built as a module. If so, the module will > + be called tps546d24 > + > config SENSORS_UCD9000 > tristate "TI UCD90120, UCD90124, UCD90160, UCD90320, UCD9090, UCD90910" > help > diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile > index e2fe86f..0002dbe 100644 > --- a/drivers/hwmon/pmbus/Makefile > +++ b/drivers/hwmon/pmbus/Makefile > @@ -41,6 +41,7 @@ obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o > obj-$(CONFIG_SENSORS_STPDDC60) += stpddc60.o > obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o > obj-$(CONFIG_SENSORS_TPS53679) += tps53679.o > +obj-$(CONFIG_SENSORS_TPS546D24) += tps546d24.o > obj-$(CONFIG_SENSORS_UCD9000) += ucd9000.o > obj-$(CONFIG_SENSORS_UCD9200) += ucd9200.o > obj-$(CONFIG_SENSORS_XDPE122) += xdpe12284.o > diff --git a/drivers/hwmon/pmbus/tps546d24.c b/drivers/hwmon/pmbus/tps546d24.c > new file mode 100644 > index 0000000..84f3dc9 > --- /dev/null > +++ b/drivers/hwmon/pmbus/tps546d24.c > @@ -0,0 +1,63 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Hardware monitoring driver for TEXAS TPS546D24 buck converter > + */ > + > +#include <linux/err.h> > +#include <linux/i2c.h> > +#include <linux/init.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/pmbus.h> > +#include "pmbus.h" > + > +static struct pmbus_driver_info tps546d24_info = { > + .pages = 1, > + .format[PSC_VOLTAGE_IN] = linear, > + .format[PSC_VOLTAGE_OUT] = linear, > + .format[PSC_TEMPERATURE] = linear, > + .format[PSC_CURRENT_OUT] = linear, > + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN > + | PMBUS_HAVE_IOUT | PMBUS_HAVE_VOUT > + | PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_VOUT > + | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, > +}; > + > +static int tps546d24_probe(struct i2c_client *client) > +{ > + int reg; > + > + reg = i2c_smbus_read_byte_data(client, PMBUS_VOUT_MODE); > + if (reg > 0x80) This does not cover reg == 0x80, and does not handle errors. I would suggest something like if (reg < 0) return reg; if (reg & 0x80) { int err; err = i2c_smbus_write_byte_data(client, PMBUS_VOUT_MODE, reg & 0x7f); if (err < 0) return err; } return pmbus_do_probe(client, &tps546d24_info); Thanks, Guenter > + i2c_smbus_write_byte_data(client, PMBUS_VOUT_MODE, reg & 0x7f); > + return pmbus_do_probe(client, &tps546d24_info); > +} > + > +static const struct i2c_device_id tps546d24_id[] = { > + {"tps546d24", 0}, > + {} > +}; > +MODULE_DEVICE_TABLE(i2c, tps546d24_id); > + > +static const struct of_device_id tps546d24_of_match[] = { > + {.compatible = "ti,tps546d24"}, > + {} > +}; > +MODULE_DEVICE_TABLE(of, tps546d24_of_match); > + > +/* This is the driver that will be inserted */ > +static struct i2c_driver tps546d24_driver = { > + .driver = { > + .name = "tps546d24", > + .of_match_table = of_match_ptr(tps546d24_of_match), > + }, > + .probe_new = tps546d24_probe, > + .id_table = tps546d24_id, > +}; > + > +module_i2c_driver(tps546d24_driver); > + > +MODULE_AUTHOR("Duke Du <dukedu83@gmail.com>"); > +MODULE_DESCRIPTION("PMBus driver for TI tps546d24"); > +MODULE_LICENSE("GPL"); > +MODULE_IMPORT_NS(PMBUS);
Hi Duke, I love your patch! Perhaps something to improve: [auto build test WARNING on groeck-staging/hwmon-next] [also build test WARNING on linus/master v6.0-rc4 next-20220908] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Duke-Du/hwmon-Add-driver-for-the-TEXAS-TPS546D24-Buck-Converter/20220908-141642 base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next reproduce: # https://github.com/intel-lab-lkp/linux/commit/92b26ac053d4e2673c22de7d93e91b8efbb3d1bb git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Duke-Du/hwmon-Add-driver-for-the-TEXAS-TPS546D24-Buck-Converter/20220908-141642 git checkout 92b26ac053d4e2673c22de7d93e91b8efbb3d1bb make menuconfig # enable CONFIG_COMPILE_TEST, CONFIG_WARN_MISSING_DOCUMENTS, CONFIG_WARN_ABI_ERRORS make htmldocs If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> Documentation/hwmon/tps546d24.rst:4: WARNING: Title underline too short. vim +4 Documentation/hwmon/tps546d24.rst 2 3 Kernel driver tps546d24 > 4 ====================== 5
diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst index f7113b0..d3eede4 100644 --- a/Documentation/hwmon/index.rst +++ b/Documentation/hwmon/index.rst @@ -205,6 +205,7 @@ Hardware Monitoring Kernel Drivers tps23861 tps40422 tps53679 + tps546d24 twl4030-madc-hwmon ucd9000 ucd9200 diff --git a/Documentation/hwmon/tps546d24.rst b/Documentation/hwmon/tps546d24.rst new file mode 100644 index 0000000..3061fd8 --- /dev/null +++ b/Documentation/hwmon/tps546d24.rst @@ -0,0 +1,35 @@ +.. SPDX-License-Identifier: GPL-2.0-only + +Kernel driver tps546d24 +====================== + +Supported chips: + + * TI TPS546D24 + + Prefix: 'tps546d24' + + Addresses scanned: - + + Datasheet: https://www.ti.com/lit/gpn/tps546d24 + +Author: Duke Du <dukedu83@gmail.com> + + +Description +----------- + +The TPS546D24A is a highly integrated, non-isolated DC/DC converter capable +of high frequency operation and 40-A current output from a 7-mm x 5-mm +package. + +Two, three, and four TPS546D24A devices can be interconnected +to provide up to 160 A on a single output. The device has an option to +overdrive the internal 5-V LDO with an external 5-V supply via the VDD5 +pin to improve efficiency and reduce power dissipation of the converter. + + +Platform data support +--------------------- + +The driver supports standard PMBus driver platform data. diff --git a/MAINTAINERS b/MAINTAINERS index 8a5012b..fa2d4fb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -20583,6 +20583,13 @@ Q: https://patchwork.kernel.org/project/linux-integrity/list/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git F: drivers/char/tpm/ +TPS546D24 DRIVER +M: Duke Du <dukedu83@gmail.com> +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/hwmon/tps546d24.rst +F: drivers/hwmon/pmbus/tps546d24.c + TRACING M: Steven Rostedt <rostedt@goodmis.org> M: Ingo Molnar <mingo@redhat.com> diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig index 951e4a9..89668af 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig @@ -397,6 +397,15 @@ config SENSORS_TPS53679 This driver can also be built as a module. If so, the module will be called tps53679. +config SENSORS_TPS546D24 + tristate "TPS546D24" + help + If you say yes here you get hardware monitoring support for TEXAS + TPS546D24. + + This driver can also be built as a module. If so, the module will + be called tps546d24 + config SENSORS_UCD9000 tristate "TI UCD90120, UCD90124, UCD90160, UCD90320, UCD9090, UCD90910" help diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile index e2fe86f..0002dbe 100644 --- a/drivers/hwmon/pmbus/Makefile +++ b/drivers/hwmon/pmbus/Makefile @@ -41,6 +41,7 @@ obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o obj-$(CONFIG_SENSORS_STPDDC60) += stpddc60.o obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o obj-$(CONFIG_SENSORS_TPS53679) += tps53679.o +obj-$(CONFIG_SENSORS_TPS546D24) += tps546d24.o obj-$(CONFIG_SENSORS_UCD9000) += ucd9000.o obj-$(CONFIG_SENSORS_UCD9200) += ucd9200.o obj-$(CONFIG_SENSORS_XDPE122) += xdpe12284.o diff --git a/drivers/hwmon/pmbus/tps546d24.c b/drivers/hwmon/pmbus/tps546d24.c new file mode 100644 index 0000000..84f3dc9 --- /dev/null +++ b/drivers/hwmon/pmbus/tps546d24.c @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Hardware monitoring driver for TEXAS TPS546D24 buck converter + */ + +#include <linux/err.h> +#include <linux/i2c.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/pmbus.h> +#include "pmbus.h" + +static struct pmbus_driver_info tps546d24_info = { + .pages = 1, + .format[PSC_VOLTAGE_IN] = linear, + .format[PSC_VOLTAGE_OUT] = linear, + .format[PSC_TEMPERATURE] = linear, + .format[PSC_CURRENT_OUT] = linear, + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN + | PMBUS_HAVE_IOUT | PMBUS_HAVE_VOUT + | PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_VOUT + | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, +}; + +static int tps546d24_probe(struct i2c_client *client) +{ + int reg; + + reg = i2c_smbus_read_byte_data(client, PMBUS_VOUT_MODE); + if (reg > 0x80) + i2c_smbus_write_byte_data(client, PMBUS_VOUT_MODE, reg & 0x7f); + return pmbus_do_probe(client, &tps546d24_info); +} + +static const struct i2c_device_id tps546d24_id[] = { + {"tps546d24", 0}, + {} +}; +MODULE_DEVICE_TABLE(i2c, tps546d24_id); + +static const struct of_device_id tps546d24_of_match[] = { + {.compatible = "ti,tps546d24"}, + {} +}; +MODULE_DEVICE_TABLE(of, tps546d24_of_match); + +/* This is the driver that will be inserted */ +static struct i2c_driver tps546d24_driver = { + .driver = { + .name = "tps546d24", + .of_match_table = of_match_ptr(tps546d24_of_match), + }, + .probe_new = tps546d24_probe, + .id_table = tps546d24_id, +}; + +module_i2c_driver(tps546d24_driver); + +MODULE_AUTHOR("Duke Du <dukedu83@gmail.com>"); +MODULE_DESCRIPTION("PMBus driver for TI tps546d24"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS(PMBUS);