Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1587636 > unrolled thread

[PATCH 00/19] hwmon: Add OF device table to I2C drivers that are missing it

Started byJavier Martinez Canillas <javier@osg.samsung.com>
First post2017-02-24 14:20 +0100
Last post2017-02-24 18:20 +0100
Articles 11 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 00/19] hwmon: Add OF device table to I2C drivers that are missing it Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:20 +0100
    [PATCH 07/19] hwmon: (ina2xx) Add OF device ID table Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:20 +0100
    [PATCH 03/19] hwmon: (ads1015) Add OF device ID table Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:20 +0100
    [PATCH 16/19] hwmon: (stts751) Add OF device ID table Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:20 +0100
    [PATCH 19/19] hwmon: (tmp421) Add OF device ID table Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:20 +0100
    [PATCH 12/19] hwmon: (lm95245) Add OF device ID table Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:20 +0100
    [PATCH 08/19] hwmon: (lm63) Add OF device ID table Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:20 +0100
    [PATCH 04/19] hwmon: (ads7828) Add OF device ID table Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:30 +0100
    [PATCH 15/19] hwmon: (ucd9200) Add OF device ID table Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:30 +0100
    [PATCH 02/19] hwmon: (adc128d818) Add OF device ID table Javier Martinez Canillas <javier@osg.samsung.com> - 2017-02-24 14:30 +0100
    Re: [PATCH 00/19] hwmon: Add OF device table to I2C drivers that are  missing it Guenter Roeck <linux@roeck-us.net> - 2017-02-24 18:20 +0100

#1587636 — [PATCH 00/19] hwmon: Add OF device table to I2C drivers that are missing it

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:20 +0100
Subject[PATCH 00/19] hwmon: Add OF device table to I2C drivers that are missing it
Message-ID<tenWV-FB-5@gated-at.bofh.it>
Hello,

This series add OF device ID tables to hwmon I2C drivers whose devices are
either used in Device Tree source files or are listed in binding docs as a
compatible string.

That's done because the plan is to change the I2C core to report proper OF
modaliases instead of always reporting a MODALIAS=i2c:<foo> regardless if
a device was registered via DT or using the legacy platform data.

So these patches will make sure that hwmon I2C drivers will continue to be
able to module auto-load once the I2C core is changed.

Best regards,
Javier


Javier Martinez Canillas (19):
  hwmon: (ad7414) Add OF device ID table
  hwmon: (adc128d818) Add OF device ID table
  hwmon: (ads1015) Add OF device ID table
  hwmon: (ads7828) Add OF device ID table
  hwmon: (adt7475) Add OF device ID table
  hwmon: (ina209) Add OF device ID table
  hwmon: (ina2xx) Add OF device ID table
  hwmon: (lm63) Add OF device ID table
  hwmon: (lm75) Add OF device ID table
  hwmon: (lm85) Add OF device ID table
  hwmon: (lm90) Add OF device ID table
  hwmon: (lm95245) Add OF device ID table
  hwmon: (max6697) Add OF device ID table
  hwmon: (ucd9000) Add OF device ID table
  hwmon: (ucd9200) Add OF device ID table
  hwmon: (stts751) Add OF device ID table
  hwmon: (tmp102) Add OF device ID table
  hwmon: (tmp103) Add OF device ID table
  hwmon: (tmp421) Add OF device ID table

 drivers/hwmon/ad7414.c        |   7 +++
 drivers/hwmon/adc128d818.c    |   7 +++
 drivers/hwmon/ads1015.c       |  22 +++++++++-
 drivers/hwmon/ads7828.c       |  24 +++++++++-
 drivers/hwmon/adt7475.c       |  31 ++++++++++++-
 drivers/hwmon/ina209.c        |   7 +++
 drivers/hwmon/ina2xx.c        |  35 ++++++++++++++-
 drivers/hwmon/lm63.c          |  23 ++++++++++
 drivers/hwmon/lm75.c          |  98 ++++++++++++++++++++++++++++++++++++++++-
 drivers/hwmon/lm85.c          |  56 ++++++++++++++++++++++-
 drivers/hwmon/lm90.c          | 100 +++++++++++++++++++++++++++++++++++++++++-
 drivers/hwmon/lm95245.c       |   8 ++++
 drivers/hwmon/max6697.c       |  52 +++++++++++++++++++++-
 drivers/hwmon/pmbus/ucd9000.c |  39 +++++++++++++++-
 drivers/hwmon/pmbus/ucd9200.c |  48 +++++++++++++++++++-
 drivers/hwmon/stts751.c       |   7 +++
 drivers/hwmon/tmp102.c        |   7 +++
 drivers/hwmon/tmp103.c        |   7 +++
 drivers/hwmon/tmp421.c        |  35 ++++++++++++++-
 19 files changed, 601 insertions(+), 12 deletions(-)

