hwmon: (pmbus) Add Infineon IRPS5401 driver
authorRobert Hancock <hancock@sedsystems.ca>
Wed, 5 Jun 2019 19:49:01 +0000 (13:49 -0600)
committerGuenter Roeck <linux@roeck-us.net>
Mon, 24 Jun 2019 01:33:01 +0000 (18:33 -0700)
Add a driver to support the Infineon IRPS5401 PMIC. This chip has 5
pages corresponding to 4 switching outputs and one linear (LDO) output.
The switching and LDO outputs have slightly different supported
parameters.

Signed-off-by: Robert Hancock <hancock@sedsystems.ca>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/pmbus/Kconfig
drivers/hwmon/pmbus/Makefile
drivers/hwmon/pmbus/irps5401.c [new file with mode: 0644]

index 338ef9b5a3956fc192dce1c4025eb7aa482a605c..b6588483fae125a28562df82e90b2fb1446f29ea 100644 (file)
@@ -64,6 +64,15 @@ config SENSORS_IR38064
          This driver can also be built as a module. If so, the module will
          be called ir38064.
 
+config SENSORS_IRPS5401
+       tristate "Infineon IRPS5401"
+       help
+         If you say yes here you get hardware monitoring support for the
+         Infineon IRPS5401 controller.
+
+         This driver can also be built as a module. If so, the module will
+         be called irps5401.
+
 config SENSORS_ISL68137
        tristate "Intersil ISL68137"
        help
index b0fbd017a91a74851bf5bc9e57edd8c9a6c905b1..c950ea9a5d003e0645be173a871303875cc6a47b 100644 (file)
@@ -9,6 +9,7 @@ obj-$(CONFIG_SENSORS_ADM1275)   += adm1275.o
 obj-$(CONFIG_SENSORS_IBM_CFFPS)        += ibm-cffps.o
 obj-$(CONFIG_SENSORS_IR35221)  += ir35221.o
 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_LTC2978)  += ltc2978.o
diff --git a/drivers/hwmon/pmbus/irps5401.c b/drivers/hwmon/pmbus/irps5401.c
new file mode 100644 (file)
index 0000000..d37daa0
--- /dev/null
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Hardware monitoring driver for the Infineon IRPS5401M PMIC.
+ *
+ * Copyright (c) 2019 SED Systems, a division of Calian Ltd.
+ *
+ * The device supports VOUT_PEAK, IOUT_PEAK, and TEMPERATURE_PEAK, however
+ * this driver does not currently support them.
+ */
+
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include "pmbus.h"
+
+#define IRPS5401_SW_FUNC (PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | \
+                         PMBUS_HAVE_STATUS_INPUT | \
+                         PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | \
+                         PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | \
+                         PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | \
+                         PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP)
+
+#define IRPS5401_LDO_FUNC (PMBUS_HAVE_VIN | \
+                          PMBUS_HAVE_STATUS_INPUT | \
+                          PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | \
+                          PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | \
+                          PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | \
+                          PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP)
+
+static struct pmbus_driver_info irps5401_info = {
+       .pages = 5,
+       .func[0] = IRPS5401_SW_FUNC,
+       .func[1] = IRPS5401_SW_FUNC,
+       .func[2] = IRPS5401_SW_FUNC,
+       .func[3] = IRPS5401_SW_FUNC,
+       .func[4] = IRPS5401_LDO_FUNC,
+};
+
+static int irps5401_probe(struct i2c_client *client,
+                         const struct i2c_device_id *id)
+{
+       return pmbus_do_probe(client, id, &irps5401_info);
+}
+
+static const struct i2c_device_id irps5401_id[] = {
+       {"irps5401", 0},
+       {}
+};
+
+MODULE_DEVICE_TABLE(i2c, irps5401_id);
+
+static struct i2c_driver irps5401_driver = {
+       .driver = {
+                  .name = "irps5401",
+                  },
+       .probe = irps5401_probe,
+       .remove = pmbus_do_remove,
+       .id_table = irps5401_id,
+};
+
+module_i2c_driver(irps5401_driver);
+
+MODULE_AUTHOR("Robert Hancock");
+MODULE_DESCRIPTION("PMBus driver for Infineon IRPS5401");
+MODULE_LICENSE("GPL");