hwmon: (ina2xx) Add OF device ID table
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> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
		
							parent
							
								
									0b7abe59be
								
							
						
					
					
						commit
						bd0ddd4d08
					
				| @ -34,6 +34,7 @@ | |||||||
| #include <linux/hwmon.h> | #include <linux/hwmon.h> | ||||||
| #include <linux/hwmon-sysfs.h> | #include <linux/hwmon-sysfs.h> | ||||||
| #include <linux/jiffies.h> | #include <linux/jiffies.h> | ||||||
|  | #include <linux/of_device.h> | ||||||
| #include <linux/of.h> | #include <linux/of.h> | ||||||
| #include <linux/delay.h> | #include <linux/delay.h> | ||||||
| #include <linux/util_macros.h> | #include <linux/util_macros.h> | ||||||
| @ -424,13 +425,19 @@ static int ina2xx_probe(struct i2c_client *client, | |||||||
| 	struct device *hwmon_dev; | 	struct device *hwmon_dev; | ||||||
| 	u32 val; | 	u32 val; | ||||||
| 	int ret, group = 0; | 	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); | 	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); | ||||||
| 	if (!data) | 	if (!data) | ||||||
| 		return -ENOMEM; | 		return -ENOMEM; | ||||||
| 
 | 
 | ||||||
| 	/* set the device type */ | 	/* 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) { | 	if (of_property_read_u32(dev->of_node, "shunt-resistor", &val) < 0) { | ||||||
| 		struct ina2xx_platform_data *pdata = dev_get_platdata(dev); | 		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); | 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 = { | static struct i2c_driver ina2xx_driver = { | ||||||
| 	.driver = { | 	.driver = { | ||||||
| 		.name	= "ina2xx", | 		.name	= "ina2xx", | ||||||
|  | 		.of_match_table = of_match_ptr(ina2xx_of_match), | ||||||
| 	}, | 	}, | ||||||
| 	.probe		= ina2xx_probe, | 	.probe		= ina2xx_probe, | ||||||
| 	.id_table	= ina2xx_id, | 	.id_table	= ina2xx_id, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user