All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] hwmon: Enabled device tree for generic pmbus devices
@ 2016-08-19  4:11 Matt Weber
  2016-08-19  4:39 ` Guenter Roeck
  0 siblings, 1 reply; 4+ messages in thread
From: Matt Weber @ 2016-08-19  4:11 UTC (permalink / raw)
  To: linux-hwmon; +Cc: linux, jdelvare, Matt Weber, Ronak Desai

This patch adds device tree based enumeration support for generic pmbus
sensors  ADP4000, BMR453, BMR454, MDT040, NCP4200, NCP4208,
PDT003, PDT006, PDT012, TPS40400, TPS544B20, TPS544B25, TPS544C20,
TPS544C25, and UDT020.

Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
Signed-off-by: Ronak Desai <ronak.desai@rockwellcollins.com>
---
 drivers/hwmon/pmbus/pmbus.c | 82 ++++++++++++++++++++++++++++++++++-----------
 1 file changed, 63 insertions(+), 19 deletions(-)

diff --git a/drivers/hwmon/pmbus/pmbus.c b/drivers/hwmon/pmbus/pmbus.c
index 0a74991..d09c0bb 100644
--- a/drivers/hwmon/pmbus/pmbus.c
+++ b/drivers/hwmon/pmbus/pmbus.c
@@ -26,6 +26,34 @@
 #include <linux/mutex.h>
 #include <linux/i2c.h>
 #include "pmbus.h"
+#ifdef CONFIG_OF
+#include <linux/of.h>
+#endif
+
+enum chips { pmbus, generic_sensor };
+
+#ifdef CONFIG_OF
+static const struct of_device_id generic_pmbus_dt_match[] = {
+	{ .compatible = "on,adp4000", .data = (void *)generic_sensor },
+	{ .compatible = "ericsson,bmr453", .data = (void *)generic_sensor },
+	{ .compatible = "ericsson,bmr454", .data = (void *)generic_sensor },
+	{ .compatible = "lineage,mdt040", .data = (void *)generic_sensor },
+	{ .compatible = "on,ncp4200", .data = (void *)generic_sensor },
+	{ .compatible = "on,ncp4208", .data = (void *)generic_sensor },
+	{ .compatible = "lineage,pdt003", .data = (void *)generic_sensor },
+	{ .compatible = "lineage,pdt006", .data = (void *)generic_sensor },
+	{ .compatible = "lineage,pdt012", .data = (void *)generic_sensor },
+	{ .compatible = "general,pmbus", .data = (void *)pmbus },
+	{ .compatible = "ti,tps40400", .data = (void *)generic_sensor },
+	{ .compatible = "ti,tps544b20", .data = (void *)generic_sensor },
+	{ .compatible = "ti,tps544b25", .data = (void *)generic_sensor },
+	{ .compatible = "ti,tps544c20", .data = (void *)generic_sensor },
+	{ .compatible = "ti,tps544c25", .data = (void *)generic_sensor },
+	{ .compatible = "lineage,udt020", .data = (void *)generic_sensor },
+	{ }
+};
+#endif
+
 
 /*
  * Find sensor groups and status registers on each page.
@@ -163,6 +191,19 @@ abort:
 	return ret;
 }
 
+static inline int generic_pmbus_get_driver_data(struct i2c_client *i2c,
+		const struct i2c_device_id *id)
+{
+#ifdef CONFIG_OF
+	if (i2c->dev.of_node) {
+		const struct of_device_id *match;
+		match = of_match_node(generic_pmbus_dt_match, i2c->dev.of_node);
+		return (int)match->data;
+	}
+#endif
+	return (int)id->driver_data;
+}
+
 static int pmbus_probe(struct i2c_client *client,
 		       const struct i2c_device_id *id)
 {
@@ -173,7 +214,7 @@ static int pmbus_probe(struct i2c_client *client,
 	if (!info)
 		return -ENOMEM;
 
-	info->pages = id->driver_data;
+	info->pages = generic_pmbus_get_driver_data(client, id);
 	info->identify = pmbus_identify;
 
 	return pmbus_do_probe(client, id, info);
@@ -183,22 +224,22 @@ static int pmbus_probe(struct i2c_client *client,
  * Use driver_data to set the number of pages supported by the chip.
  */
 static const struct i2c_device_id pmbus_id[] = {
-	{"adp4000", 1},
-	{"bmr453", 1},
-	{"bmr454", 1},
-	{"mdt040", 1},
-	{"ncp4200", 1},
-	{"ncp4208", 1},
-	{"pdt003", 1},
-	{"pdt006", 1},
-	{"pdt012", 1},
-	{"pmbus", 0},
-	{"tps40400", 1},
-	{"tps544b20", 1},
-	{"tps544b25", 1},
-	{"tps544c20", 1},
-	{"tps544c25", 1},
-	{"udt020", 1},
+	{"adp4000", generic_sensor},
+	{"bmr453", generic_sensor},
+	{"bmr454", generic_sensor},
+	{"mdt040", generic_sensor},
+	{"ncp4200", generic_sensor},
+	{"ncp4208", generic_sensor},
+	{"pdt003", generic_sensor},
+	{"pdt006", generic_sensor},
+	{"pdt012", generic_sensor},
+	{"pmbus", pmbus},
+	{"tps40400", generic_sensor},
+	{"tps544b20", generic_sensor},
+	{"tps544b25", generic_sensor},
+	{"tps544c20", generic_sensor},
+	{"tps544c25", generic_sensor},
+	{"udt020", generic_sensor},
 	{}
 };
 
@@ -207,8 +248,11 @@ MODULE_DEVICE_TABLE(i2c, pmbus_id);
 /* This is the driver that will be inserted */
 static struct i2c_driver pmbus_driver = {
 	.driver = {
-		   .name = "pmbus",
-		   },
+		.name = "pmbus",
+#ifdef CONFIG_OF
+		.of_match_table = of_match_ptr(generic_pmbus_dt_match),
+#endif
+	},
 	.probe = pmbus_probe,
 	.remove = pmbus_do_remove,
 	.id_table = pmbus_id,
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-08-19 17:57 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-19  4:11 [PATCH] hwmon: Enabled device tree for generic pmbus devices Matt Weber
2016-08-19  4:39 ` Guenter Roeck
2016-08-19 16:15   ` Matthew Weber
2016-08-19 17:57     ` Guenter Roeck

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.