-- 
2.9.3

[toc] | [next] | [standalone]


#1587638 — [PATCH 07/19] hwmon: (ina2xx) Add OF device ID table

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:20 +0100
Subject[PATCH 07/19] hwmon: (ina2xx) Add OF device ID table
Message-ID<tenWX-FB-61@gated-at.bofh.it>
In reply to#1587636
The driver doesn't have a struct of_device_id table but supported devices
are registered via Device Trees. This is working on the assumption that a
I2C device registered via OF will always match a legacy I2C device ID and
that the MODALIAS reported will always be of the form i2c:<device>.

But this could change in the future so the correct approach is to have an
OF device ID table if the devices are registered via OF.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---

 drivers/hwmon/ina2xx.c | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/drivers/hwmon/ina2xx.c b/drivers/hwmon/ina2xx.c
index b24f1d3045f0..62e38fa8cda2 100644
--- a/drivers/hwmon/ina2xx.c
+++ b/drivers/hwmon/ina2xx.c
@@ -34,6 +34,7 @@
 #include <linux/hwmon.h>
 #include <linux/hwmon-sysfs.h>
 #include <linux/jiffies.h>
+#include <linux/of_device.h>
 #include <linux/of.h>
 #include <linux/delay.h>
 #include <linux/util_macros.h>
