Commit c172d22d authored by Javier Martinez Canillas's avatar Javier Martinez Canillas Committed by Jonathan Cameron

iio: adc: ti-ads1015: 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: default avatarJavier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 73733403
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/of_device.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/regmap.h> #include <linux/regmap.h>
...@@ -55,7 +56,7 @@ ...@@ -55,7 +56,7 @@
#define ADS1015_DEFAULT_DATA_RATE 4 #define ADS1015_DEFAULT_DATA_RATE 4
#define ADS1015_DEFAULT_CHAN 0 #define ADS1015_DEFAULT_CHAN 0
enum { enum chip_ids {
ADS1015, ADS1015,
ADS1115, ADS1115,
}; };
...@@ -578,6 +579,7 @@ static int ads1015_probe(struct i2c_client *client, ...@@ -578,6 +579,7 @@ static int ads1015_probe(struct i2c_client *client,
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
struct ads1015_data *data; struct ads1015_data *data;
int ret; int ret;
enum chip_ids chip;
indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
if (!indio_dev) if (!indio_dev)
...@@ -593,7 +595,11 @@ static int ads1015_probe(struct i2c_client *client, ...@@ -593,7 +595,11 @@ static int ads1015_probe(struct i2c_client *client,
indio_dev->name = ADS1015_DRV_NAME; indio_dev->name = ADS1015_DRV_NAME;
indio_dev->modes = INDIO_DIRECT_MODE; indio_dev->modes = INDIO_DIRECT_MODE;
switch (id->driver_data) { if (client->dev.of_node)
chip = (enum chip_ids)of_device_get_match_data(&client->dev);
else
chip = id->driver_data;
switch (chip) {
case ADS1015: case ADS1015:
indio_dev->channels = ads1015_channels; indio_dev->channels = ads1015_channels;
indio_dev->num_channels = ARRAY_SIZE(ads1015_channels); indio_dev->num_channels = ARRAY_SIZE(ads1015_channels);
...@@ -698,9 +704,23 @@ static const struct i2c_device_id ads1015_id[] = { ...@@ -698,9 +704,23 @@ static const struct i2c_device_id ads1015_id[] = {
}; };
MODULE_DEVICE_TABLE(i2c, 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 = { static struct i2c_driver ads1015_driver = {
.driver = { .driver = {
.name = ADS1015_DRV_NAME, .name = ADS1015_DRV_NAME,
.of_match_table = ads1015_of_match,
.pm = &ads1015_pm_ops, .pm = &ads1015_pm_ops,
}, },
.probe = ads1015_probe, .probe = ads1015_probe,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment