Message ID | 20230124110111.3965317-1-Naresh.Solanki@9elements.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | hwmon: (pmbus/tda38640) Add driver for Infineon TDA38640 Voltage Regulator | expand |
On 24/01/2023 12:01, Naresh Solanki wrote: > From: Patrick Rudolph <patrick.rudolph@9elements.com> > > Add the pmbus driver for the Infineon TDA38640 voltage regulator. > > Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> > Signed-off-by: Naresh Solanki <Naresh.Solanki@9elements.com> > --- > .../devicetree/bindings/trivial-devices.yaml | 2 + Split bindings from driver code. > drivers/hwmon/pmbus/Kconfig | 16 ++++ > drivers/hwmon/pmbus/Makefile | 1 + > drivers/hwmon/pmbus/tda38640.c | 78 +++++++++++++++++++ > 4 files changed, 97 insertions(+) > create mode 100644 drivers/hwmon/pmbus/tda38640.c > > diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml > index f5c0a6283e61..a28b02036489 100644 > --- a/Documentation/devicetree/bindings/trivial-devices.yaml > +++ b/Documentation/devicetree/bindings/trivial-devices.yaml > @@ -141,6 +141,8 @@ properties: > - infineon,slb9645tt > # Infineon SLB9673 I2C TPM 2.0 > - infineon,slb9673 > + # Infineon TDA38640 Voltage Regulator > + - infineon,tda38640 > # Infineon TLV493D-A1B6 I2C 3D Magnetic Sensor > - infineon,tlv493d-a1b6 > # Infineon Multi-phase Digital VR Controller xdpe11280 > diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig > index 30448e049486..9f4bbb9c487a 100644 > --- a/drivers/hwmon/pmbus/Kconfig > +++ b/drivers/hwmon/pmbus/Kconfig > @@ -395,6 +395,22 @@ config SENSORS_STPDDC60 > This driver can also be built as a module. If so, the module will > be called stpddc60. > > +config SENSORS_TDA38640 > + tristate "Infineon TDA38640" > + help > + If you say yes here you get hardware monitoring support for Infineon > + TDA38640. > + > + This driver can also be built as a module. If so, the module will > + be called tda38640. > + > +config SENSORS_TDA38640_REGULATOR > + bool "Regulator support for TDA38640 and compatibles" > + depends on SENSORS_TDA38640 && REGULATOR > + help > + If you say yes here you get regulator support for Infineon > + TDA38640 as regulator. Drop entire option, why is it needed? > + > config SENSORS_TPS40422 > tristate "TI TPS40422" > help > diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile > index d9d2fa4bd6f7..3ae019916267 100644 > --- a/drivers/hwmon/pmbus/Makefile > +++ b/drivers/hwmon/pmbus/Makefile > @@ -40,6 +40,7 @@ obj-$(CONFIG_SENSORS_PM6764TR) += pm6764tr.o > obj-$(CONFIG_SENSORS_PXE1610) += pxe1610.o > obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o > obj-$(CONFIG_SENSORS_STPDDC60) += stpddc60.o > +obj-$(CONFIG_SENSORS_TDA38640) += tda38640.o > obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o > obj-$(CONFIG_SENSORS_TPS53679) += tps53679.o > obj-$(CONFIG_SENSORS_TPS546D24) += tps546d24.o > diff --git a/drivers/hwmon/pmbus/tda38640.c b/drivers/hwmon/pmbus/tda38640.c > new file mode 100644 > index 000000000000..31e17a936b8c > --- /dev/null > +++ b/drivers/hwmon/pmbus/tda38640.c > @@ -0,0 +1,78 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Hardware monitoring driver for Infineon TDA38640 > + * > + * 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 <linux/regulator/driver.h> > +#include "pmbus.h" > + > +#if IS_ENABLED(CONFIG_SENSORS_TDA38640_REGULATOR) > +static const struct regulator_desc tda38640_reg_desc[] = { > + PMBUS_REGULATOR("vout", 0), > +}; > +#endif /* CONFIG_SENSORS_TDA38640_REGULATOR */ > + > +static struct pmbus_driver_info tda38640_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, > +#if IS_ENABLED(CONFIG_SENSORS_TDA38640_REGULATOR) > + .num_regulators = 1, > + .reg_desc = tda38640_reg_desc, > +#endif > +}; > + > +static int tda38640_probe(struct i2c_client *client) > +{ > + return pmbus_do_probe(client, &tda38640_info); > +} > + > +static const struct i2c_device_id tda38640_id[] = { > + {"tda38640", 0}, > + {} > +}; > + Drop blank line > +MODULE_DEVICE_TABLE(i2c, tda38640_id); > + > +#ifdef CONFIG_OF Drop ifdefs and use __maybe_unused > +static const struct of_device_id tda38640_of_match[] = { > + { .compatible = "infineon,tda38640"}, > + { }, > +}; > +MODULE_DEVICE_TABLE(of, tda38640_of_match); Where is it used? You miss the user. > +#endif > + > +/* This is the driver that will be inserted */ > +static struct i2c_driver tda38640_driver = { > + .driver = { > + .name = "tda38640", > + }, > + .probe_new = tda38640_probe, > + .id_table = tda38640_id, > +}; Best regards, Krzysztof
Hi On 24-01-2023 04:40 pm, Krzysztof Kozlowski wrote: > On 24/01/2023 12:01, Naresh Solanki wrote: >> From: Patrick Rudolph <patrick.rudolph@9elements.com> >> >> Add the pmbus driver for the Infineon TDA38640 voltage regulator. >> >> Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> >> Signed-off-by: Naresh Solanki <Naresh.Solanki@9elements.com> >> --- >> .../devicetree/bindings/trivial-devices.yaml | 2 + > > Split bindings from driver code. Sure > >> drivers/hwmon/pmbus/Kconfig | 16 ++++ >> drivers/hwmon/pmbus/Makefile | 1 + >> drivers/hwmon/pmbus/tda38640.c | 78 +++++++++++++++++++ >> 4 files changed, 97 insertions(+) >> create mode 100644 drivers/hwmon/pmbus/tda38640.c >> >> diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml >> index f5c0a6283e61..a28b02036489 100644 >> --- a/Documentation/devicetree/bindings/trivial-devices.yaml >> +++ b/Documentation/devicetree/bindings/trivial-devices.yaml >> @@ -141,6 +141,8 @@ properties: >> - infineon,slb9645tt >> # Infineon SLB9673 I2C TPM 2.0 >> - infineon,slb9673 >> + # Infineon TDA38640 Voltage Regulator >> + - infineon,tda38640 >> # Infineon TLV493D-A1B6 I2C 3D Magnetic Sensor >> - infineon,tlv493d-a1b6 >> # Infineon Multi-phase Digital VR Controller xdpe11280 >> diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig >> index 30448e049486..9f4bbb9c487a 100644 >> --- a/drivers/hwmon/pmbus/Kconfig >> +++ b/drivers/hwmon/pmbus/Kconfig >> @@ -395,6 +395,22 @@ config SENSORS_STPDDC60 >> This driver can also be built as a module. If so, the module will >> be called stpddc60. >> >> +config SENSORS_TDA38640 >> + tristate "Infineon TDA38640" >> + help >> + If you say yes here you get hardware monitoring support for Infineon >> + TDA38640. >> + >> + This driver can also be built as a module. If so, the module will >> + be called tda38640. >> + >> +config SENSORS_TDA38640_REGULATOR >> + bool "Regulator support for TDA38640 and compatibles" >> + depends on SENSORS_TDA38640 && REGULATOR >> + help >> + If you say yes here you get regulator support for Infineon >> + TDA38640 as regulator. > > Drop entire option, why is it needed? You mean regulator option ? This is how other pmbus regulator devices have provided option. > >> + >> config SENSORS_TPS40422 >> tristate "TI TPS40422" >> help >> diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile >> index d9d2fa4bd6f7..3ae019916267 100644 >> --- a/drivers/hwmon/pmbus/Makefile >> +++ b/drivers/hwmon/pmbus/Makefile >> @@ -40,6 +40,7 @@ obj-$(CONFIG_SENSORS_PM6764TR) += pm6764tr.o >> obj-$(CONFIG_SENSORS_PXE1610) += pxe1610.o >> obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o >> obj-$(CONFIG_SENSORS_STPDDC60) += stpddc60.o >> +obj-$(CONFIG_SENSORS_TDA38640) += tda38640.o >> obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o >> obj-$(CONFIG_SENSORS_TPS53679) += tps53679.o >> obj-$(CONFIG_SENSORS_TPS546D24) += tps546d24.o >> diff --git a/drivers/hwmon/pmbus/tda38640.c b/drivers/hwmon/pmbus/tda38640.c >> new file mode 100644 >> index 000000000000..31e17a936b8c >> --- /dev/null >> +++ b/drivers/hwmon/pmbus/tda38640.c >> @@ -0,0 +1,78 @@ >> +// SPDX-License-Identifier: GPL-2.0+ >> +/* >> + * Hardware monitoring driver for Infineon TDA38640 >> + * >> + * 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 <linux/regulator/driver.h> >> +#include "pmbus.h" >> + >> +#if IS_ENABLED(CONFIG_SENSORS_TDA38640_REGULATOR) >> +static const struct regulator_desc tda38640_reg_desc[] = { >> + PMBUS_REGULATOR("vout", 0), >> +}; >> +#endif /* CONFIG_SENSORS_TDA38640_REGULATOR */ >> + >> +static struct pmbus_driver_info tda38640_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, >> +#if IS_ENABLED(CONFIG_SENSORS_TDA38640_REGULATOR) >> + .num_regulators = 1, >> + .reg_desc = tda38640_reg_desc, >> +#endif >> +}; >> + >> +static int tda38640_probe(struct i2c_client *client) >> +{ >> + return pmbus_do_probe(client, &tda38640_info); >> +} >> + >> +static const struct i2c_device_id tda38640_id[] = { >> + {"tda38640", 0}, >> + {} >> +}; >> + > > Drop blank line Sure > >> +MODULE_DEVICE_TABLE(i2c, tda38640_id); >> + >> +#ifdef CONFIG_OF > > Drop ifdefs and use __maybe_unused > >> +static const struct of_device_id tda38640_of_match[] = { >> + { .compatible = "infineon,tda38640"}, >> + { }, >> +}; >> +MODULE_DEVICE_TABLE(of, tda38640_of_match); > > Where is it used? You miss the user. I'm not sure if I get your question right. This chip is used in sbp1 board to power CPU rails. > >> +#endif >> + >> +/* This is the driver that will be inserted */ >> +static struct i2c_driver tda38640_driver = { >> + .driver = { >> + .name = "tda38640", >> + }, >> + .probe_new = tda38640_probe, >> + .id_table = tda38640_id, >> +}; > > Best regards, > Krzysztof > Best regards, Naresh
On 24/01/2023 12:45, Naresh Solanki wrote: > Hi > > On 24-01-2023 04:40 pm, Krzysztof Kozlowski wrote: >> On 24/01/2023 12:01, Naresh Solanki wrote: >>> From: Patrick Rudolph <patrick.rudolph@9elements.com> >>> >>> Add the pmbus driver for the Infineon TDA38640 voltage regulator. >>> >>> Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> >>> Signed-off-by: Naresh Solanki <Naresh.Solanki@9elements.com> >>> --- >>> .../devicetree/bindings/trivial-devices.yaml | 2 + >> >> Split bindings from driver code. > Sure >> >>> drivers/hwmon/pmbus/Kconfig | 16 ++++ >>> drivers/hwmon/pmbus/Makefile | 1 + >>> drivers/hwmon/pmbus/tda38640.c | 78 +++++++++++++++++++ >>> 4 files changed, 97 insertions(+) >>> create mode 100644 drivers/hwmon/pmbus/tda38640.c >>> >>> diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml >>> index f5c0a6283e61..a28b02036489 100644 >>> --- a/Documentation/devicetree/bindings/trivial-devices.yaml >>> +++ b/Documentation/devicetree/bindings/trivial-devices.yaml >>> @@ -141,6 +141,8 @@ properties: >>> - infineon,slb9645tt >>> # Infineon SLB9673 I2C TPM 2.0 >>> - infineon,slb9673 >>> + # Infineon TDA38640 Voltage Regulator >>> + - infineon,tda38640 >>> # Infineon TLV493D-A1B6 I2C 3D Magnetic Sensor >>> - infineon,tlv493d-a1b6 >>> # Infineon Multi-phase Digital VR Controller xdpe11280 >>> diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig >>> index 30448e049486..9f4bbb9c487a 100644 >>> --- a/drivers/hwmon/pmbus/Kconfig >>> +++ b/drivers/hwmon/pmbus/Kconfig >>> @@ -395,6 +395,22 @@ config SENSORS_STPDDC60 >>> This driver can also be built as a module. If so, the module will >>> be called stpddc60. >>> >>> +config SENSORS_TDA38640 >>> + tristate "Infineon TDA38640" >>> + help >>> + If you say yes here you get hardware monitoring support for Infineon >>> + TDA38640. >>> + >>> + This driver can also be built as a module. If so, the module will >>> + be called tda38640. >>> + >>> +config SENSORS_TDA38640_REGULATOR >>> + bool "Regulator support for TDA38640 and compatibles" >>> + depends on SENSORS_TDA38640 && REGULATOR >>> + help >>> + If you say yes here you get regulator support for Infineon >>> + TDA38640 as regulator. >> >> Drop entire option, why is it needed? > You mean regulator option ? > This is how other pmbus regulator devices have provided option. Hmmm... I wonder why this is of any use. >> >>> + >>> config SENSORS_TPS40422 >>> tristate "TI TPS40422" >>> help (...) >> >>> +static const struct of_device_id tda38640_of_match[] = { >>> + { .compatible = "infineon,tda38640"}, >>> + { }, >>> +}; >>> +MODULE_DEVICE_TABLE(of, tda38640_of_match); >> >> Where is it used? You miss the user. > I'm not sure if I get your question right. > This chip is used in sbp1 board to power CPU rails. No, where is the data structure used (except module autoloading)? Best regards, Krzysztof
Hi On 24-01-2023 05:35 pm, Krzysztof Kozlowski wrote: > On 24/01/2023 12:45, Naresh Solanki wrote: >> Hi >> >> On 24-01-2023 04:40 pm, Krzysztof Kozlowski wrote: >>> On 24/01/2023 12:01, Naresh Solanki wrote: >>>> From: Patrick Rudolph <patrick.rudolph@9elements.com> >>>> >>>> Add the pmbus driver for the Infineon TDA38640 voltage regulator. >>>> >>>> Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> >>>> Signed-off-by: Naresh Solanki <Naresh.Solanki@9elements.com> >>>> --- >>>> .../devicetree/bindings/trivial-devices.yaml | 2 + >>> >>> Split bindings from driver code. >> Sure >>> >>>> drivers/hwmon/pmbus/Kconfig | 16 ++++ >>>> drivers/hwmon/pmbus/Makefile | 1 + >>>> drivers/hwmon/pmbus/tda38640.c | 78 +++++++++++++++++++ >>>> 4 files changed, 97 insertions(+) >>>> create mode 100644 drivers/hwmon/pmbus/tda38640.c >>>> >>>> diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml >>>> index f5c0a6283e61..a28b02036489 100644 >>>> --- a/Documentation/devicetree/bindings/trivial-devices.yaml >>>> +++ b/Documentation/devicetree/bindings/trivial-devices.yaml >>>> @@ -141,6 +141,8 @@ properties: >>>> - infineon,slb9645tt >>>> # Infineon SLB9673 I2C TPM 2.0 >>>> - infineon,slb9673 >>>> + # Infineon TDA38640 Voltage Regulator >>>> + - infineon,tda38640 >>>> # Infineon TLV493D-A1B6 I2C 3D Magnetic Sensor >>>> - infineon,tlv493d-a1b6 >>>> # Infineon Multi-phase Digital VR Controller xdpe11280 >>>> diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig >>>> index 30448e049486..9f4bbb9c487a 100644 >>>> --- a/drivers/hwmon/pmbus/Kconfig >>>> +++ b/drivers/hwmon/pmbus/Kconfig >>>> @@ -395,6 +395,22 @@ config SENSORS_STPDDC60 >>>> This driver can also be built as a module. If so, the module will >>>> be called stpddc60. >>>> >>>> +config SENSORS_TDA38640 >>>> + tristate "Infineon TDA38640" >>>> + help >>>> + If you say yes here you get hardware monitoring support for Infineon >>>> + TDA38640. >>>> + >>>> + This driver can also be built as a module. If so, the module will >>>> + be called tda38640. >>>> + >>>> +config SENSORS_TDA38640_REGULATOR >>>> + bool "Regulator support for TDA38640 and compatibles" >>>> + depends on SENSORS_TDA38640 && REGULATOR >>>> + help >>>> + If you say yes here you get regulator support for Infineon >>>> + TDA38640 as regulator. >>> >>> Drop entire option, why is it needed? >> You mean regulator option ? >> This is how other pmbus regulator devices have provided option. > > Hmmm... I wonder why this is of any use. From what I can think of. Chip also provide pin to control regulator enable. If that is used in the design then the regulator option may not be needed. > >>> >>>> + >>>> config SENSORS_TPS40422 >>>> tristate "TI TPS40422" >>>> help > > (...) Yes this doesn't has regulator support in driver. > >>> >>>> +static const struct of_device_id tda38640_of_match[] = { >>>> + { .compatible = "infineon,tda38640"}, >>>> + { }, >>>> +}; >>>> +MODULE_DEVICE_TABLE(of, tda38640_of_match); >>> >>> Where is it used? You miss the user. >> I'm not sure if I get your question right. >> This chip is used in sbp1 board to power CPU rails. > > No, where is the data structure used (except module autoloading)? My use case is loading the driver base on DT. Not sure of other uses. > > Best regards, > Krzysztof > Best Regards, Naresh
On 24/01/2023 13:19, Naresh Solanki wrote: >>>> >>>>> +static const struct of_device_id tda38640_of_match[] = { >>>>> + { .compatible = "infineon,tda38640"}, >>>>> + { }, >>>>> +}; >>>>> +MODULE_DEVICE_TABLE(of, tda38640_of_match); >>>> >>>> Where is it used? You miss the user. >>> I'm not sure if I get your question right. >>> This chip is used in sbp1 board to power CPU rails. >> >> No, where is the data structure used (except module autoloading)? > My use case is loading the driver base on DT. Not sure of other uses. Where is it used in the code? Best regards, Krzysztof
diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml index f5c0a6283e61..a28b02036489 100644 --- a/Documentation/devicetree/bindings/trivial-devices.yaml +++ b/Documentation/devicetree/bindings/trivial-devices.yaml @@ -141,6 +141,8 @@ properties: - infineon,slb9645tt # Infineon SLB9673 I2C TPM 2.0 - infineon,slb9673 + # Infineon TDA38640 Voltage Regulator + - infineon,tda38640 # Infineon TLV493D-A1B6 I2C 3D Magnetic Sensor - infineon,tlv493d-a1b6 # Infineon Multi-phase Digital VR Controller xdpe11280 diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig index 30448e049486..9f4bbb9c487a 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig @@ -395,6 +395,22 @@ config SENSORS_STPDDC60 This driver can also be built as a module. If so, the module will be called stpddc60. +config SENSORS_TDA38640 + tristate "Infineon TDA38640" + help + If you say yes here you get hardware monitoring support for Infineon + TDA38640. + + This driver can also be built as a module. If so, the module will + be called tda38640. + +config SENSORS_TDA38640_REGULATOR + bool "Regulator support for TDA38640 and compatibles" + depends on SENSORS_TDA38640 && REGULATOR + help + If you say yes here you get regulator support for Infineon + TDA38640 as regulator. + config SENSORS_TPS40422 tristate "TI TPS40422" help diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile index d9d2fa4bd6f7..3ae019916267 100644 --- a/drivers/hwmon/pmbus/Makefile +++ b/drivers/hwmon/pmbus/Makefile @@ -40,6 +40,7 @@ obj-$(CONFIG_SENSORS_PM6764TR) += pm6764tr.o obj-$(CONFIG_SENSORS_PXE1610) += pxe1610.o obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o obj-$(CONFIG_SENSORS_STPDDC60) += stpddc60.o +obj-$(CONFIG_SENSORS_TDA38640) += tda38640.o obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o obj-$(CONFIG_SENSORS_TPS53679) += tps53679.o obj-$(CONFIG_SENSORS_TPS546D24) += tps546d24.o diff --git a/drivers/hwmon/pmbus/tda38640.c b/drivers/hwmon/pmbus/tda38640.c new file mode 100644 index 000000000000..31e17a936b8c --- /dev/null +++ b/drivers/hwmon/pmbus/tda38640.c @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Hardware monitoring driver for Infineon TDA38640 + * + * 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 <linux/regulator/driver.h> +#include "pmbus.h" + +#if IS_ENABLED(CONFIG_SENSORS_TDA38640_REGULATOR) +static const struct regulator_desc tda38640_reg_desc[] = { + PMBUS_REGULATOR("vout", 0), +}; +#endif /* CONFIG_SENSORS_TDA38640_REGULATOR */ + +static struct pmbus_driver_info tda38640_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, +#if IS_ENABLED(CONFIG_SENSORS_TDA38640_REGULATOR) + .num_regulators = 1, + .reg_desc = tda38640_reg_desc, +#endif +}; + +static int tda38640_probe(struct i2c_client *client) +{ + return pmbus_do_probe(client, &tda38640_info); +} + +static const struct i2c_device_id tda38640_id[] = { + {"tda38640", 0}, + {} +}; + +MODULE_DEVICE_TABLE(i2c, tda38640_id); + +#ifdef CONFIG_OF +static const struct of_device_id tda38640_of_match[] = { + { .compatible = "infineon,tda38640"}, + { }, +}; +MODULE_DEVICE_TABLE(of, tda38640_of_match); +#endif + +/* This is the driver that will be inserted */ +static struct i2c_driver tda38640_driver = { + .driver = { + .name = "tda38640", + }, + .probe_new = tda38640_probe, + .id_table = tda38640_id, +}; + +module_i2c_driver(tda38640_driver); + +MODULE_AUTHOR("Patrick Rudolph <patrick.rudolph@9elements.com>"); +MODULE_DESCRIPTION("PMBus driver for Infineon TDA38640"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS(PMBUS);