@@ -424,13 +425,19 @@ static int ina2xx_probe(struct i2c_client *client,
 	struct device *hwmon_dev;
 	u32 val;
 	int ret, group = 0;
+	enum ina2xx_ids chip;
+
+	if (client->dev.of_node)
+		chip = (enum ina2xx_ids)of_device_get_match_data(&client->dev);
+	else
+		chip = id->driver_data;
 
 	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 
 	/* set the device type */
-	data->config = &ina2xx_config[id->driver_data];
+	data->config = &ina2xx_config[chip];
 
 	if (of_property_read_u32(dev->of_node, "shunt-resistor", &val) < 0) {
 		struct ina2xx_platform_data *pdata = dev_get_platdata(dev);
@@ -487,9 +494,35 @@ static const struct i2c_device_id ina2xx_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, ina2xx_id);
 
+static const struct of_device_id ina2xx_of_match[] = {
+	{
+		.compatible = "ti,ina219",
+		.data = (void *)ina219
+	},
+	{
+		.compatible = "ti,ina220",
+		.data = (void *)ina219
+	},
+	{
+		.compatible = "ti,ina226",
+		.data = (void *)ina226
+	},
+	{
+		.compatible = "ti,ina230",
+		.data = (void *)ina226
+	},
+	{
+		.compatible = "ti,ina231",
+		.data = (void *)ina226
+	},
+	{ },
+};
+MODULE_DEVICE_TABLE(of, ina2xx_of_match);
+
 static struct i2c_driver ina2xx_driver = {
 	.driver = {
 		.name	= "ina2xx",
+		.of_match_table = of_match_ptr(ina2xx_of_match),
 	},
 	.probe		= ina2xx_probe,
 	.id_table	= ina2xx_id,
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1587642 — [PATCH 03/19] hwmon: (ads1015) Add OF device ID table

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:20 +0100
Subject[PATCH 03/19] hwmon: (ads1015) Add OF device ID table
Message-ID<tenWY-FB-77@gated-at.bofh.it>
In reply to#1587636
The driver doesn't have a struct of_device_id table but supported devices
are registered via Device Trees. This is working on the assumption that a
I2C device registered via OF will always match a legacy I2C device ID and
that the MODALIAS reported will always be of the form i2c:<device>.

But this could change in the future so the correct approach is to have an
OF device ID table if the devices are registered via OF.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---

 drivers/hwmon/ads1015.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/hwmon/ads1015.c b/drivers/hwmon/ads1015.c
index 2b3105c8aed3..5140c27d16dd 100644
--- a/drivers/hwmon/ads1015.c
+++ b/drivers/hwmon/ads1015.c
@@ -31,6 +31,7 @@
 #include <linux/hwmon-sysfs.h>
 #include <linux/err.h>
 #include <linux/mutex.h>
+#include <linux/of_device.h>
 #include <linux/of.h>
 
 #include <linux/i2c/ads1015.h>
@@ -268,7 +269,12 @@ static int ads1015_probe(struct i2c_client *client,
 			    GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
-	data->id = id->driver_data;
+
+	if (client->dev.of_node)
+		data->id = (enum ads1015_chips)
+			of_device_get_match_data(&client->dev);
+	else
+		data->id = id->driver_data;
 	i2c_set_clientdata(client, data);
 	mutex_init(&data->update_lock);
 
@@ -303,9 +309,23 @@ static const struct i2c_device_id ads1015_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, ads1015_id);
 
+static const struct of_device_id ads1015_of_match[] = {
+	{
+		.compatible = "ti,ads1015",
+		.data = (void *)ads1015
+	},
+	{
+		.compatible = "ti,ads1115",
+		.data = (void *)ads1115
+	},
+	{ },
+};
+MODULE_DEVICE_TABLE(of, ads1015_of_match);
+
 static struct i2c_driver ads1015_driver = {
 	.driver = {
 		.name = "ads1015",
+		.of_match_table = of_match_ptr(ads1015_of_match),
 	},
 	.probe = ads1015_probe,
 	.remove = ads1015_remove,
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1587645 — [PATCH 16/19] hwmon: (stts751) Add OF device ID table

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:20 +0100
Subject[PATCH 16/19] hwmon: (stts751) Add OF device ID table
Message-ID<tenWX-FB-71@gated-at.bofh.it>
In reply to#1587636
The driver doesn't have a struct of_device_id table but supported devices
are registered via Device Trees. This is working on the assumption that a
I2C device registered via OF will always match a legacy I2C device ID and
that the MODALIAS reported will always be of the form i2c:<device>.

But this could change in the future so the correct approach is to have an
OF device ID table if the devices are registered via OF.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---

 drivers/hwmon/stts751.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/hwmon/stts751.c b/drivers/hwmon/stts751.c
index 55450680fb58..d56251d6eec2 100644
--- a/drivers/hwmon/stts751.c
+++ b/drivers/hwmon/stts751.c
@@ -85,6 +85,12 @@ static const struct i2c_device_id stts751_id[] = {
 	{ }
 };
 
+static const struct of_device_id stts751_of_match[] = {
+	{ .compatible = "stts751" },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, stts751_of_match);
+
 struct stts751_priv {
 	struct device *dev;
 	struct i2c_client *client;
@@ -819,6 +825,7 @@ static struct i2c_driver stts751_driver = {
 	.class		= I2C_CLASS_HWMON,
 	.driver = {
 		.name	= DEVNAME,
+		.of_match_table = of_match_ptr(stts751_of_match),
 	},
 	.probe		= stts751_probe,
 	.id_table	= stts751_id,
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1587647 — [PATCH 19/19] hwmon: (tmp421) Add OF device ID table

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:20 +0100
Subject[PATCH 19/19] hwmon: (tmp421) Add OF device ID table
Message-ID<tenWY-FB-85@gated-at.bofh.it>
In reply to#1587636
The driver doesn't have a struct of_device_id table but supported devices
are registered via Device Trees. This is working on the assumption that a
I2C device registered via OF will always match a legacy I2C device ID and
that the MODALIAS reported will always be of the form i2c:<device>.

But this could change in the future so the correct approach is to have an
OF device ID table if the devices are registered via OF.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>

---

 drivers/hwmon/tmp421.c | 35 +++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/drivers/hwmon/tmp421.c b/drivers/hwmon/tmp421.c
index bfb98b96c781..e36399213324 100644
--- a/drivers/hwmon/tmp421.c
+++ b/drivers/hwmon/tmp421.c
@@ -29,6 +29,7 @@
 #include <linux/hwmon-sysfs.h>
 #include <linux/err.h>
 #include <linux/mutex.h>
+#include <linux/of_device.h>
 #include <linux/sysfs.h>
 
 /* Addresses to scan */
@@ -69,6 +70,31 @@ static const struct i2c_device_id tmp421_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, tmp421_id);
 
+static const struct of_device_id tmp421_of_match[] = {
+	{
+		.compatible = "ti,tmp421",
+		.data = (void *)2
+	},
+	{
+		.compatible = "ti,tmp422",
+		.data = (void *)3
+	},
+	{
+		.compatible = "ti,tmp423",
+		.data = (void *)4
+	},
+	{
+		.compatible = "ti,tmp441",
+		.data = (void *)2
+	},
+	{
+		.compatible = "ti,tmp422",
+		.data = (void *)3
+	},
+	{ },
+};
+MODULE_DEVICE_TABLE(of, tmp421_of_match);
+
 struct tmp421_data {
 	struct i2c_client *client;
 	struct mutex update_lock;
@@ -78,7 +104,7 @@ struct tmp421_data {
 	struct hwmon_chip_info chip;
 	char valid;
 	unsigned long last_updated;
-	int channels;
+	unsigned long channels;
 	u8 config;
 	s16 temp[4];
 };
@@ -272,7 +298,11 @@ static int tmp421_probe(struct i2c_client *client,
 		return -ENOMEM;
 
 	mutex_init(&data->update_lock);
-	data->channels = id->driver_data;
+	if (client->dev.of_node)
+		data->channels = (unsigned long)
+			of_device_get_match_data(&client->dev);
+	else
+		data->channels = id->driver_data;
 	data->client = client;
 
 	err = tmp421_init_client(client);
@@ -301,6 +331,7 @@ static struct i2c_driver tmp421_driver = {
 	.class = I2C_CLASS_HWMON,
 	.driver = {
 		.name	= "tmp421",
+		.of_match_table = of_match_ptr(tmp421_of_match),
 	},
 	.probe = tmp421_probe,
 	.id_table = tmp421_id,
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1587649 — [PATCH 12/19] hwmon: (lm95245) Add OF device ID table

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:20 +0100
Subject[PATCH 12/19] hwmon: (lm95245) Add OF device ID table
Message-ID<tenWY-FB-89@gated-at.bofh.it>
In reply to#1587636
The driver doesn't have a struct of_device_id table but supported devices
are registered via Device Trees. This is working on the assumption that a
I2C device registered via OF will always match a legacy I2C device ID and
that the MODALIAS reported will always be of the form i2c:<device>.

But this could change in the future so the correct approach is to have an
OF device ID table if the devices are registered via OF.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---

 drivers/hwmon/lm95245.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/hwmon/lm95245.c b/drivers/hwmon/lm95245.c
index a3bfd88752ca..27cb06d65594 100644
--- a/drivers/hwmon/lm95245.c
+++ b/drivers/hwmon/lm95245.c
@@ -622,10 +622,18 @@ static const struct i2c_device_id lm95245_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, lm95245_id);
 
+static const struct of_device_id lm95245_of_match[] = {
+	{ .compatible = "national,lm95235" },
+	{ .compatible = "national,lm95245" },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, lm95245_of_match);
+
 static struct i2c_driver lm95245_driver = {
 	.class		= I2C_CLASS_HWMON,
 	.driver = {
 		.name	= "lm95245",
+		.of_match_table = of_match_ptr(lm95245_of_match),
 	},
 	.probe		= lm95245_probe,
 	.id_table	= lm95245_id,
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1587650 — [PATCH 08/19] hwmon: (lm63) Add OF device ID table

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:20 +0100
Subject[PATCH 08/19] hwmon: (lm63) Add OF device ID table
Message-ID<tenWY-FB-91@gated-at.bofh.it>
In reply to#1587636
The driver doesn't have a struct of_device_id table but supported devices
are registered via Device Trees. This is working on the assumption that a
I2C device registered via OF will always match a legacy I2C device ID and
that the MODALIAS reported will always be of the form i2c:<device>.

But this could change in the future so the correct approach is to have an
OF device ID table if the devices are registered via OF.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---

 drivers/hwmon/lm63.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c
index 2e1948699114..4c1770920d29 100644
--- a/drivers/hwmon/lm63.c
+++ b/drivers/hwmon/lm63.c
@@ -46,6 +46,7 @@
 #include <linux/hwmon.h>
 #include <linux/err.h>
 #include <linux/mutex.h>
+#include <linux/of_device.h>
 #include <linux/sysfs.h>
 #include <linux/types.h>
 
@@ -1115,6 +1116,10 @@ static int lm63_probe(struct i2c_client *client,
 	mutex_init(&data->update_lock);
 
 	/* Set the device type */
+	if (client->dev.of_node)
+		data->kind = (enum chips)of_device_get_match_data(&client->dev);
+	else
+		data->kind = id->driver_data;
 	data->kind = id->driver_data;
 	if (data->kind == lm64)
 		data->temp2_offset = 16000;
@@ -1149,10 +1154,28 @@ static const struct i2c_device_id lm63_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, lm63_id);
 
+static const struct of_device_id lm63_of_match[] = {
+	{
+		.compatible = "national,lm63",
+		.data = (void *)lm63
+	},
+	{
+		.compatible = "national,lm64",
+		.data = (void *)lm64
+	},
+	{
+		.compatible = "national,lm96163",
+		.data = (void *)lm96163
+	},
+	{ },
+};
+MODULE_DEVICE_TABLE(of, lm63_of_match);
+
 static struct i2c_driver lm63_driver = {
 	.class		= I2C_CLASS_HWMON,
 	.driver = {
 		.name	= "lm63",
+		.of_match_table = of_match_ptr(lm63_of_match),
 	},
 	.probe		= lm63_probe,
 	.id_table	= lm63_id,
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1587660 — [PATCH 04/19] hwmon: (ads7828) Add OF device ID table

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:30 +0100
Subject[PATCH 04/19] hwmon: (ads7828) Add OF device ID table
Message-ID<teo6C-J9-17@gated-at.bofh.it>
In reply to#1587636
The driver doesn't have a struct of_device_id table but supported devices
are registered via Device Trees. This is working on the assumption that a
I2C device registered via OF will always match a legacy I2C device ID and
that the MODALIAS reported will always be of the form i2c:<device>.

But this could change in the future so the correct approach is to have an
OF device ID table if the devices are registered via OF.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---

 drivers/hwmon/ads7828.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/drivers/hwmon/ads7828.c b/drivers/hwmon/ads7828.c
index ee396ff167d9..b0ef66687816 100644
--- a/drivers/hwmon/ads7828.c
+++ b/drivers/hwmon/ads7828.c
@@ -31,6 +31,7 @@
 #include <linux/i2c.h>
 #include <linux/init.h>
 #include <linux/module.h>
+#include <linux/of_device.h>
 #include <linux/platform_data/ads7828.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
@@ -121,6 +122,7 @@ static int ads7828_probe(struct i2c_client *client,
 	bool diff_input = false;
 	bool ext_vref = false;
 	unsigned int regval;
+	enum ads7828_chips chip;
 
 	data = devm_kzalloc(dev, sizeof(struct ads7828_data), GFP_KERNEL);
 	if (!data)
@@ -133,12 +135,18 @@ static int ads7828_probe(struct i2c_client *client,
 			vref_mv = pdata->vref_mv;
 	}
 
+	if (client->dev.of_node)
+		chip = (enum ads7828_chips)
+			of_device_get_match_data(&client->dev);
+	else
+		chip = id->driver_data;
+
 	/* Bound Vref with min/max values */
 	vref_mv = clamp_val(vref_mv, ADS7828_EXT_VREF_MV_MIN,
 			    ADS7828_EXT_VREF_MV_MAX);
 
 	/* ADS7828 uses 12-bit samples, while ADS7830 is 8-bit */
-	if (id->driver_data == ads7828) {
+	if (chip == ads7828) {
 		data->lsb_resol = DIV_ROUND_CLOSEST(vref_mv * 1000, 4096);
 		data->regmap = devm_regmap_init_i2c(client,
 						    &ads2828_regmap_config);
@@ -177,9 +185,23 @@ static const struct i2c_device_id ads7828_device_ids[] = {
 };
 MODULE_DEVICE_TABLE(i2c, ads7828_device_ids);
 
+static const struct of_device_id ads7828_of_match[] = {
+	{
+		.compatible = "ti,ads7828",
+		.data = (void *)ads7828
+	},
+	{
+		.compatible = "ti,ads7830",
+		.data = (void *)ads7830
+	},
+	{ },
+};
+MODULE_DEVICE_TABLE(of, ads7828_of_match);
+
 static struct i2c_driver ads7828_driver = {
 	.driver = {
 		.name = "ads7828",
+		.of_match_table = of_match_ptr(ads7828_of_match),
 	},
 
 	.id_table = ads7828_device_ids,
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1587663 — [PATCH 15/19] hwmon: (ucd9200) Add OF device ID table

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:30 +0100
Subject[PATCH 15/19] hwmon: (ucd9200) Add OF device ID table
Message-ID<teo6D-J9-29@gated-at.bofh.it>
In reply to#1587636
The driver doesn't have a struct of_device_id table but supported devices
are registered via Device Trees. This is working on the assumption that a
I2C device registered via OF will always match a legacy I2C device ID and
that the MODALIAS reported will always be of the form i2c:<device>.

But this could change in the future so the correct approach is to have an
OF device ID table if the devices are registered via OF.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---

 drivers/hwmon/pmbus/ucd9200.c | 48 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/drivers/hwmon/pmbus/ucd9200.c b/drivers/hwmon/pmbus/ucd9200.c
index 033d6aca47d3..a8712c5ded4e 100644
--- a/drivers/hwmon/pmbus/ucd9200.c
+++ b/drivers/hwmon/pmbus/ucd9200.c
@@ -20,6 +20,7 @@
 
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/of_device.h>
 #include <linux/init.h>
 #include <linux/err.h>
 #include <linux/slab.h>
@@ -46,12 +47,50 @@ static const struct i2c_device_id ucd9200_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, ucd9200_id);
 
+static const struct of_device_id ucd9200_of_match[] = {
+	{
+		.compatible = "ti,cd9200",
+		.data = (void *)ucd9200
+	},
+	{
+		.compatible = "ti,cd9220",
+		.data = (void *)ucd9220
+	},
+	{
+		.compatible = "ti,cd9222",
+		.data = (void *)ucd9222
+	},
+	{
+		.compatible = "ti,cd9224",
+		.data = (void *)ucd9224
+	},
+	{
+		.compatible = "ti,cd9240",
+		.data = (void *)ucd9240
+	},
+	{
+		.compatible = "ti,cd9244",
+		.data = (void *)ucd9244
+	},
+	{
+		.compatible = "ti,cd9246",
+		.data = (void *)ucd9246
+	},
+	{
+		.compatible = "ti,cd9248",
+		.data = (void *)ucd9248
+	},
+	{ },
+};
+MODULE_DEVICE_TABLE(of, ucd9200_of_match);
+
 static int ucd9200_probe(struct i2c_client *client,
 			 const struct i2c_device_id *id)
 {
 	u8 block_buffer[I2C_SMBUS_BLOCK_MAX + 1];
 	struct pmbus_driver_info *info;
 	const struct i2c_device_id *mid;
+	enum chips chip;
 	int i, j, ret;
 
 	if (!i2c_check_functionality(client->adapter,
@@ -76,7 +115,13 @@ static int ucd9200_probe(struct i2c_client *client,
 		dev_err(&client->dev, "Unsupported device\n");
 		return -ENODEV;
 	}
-	if (id->driver_data != ucd9200 && id->driver_data != mid->driver_data)
+
+	if (client->dev.of_node)
+		chip = (enum chips)of_device_get_match_data(&client->dev);
+	else
+		chip = id->driver_data;
+
+	if (chip != ucd9200 && chip != mid->driver_data)
 		dev_notice(&client->dev,
 			   "Device mismatch: Configured %s, detected %s\n",
 			   id->name, mid->name);
@@ -167,6 +212,7 @@ static int ucd9200_probe(struct i2c_client *client,
 static struct i2c_driver ucd9200_driver = {
 	.driver = {
 		.name = "ucd9200",
+		.of_match_table = of_match_ptr(ucd9200_of_match),
 	},
 	.probe = ucd9200_probe,
 	.remove = pmbus_do_remove,
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1587664 — [PATCH 02/19] hwmon: (adc128d818) Add OF device ID table

FromJavier Martinez Canillas <javier@osg.samsung.com>
Date2017-02-24 14:30 +0100
Subject[PATCH 02/19] hwmon: (adc128d818) Add OF device ID table
Message-ID<teo6D-J9-31@gated-at.bofh.it>
In reply to#1587636
The driver doesn't have a struct of_device_id table but supported devices
are registered via Device Trees. This is working on the assumption that a
I2C device registered via OF will always match a legacy I2C device ID and
that the MODALIAS reported will always be of the form i2c:<device>.

But this could change in the future so the correct approach is to have an
OF device ID table if the devices are registered via OF.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---

 drivers/hwmon/adc128d818.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/hwmon/adc128d818.c b/drivers/hwmon/adc128d818.c
index bbe3a5c5b3f5..a557b46dbe8e 100644
--- a/drivers/hwmon/adc128d818.c
+++ b/drivers/hwmon/adc128d818.c
@@ -546,10 +546,17 @@ static const struct i2c_device_id adc128_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, adc128_id);
 
+static const struct of_device_id adc128_of_match[] = {
+	{ .compatible = "ti,adc128d818" },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, adc128_of_match);
+
 static struct i2c_driver adc128_driver = {
 	.class		= I2C_CLASS_HWMON,
 	.driver = {
 		.name	= "adc128d818",
+		.of_match_table = of_match_ptr(adc128_of_match),
 	},
 	.probe		= adc128_probe,
 	.remove		= adc128_remove,
-- 
2.9.3

[toc] | [prev] | [next] | [standalone]


#1587816 — Re: [PATCH 00/19] hwmon: Add OF device table to I2C drivers that are missing it

FromGuenter Roeck <linux@roeck-us.net>
Date2017-02-24 18:20 +0100
SubjectRe: [PATCH 00/19] hwmon: Add OF device table to I2C drivers that are missing it
Message-ID<terHb-3kJ-7@gated-at.bofh.it>
In reply to#1587636
On 02/24/2017 05:12 AM, Javier Martinez Canillas wrote:
> Hello,
>
> This series add OF device ID tables to hwmon I2C drivers whose devices are
> either used in Device Tree source files or are listed in binding docs as a
> compatible string.
>
> That's done because the plan is to change the I2C core to report proper OF
> modaliases instead of always reporting a MODALIAS=i2c:<foo> regardless if
> a device was registered via DT or using the legacy platform data.
>
> So these patches will make sure that hwmon I2C drivers will continue to be
> able to module auto-load oncethe I2C core is changed.

Series applied to hwmon-next.

Thanks,
Guenter

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web