aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio
diff options
context:
space:
mode:
authorPatil, Rachna <rachna@ti.com>2013-01-23 22:45:11 -0500
committerSebastian Andrzej Siewior <bigeasy@linutronix.de>2013-06-12 12:36:31 -0400
commit6f39ac4e20c6211c98e8d9da2d8c51100a77d1df (patch)
tree1de9e31d9f45ffd7d76ea4ffaf364d44e755c306 /drivers/iio
parentb9194fdfa6e729b97ffc59ae00dc9d51c7ae314d (diff)
iio: ti_am335x_adc: Add DT support
Add DT support for client ADC driver. Acked-by: Jonathan Cameron <jic23@kernel.org> Signed-off-by: Patil, Rachna <rachna@ti.com> Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com> Signed-off-by: Felipe Balbi <balbi@ti.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Diffstat (limited to 'drivers/iio')
-rw-r--r--drivers/iio/adc/ti_am335x_adc.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 543b9c42ac5f..b24402cb5432 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -22,6 +22,8 @@
22#include <linux/platform_device.h> 22#include <linux/platform_device.h>
23#include <linux/io.h> 23#include <linux/io.h>
24#include <linux/iio/iio.h> 24#include <linux/iio/iio.h>
25#include <linux/of.h>
26#include <linux/of_device.h>
25 27
26#include <linux/mfd/ti_am335x_tscadc.h> 28#include <linux/mfd/ti_am335x_tscadc.h>
27#include <linux/platform_data/ti_am335x_adc.h> 29#include <linux/platform_data/ti_am335x_adc.h>
@@ -152,11 +154,12 @@ static int tiadc_probe(struct platform_device *pdev)
152 struct iio_dev *indio_dev; 154 struct iio_dev *indio_dev;
153 struct tiadc_device *adc_dev; 155 struct tiadc_device *adc_dev;
154 struct ti_tscadc_dev *tscadc_dev = ti_tscadc_dev_get(pdev); 156 struct ti_tscadc_dev *tscadc_dev = ti_tscadc_dev_get(pdev);
155 struct mfd_tscadc_board *pdata; 157 struct mfd_tscadc_board *pdata = tscadc_dev->dev->platform_data;
158 struct device_node *node = pdev->dev.of_node;
156 int err; 159 int err;
160 u32 val32;
157 161
158 pdata = tscadc_dev->dev->platform_data; 162 if (!pdata && !node) {
159 if (!pdata || !pdata->adc_init) {
160 dev_err(&pdev->dev, "Could not find platform data\n"); 163 dev_err(&pdev->dev, "Could not find platform data\n");
161 return -EINVAL; 164 return -EINVAL;
162 } 165 }
@@ -169,8 +172,17 @@ static int tiadc_probe(struct platform_device *pdev)
169 } 172 }
170 adc_dev = iio_priv(indio_dev); 173 adc_dev = iio_priv(indio_dev);
171 174
172 adc_dev->mfd_tscadc = tscadc_dev; 175 adc_dev->mfd_tscadc = ti_tscadc_dev_get(pdev);
173 adc_dev->channels = pdata->adc_init->adc_channels; 176
177 if (pdata)
178 adc_dev->channels = pdata->adc_init->adc_channels;
179 else {
180 err = of_property_read_u32(node,
181 "ti,adc-channels", &val32);
182 if (err < 0)
183 goto err_free_device;
184 adc_dev->channels = val32;
185 }
174 186
175 indio_dev->dev.parent = &pdev->dev; 187 indio_dev->dev.parent = &pdev->dev;
176 indio_dev->name = dev_name(&pdev->dev); 188 indio_dev->name = dev_name(&pdev->dev);
@@ -260,11 +272,18 @@ static const struct dev_pm_ops tiadc_pm_ops = {
260#define TIADC_PM_OPS NULL 272#define TIADC_PM_OPS NULL
261#endif 273#endif
262 274
275static const struct of_device_id ti_adc_dt_ids[] = {
276 { .compatible = "ti,am3359-adc", },
277 { }
278};
279MODULE_DEVICE_TABLE(of, ti_adc_dt_ids);
280
263static struct platform_driver tiadc_driver = { 281static struct platform_driver tiadc_driver = {
264 .driver = { 282 .driver = {
265 .name = "tiadc", 283 .name = "tiadc",
266 .owner = THIS_MODULE, 284 .owner = THIS_MODULE,
267 .pm = TIADC_PM_OPS, 285 .pm = TIADC_PM_OPS,
286 .of_match_table = of_match_ptr(ti_adc_dt_ids),
268 }, 287 },
269 .probe = tiadc_probe, 288 .probe = tiadc_probe,
270 .remove = tiadc_remove, 289 .remove = tiadc_remove,