aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio/adc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iio/adc')
-rw-r--r--drivers/iio/adc/ad7266.c7
-rw-r--r--drivers/iio/adc/ad7476.c11
-rw-r--r--drivers/iio/adc/ad7791.c36
-rw-r--r--drivers/iio/adc/ad7793.c32
-rw-r--r--drivers/iio/adc/ad7887.c11
-rw-r--r--drivers/iio/adc/ad7923.c11
-rw-r--r--drivers/iio/adc/ad799x.c24
-rw-r--r--drivers/iio/adc/mxs-lradc.c34
-rw-r--r--drivers/iio/adc/nau7802.c19
-rw-r--r--drivers/iio/adc/ti-ads1015.c128
-rw-r--r--drivers/iio/adc/ti_am335x_adc.c22
11 files changed, 198 insertions, 137 deletions
diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c
index 21e19b60e2b9..01240aeeeab0 100644
--- a/drivers/iio/adc/ad7266.c
+++ b/drivers/iio/adc/ad7266.c
@@ -154,12 +154,11 @@ static int ad7266_read_raw(struct iio_dev *indio_dev,
154 154
155 switch (m) { 155 switch (m) {
156 case IIO_CHAN_INFO_RAW: 156 case IIO_CHAN_INFO_RAW:
157 if (iio_buffer_enabled(indio_dev)) 157 ret = iio_device_claim_direct_mode(indio_dev);
158 return -EBUSY;
159
160 ret = ad7266_read_single(st, val, chan->address);
161 if (ret) 158 if (ret)
162 return ret; 159 return ret;
160 ret = ad7266_read_single(st, val, chan->address);
161 iio_device_release_direct_mode(indio_dev);
163 162
164 *val = (*val >> 2) & 0xfff; 163 *val = (*val >> 2) & 0xfff;
165 if (chan->scan_type.sign == 's') 164 if (chan->scan_type.sign == 's')
diff --git a/drivers/iio/adc/ad7476.c b/drivers/iio/adc/ad7476.c
index be85c2a0ad97..810c9a9fa62f 100644
--- a/drivers/iio/adc/ad7476.c
+++ b/drivers/iio/adc/ad7476.c
@@ -106,12 +106,11 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,
106 106
107 switch (m) { 107 switch (m) {
108 case IIO_CHAN_INFO_RAW: 108 case IIO_CHAN_INFO_RAW:
109 mutex_lock(&indio_dev->mlock); 109 ret = iio_device_claim_direct_mode(indio_dev);
110 if (iio_buffer_enabled(indio_dev)) 110 if (ret)
111 ret = -EBUSY; 111 return ret;
112 else 112 ret = ad7476_scan_direct(st);
113 ret = ad7476_scan_direct(st); 113 iio_device_release_direct_mode(indio_dev);
114 mutex_unlock(&indio_dev->mlock);
115 114
116 if (ret < 0) 115 if (ret < 0)
117 return ret; 116 return ret;
diff --git a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c
index cf172d58cd44..1dfe6410c64c 100644
--- a/drivers/iio/adc/ad7791.c
+++ b/drivers/iio/adc/ad7791.c
@@ -272,30 +272,22 @@ static ssize_t ad7791_write_frequency(struct device *dev,
272 struct ad7791_state *st = iio_priv(indio_dev); 272 struct ad7791_state *st = iio_priv(indio_dev);
273 int i, ret; 273 int i, ret;
274 274
275 mutex_lock(&indio_dev->mlock); 275 for (i = 0; i < ARRAY_SIZE(ad7791_sample_freq_avail); i++)
276 if (iio_buffer_enabled(indio_dev)) { 276 if (sysfs_streq(ad7791_sample_freq_avail[i], buf))
277 mutex_unlock(&indio_dev->mlock);
278 return -EBUSY;
279 }
280 mutex_unlock(&indio_dev->mlock);
281
282 ret = -EINVAL;
283
284 for (i = 0; i < ARRAY_SIZE(ad7791_sample_freq_avail); i++) {
285 if (sysfs_streq(ad7791_sample_freq_avail[i], buf)) {
286
287 mutex_lock(&indio_dev->mlock);
288 st->filter &= ~AD7791_FILTER_RATE_MASK;
289 st->filter |= i;
290 ad_sd_write_reg(&st->sd, AD7791_REG_FILTER,
291 sizeof(st->filter), st->filter);
292 mutex_unlock(&indio_dev->mlock);
293 ret = 0;
294 break; 277 break;
295 } 278 if (i == ARRAY_SIZE(ad7791_sample_freq_avail))
296 } 279 return -EINVAL;
280
281 ret = iio_device_claim_direct_mode(indio_dev);
282 if (ret)
283 return ret;
284 st->filter &= ~AD7791_FILTER_RATE_MASK;
285 st->filter |= i;
286 ad_sd_write_reg(&st->sd, AD7791_REG_FILTER, sizeof(st->filter),
287 st->filter);
288 iio_device_release_direct_mode(indio_dev);
297 289
298 return ret ? ret : len; 290 return len;
299} 291}
300 292
301static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, 293static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
index 7b07bb651671..a43722fbf03a 100644
--- a/drivers/iio/adc/ad7793.c
+++ b/drivers/iio/adc/ad7793.c
@@ -369,13 +369,6 @@ static ssize_t ad7793_write_frequency(struct device *dev,
369 long lval; 369 long lval;
370 int i, ret; 370 int i, ret;
371 371
372 mutex_lock(&indio_dev->mlock);
373 if (iio_buffer_enabled(indio_dev)) {
374 mutex_unlock(&indio_dev->mlock);
375 return -EBUSY;
376 }
377 mutex_unlock(&indio_dev->mlock);
378
379 ret = kstrtol(buf, 10, &lval); 372 ret = kstrtol(buf, 10, &lval);
380 if (ret) 373 if (ret)
381 return ret; 374 return ret;
@@ -383,20 +376,21 @@ static ssize_t ad7793_write_frequency(struct device *dev,
383 if (lval == 0) 376 if (lval == 0)
384 return -EINVAL; 377 return -EINVAL;
385 378
386 ret = -EINVAL;
387
388 for (i = 0; i < 16; i++) 379 for (i = 0; i < 16; i++)
389 if (lval == st->chip_info->sample_freq_avail[i]) { 380 if (lval == st->chip_info->sample_freq_avail[i])
390 mutex_lock(&indio_dev->mlock); 381 break;
391 st->mode &= ~AD7793_MODE_RATE(-1); 382 if (i == 16)
392 st->mode |= AD7793_MODE_RATE(i); 383 return -EINVAL;
393 ad_sd_write_reg(&st->sd, AD7793_REG_MODE,
394 sizeof(st->mode), st->mode);
395 mutex_unlock(&indio_dev->mlock);
396 ret = 0;
397 }
398 384
399 return ret ? ret : len; 385 ret = iio_device_claim_direct_mode(indio_dev);
386 if (ret)
387 return ret;
388 st->mode &= ~AD7793_MODE_RATE(-1);
389 st->mode |= AD7793_MODE_RATE(i);
390 ad_sd_write_reg(&st->sd, AD7793_REG_MODE, sizeof(st->mode), st->mode);
391 iio_device_release_direct_mode(indio_dev);
392
393 return len;
400} 394}
401 395
402static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, 396static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
diff --git a/drivers/iio/adc/ad7887.c b/drivers/iio/adc/ad7887.c
index 2d3c397e66ad..ee2ccc19fab6 100644
--- a/drivers/iio/adc/ad7887.c
+++ b/drivers/iio/adc/ad7887.c
@@ -156,12 +156,11 @@ static int ad7887_read_raw(struct iio_dev *indio_dev,
156 156
157 switch (m) { 157 switch (m) {
158 case IIO_CHAN_INFO_RAW: 158 case IIO_CHAN_INFO_RAW:
159 mutex_lock(&indio_dev->mlock); 159 ret = iio_device_claim_direct_mode(indio_dev);
160 if (iio_buffer_enabled(indio_dev)) 160 if (ret)
161 ret = -EBUSY; 161 return ret;
162 else 162 ret = ad7887_scan_direct(st, chan->address);
163 ret = ad7887_scan_direct(st, chan->address); 163 iio_device_release_direct_mode(indio_dev);
164 mutex_unlock(&indio_dev->mlock);
165 164
166 if (ret < 0) 165 if (ret < 0)
167 return ret; 166 return ret;
diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c
index 45e29ccd824f..ff444c19d749 100644
--- a/drivers/iio/adc/ad7923.c
+++ b/drivers/iio/adc/ad7923.c
@@ -233,12 +233,11 @@ static int ad7923_read_raw(struct iio_dev *indio_dev,
233 233
234 switch (m) { 234 switch (m) {
235 case IIO_CHAN_INFO_RAW: 235 case IIO_CHAN_INFO_RAW:
236 mutex_lock(&indio_dev->mlock); 236 ret = iio_device_claim_direct_mode(indio_dev);
237 if (iio_buffer_enabled(indio_dev)) 237 if (ret)
238 ret = -EBUSY; 238 return ret;
239 else 239 ret = ad7923_scan_direct(st, chan->address);
240 ret = ad7923_scan_direct(st, chan->address); 240 iio_device_release_direct_mode(indio_dev);
241 mutex_unlock(&indio_dev->mlock);
242 241
243 if (ret < 0) 242 if (ret < 0)
244 return ret; 243 return ret;
diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c
index a3f5254f4e51..ec0200dd52cb 100644
--- a/drivers/iio/adc/ad799x.c
+++ b/drivers/iio/adc/ad799x.c
@@ -282,12 +282,11 @@ static int ad799x_read_raw(struct iio_dev *indio_dev,
282 282
283 switch (m) { 283 switch (m) {
284 case IIO_CHAN_INFO_RAW: 284 case IIO_CHAN_INFO_RAW:
285 mutex_lock(&indio_dev->mlock); 285 ret = iio_device_claim_direct_mode(indio_dev);
286 if (iio_buffer_enabled(indio_dev)) 286 if (ret)
287 ret = -EBUSY; 287 return ret;
288 else 288 ret = ad799x_scan_direct(st, chan->scan_index);
289 ret = ad799x_scan_direct(st, chan->scan_index); 289 iio_device_release_direct_mode(indio_dev);
290 mutex_unlock(&indio_dev->mlock);
291 290
292 if (ret < 0) 291 if (ret < 0)
293 return ret; 292 return ret;
@@ -395,11 +394,9 @@ static int ad799x_write_event_config(struct iio_dev *indio_dev,
395 struct ad799x_state *st = iio_priv(indio_dev); 394 struct ad799x_state *st = iio_priv(indio_dev);
396 int ret; 395 int ret;
397 396
398 mutex_lock(&indio_dev->mlock); 397 ret = iio_device_claim_direct_mode(indio_dev);
399 if (iio_buffer_enabled(indio_dev)) { 398 if (ret)
400 ret = -EBUSY; 399 return ret;
401 goto done;
402 }
403 400
404 if (state) 401 if (state)
405 st->config |= BIT(chan->scan_index) << AD799X_CHANNEL_SHIFT; 402 st->config |= BIT(chan->scan_index) << AD799X_CHANNEL_SHIFT;
@@ -412,10 +409,7 @@ static int ad799x_write_event_config(struct iio_dev *indio_dev,
412 st->config &= ~AD7998_ALERT_EN; 409 st->config &= ~AD7998_ALERT_EN;
413 410
414 ret = ad799x_write_config(st, st->config); 411 ret = ad799x_write_config(st, st->config);
415 412 iio_device_release_direct_mode(indio_dev);
416done:
417 mutex_unlock(&indio_dev->mlock);
418
419 return ret; 413 return ret;
420} 414}
421 415
diff --git a/drivers/iio/adc/mxs-lradc.c b/drivers/iio/adc/mxs-lradc.c
index ad26da1edbee..b84d37c80a94 100644
--- a/drivers/iio/adc/mxs-lradc.c
+++ b/drivers/iio/adc/mxs-lradc.c
@@ -373,13 +373,6 @@ static u32 mxs_lradc_plate_mask(struct mxs_lradc *lradc)
373 return LRADC_CTRL0_MX28_PLATE_MASK; 373 return LRADC_CTRL0_MX28_PLATE_MASK;
374} 374}
375 375
376static u32 mxs_lradc_irq_en_mask(struct mxs_lradc *lradc)
377{
378 if (lradc->soc == IMX23_LRADC)
379 return LRADC_CTRL1_MX23_LRADC_IRQ_EN_MASK;
380 return LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK;
381}
382
383static u32 mxs_lradc_irq_mask(struct mxs_lradc *lradc) 376static u32 mxs_lradc_irq_mask(struct mxs_lradc *lradc)
384{ 377{
385 if (lradc->soc == IMX23_LRADC) 378 if (lradc->soc == IMX23_LRADC)
@@ -1120,18 +1113,16 @@ static int mxs_lradc_ts_register(struct mxs_lradc *lradc)
1120{ 1113{
1121 struct input_dev *input; 1114 struct input_dev *input;
1122 struct device *dev = lradc->dev; 1115 struct device *dev = lradc->dev;
1123 int ret;
1124 1116
1125 if (!lradc->use_touchscreen) 1117 if (!lradc->use_touchscreen)
1126 return 0; 1118 return 0;
1127 1119
1128 input = input_allocate_device(); 1120 input = devm_input_allocate_device(dev);
1129 if (!input) 1121 if (!input)
1130 return -ENOMEM; 1122 return -ENOMEM;
1131 1123
1132 input->name = DRIVER_NAME; 1124 input->name = DRIVER_NAME;
1133 input->id.bustype = BUS_HOST; 1125 input->id.bustype = BUS_HOST;
1134 input->dev.parent = dev;
1135 input->open = mxs_lradc_ts_open; 1126 input->open = mxs_lradc_ts_open;
1136 input->close = mxs_lradc_ts_close; 1127 input->close = mxs_lradc_ts_close;
1137 1128
@@ -1146,20 +1137,8 @@ static int mxs_lradc_ts_register(struct mxs_lradc *lradc)
1146 1137
1147 lradc->ts_input = input; 1138 lradc->ts_input = input;
1148 input_set_drvdata(input, lradc); 1139 input_set_drvdata(input, lradc);
1149 ret = input_register_device(input);
1150 if (ret)
1151 input_free_device(lradc->ts_input);
1152
1153 return ret;
1154}
1155
1156static void mxs_lradc_ts_unregister(struct mxs_lradc *lradc)
1157{
1158 if (!lradc->use_touchscreen)
1159 return;
1160 1140
1161 mxs_lradc_disable_ts(lradc); 1141 return input_register_device(input);
1162 input_unregister_device(lradc->ts_input);
1163} 1142}
1164 1143
1165/* 1144/*
@@ -1510,7 +1489,9 @@ static void mxs_lradc_hw_stop(struct mxs_lradc *lradc)
1510{ 1489{
1511 int i; 1490 int i;
1512 1491
1513 mxs_lradc_reg_clear(lradc, mxs_lradc_irq_en_mask(lradc), LRADC_CTRL1); 1492 mxs_lradc_reg_clear(lradc,
1493 lradc->buffer_vchans << LRADC_CTRL1_LRADC_IRQ_EN_OFFSET,
1494 LRADC_CTRL1);
1514 1495
1515 for (i = 0; i < LRADC_MAX_DELAY_CHANS; i++) 1496 for (i = 0; i < LRADC_MAX_DELAY_CHANS; i++)
1516 mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(i)); 1497 mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(i));
@@ -1721,13 +1702,11 @@ static int mxs_lradc_probe(struct platform_device *pdev)
1721 ret = iio_device_register(iio); 1702 ret = iio_device_register(iio);
1722 if (ret) { 1703 if (ret) {
1723 dev_err(dev, "Failed to register IIO device\n"); 1704 dev_err(dev, "Failed to register IIO device\n");
1724 goto err_ts; 1705 return ret;
1725 } 1706 }
1726 1707
1727 return 0; 1708 return 0;
1728 1709
1729err_ts:
1730 mxs_lradc_ts_unregister(lradc);
1731err_ts_register: 1710err_ts_register:
1732 mxs_lradc_hw_stop(lradc); 1711 mxs_lradc_hw_stop(lradc);
1733err_dev: 1712err_dev:
@@ -1745,7 +1724,6 @@ static int mxs_lradc_remove(struct platform_device *pdev)
1745 struct mxs_lradc *lradc = iio_priv(iio); 1724 struct mxs_lradc *lradc = iio_priv(iio);
1746 1725
1747 iio_device_unregister(iio); 1726 iio_device_unregister(iio);
1748 mxs_lradc_ts_unregister(lradc);
1749 mxs_lradc_hw_stop(lradc); 1727 mxs_lradc_hw_stop(lradc);
1750 mxs_lradc_trigger_remove(iio); 1728 mxs_lradc_trigger_remove(iio);
1751 iio_triggered_buffer_cleanup(iio); 1729 iio_triggered_buffer_cleanup(iio);
diff --git a/drivers/iio/adc/nau7802.c b/drivers/iio/adc/nau7802.c
index e525aa6475c4..57365c504093 100644
--- a/drivers/iio/adc/nau7802.c
+++ b/drivers/iio/adc/nau7802.c
@@ -79,10 +79,29 @@ static const struct iio_chan_spec nau7802_chan_array[] = {
79static const u16 nau7802_sample_freq_avail[] = {10, 20, 40, 80, 79static const u16 nau7802_sample_freq_avail[] = {10, 20, 40, 80,
80 10, 10, 10, 320}; 80 10, 10, 10, 320};
81 81
82static ssize_t nau7802_show_scales(struct device *dev,
83 struct device_attribute *attr, char *buf)
84{
85 struct nau7802_state *st = iio_priv(dev_to_iio_dev(dev));
86 int i, len = 0;
87
88 for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++)
89 len += scnprintf(buf + len, PAGE_SIZE - len, "0.%09d ",
90 st->scale_avail[i]);
91
92 buf[len-1] = '\n';
93
94 return len;
95}
96
82static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("10 40 80 320"); 97static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("10 40 80 320");
83 98
99static IIO_DEVICE_ATTR(in_voltage_scale_available, S_IRUGO, nau7802_show_scales,
100 NULL, 0);
101
84static struct attribute *nau7802_attributes[] = { 102static struct attribute *nau7802_attributes[] = {
85 &iio_const_attr_sampling_frequency_available.dev_attr.attr, 103 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
104 &iio_dev_attr_in_voltage_scale_available.dev_attr.attr,
86 NULL 105 NULL
87}; 106};
88 107
diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index 73cbf0b54e54..8be192a84893 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -55,6 +55,11 @@
55#define ADS1015_DEFAULT_DATA_RATE 4 55#define ADS1015_DEFAULT_DATA_RATE 4
56#define ADS1015_DEFAULT_CHAN 0 56#define ADS1015_DEFAULT_CHAN 0
57 57
58enum {
59 ADS1015,
60 ADS1115,
61};
62
58enum ads1015_channels { 63enum ads1015_channels {
59 ADS1015_AIN0_AIN1 = 0, 64 ADS1015_AIN0_AIN1 = 0,
60 ADS1015_AIN0_AIN3, 65 ADS1015_AIN0_AIN3,
@@ -71,6 +76,10 @@ static const unsigned int ads1015_data_rate[] = {
71 128, 250, 490, 920, 1600, 2400, 3300, 3300 76 128, 250, 490, 920, 1600, 2400, 3300, 3300
72}; 77};
73 78
79static const unsigned int ads1115_data_rate[] = {
80 8, 16, 32, 64, 128, 250, 475, 860
81};
82
74static const struct { 83static const struct {
75 int scale; 84 int scale;
76 int uscale; 85 int uscale;
@@ -101,6 +110,7 @@ static const struct {
101 .shift = 4, \ 110 .shift = 4, \
102 .endianness = IIO_CPU, \ 111 .endianness = IIO_CPU, \
103 }, \ 112 }, \
113 .datasheet_name = "AIN"#_chan, \
104} 114}
105 115
106#define ADS1015_V_DIFF_CHAN(_chan, _chan2, _addr) { \ 116#define ADS1015_V_DIFF_CHAN(_chan, _chan2, _addr) { \
@@ -121,6 +131,45 @@ static const struct {
121 .shift = 4, \ 131 .shift = 4, \
122 .endianness = IIO_CPU, \ 132 .endianness = IIO_CPU, \
123 }, \ 133 }, \
134 .datasheet_name = "AIN"#_chan"-AIN"#_chan2, \
135}
136
137#define ADS1115_V_CHAN(_chan, _addr) { \
138 .type = IIO_VOLTAGE, \
139 .indexed = 1, \
140 .address = _addr, \
141 .channel = _chan, \
142 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
143 BIT(IIO_CHAN_INFO_SCALE) | \
144 BIT(IIO_CHAN_INFO_SAMP_FREQ), \
145 .scan_index = _addr, \
146 .scan_type = { \
147 .sign = 's', \
148 .realbits = 16, \
149 .storagebits = 16, \
150 .endianness = IIO_CPU, \
151 }, \
152 .datasheet_name = "AIN"#_chan, \
153}
154
155#define ADS1115_V_DIFF_CHAN(_chan, _chan2, _addr) { \
156 .type = IIO_VOLTAGE, \
157 .differential = 1, \
158 .indexed = 1, \
159 .address = _addr, \
160 .channel = _chan, \
161 .channel2 = _chan2, \
162 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
163 BIT(IIO_CHAN_INFO_SCALE) | \
164 BIT(IIO_CHAN_INFO_SAMP_FREQ), \
165 .scan_index = _addr, \
166 .scan_type = { \
167 .sign = 's', \
168 .realbits = 16, \
169 .storagebits = 16, \
170 .endianness = IIO_CPU, \
171 }, \
172 .datasheet_name = "AIN"#_chan"-AIN"#_chan2, \
124} 173}
125 174
126struct ads1015_data { 175struct ads1015_data {
@@ -131,6 +180,8 @@ struct ads1015_data {
131 */ 180 */
132 struct mutex lock; 181 struct mutex lock;
133 struct ads1015_channel_data channel_data[ADS1015_CHANNELS]; 182 struct ads1015_channel_data channel_data[ADS1015_CHANNELS];
183
184 unsigned int *data_rate;
134}; 185};
135 186
136static bool ads1015_is_writeable_reg(struct device *dev, unsigned int reg) 187static bool ads1015_is_writeable_reg(struct device *dev, unsigned int reg)
@@ -157,6 +208,18 @@ static const struct iio_chan_spec ads1015_channels[] = {
157 IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP), 208 IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
158}; 209};
159 210
211static const struct iio_chan_spec ads1115_channels[] = {
212 ADS1115_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1),
213 ADS1115_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3),
214 ADS1115_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3),
215 ADS1115_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3),
216 ADS1115_V_CHAN(0, ADS1015_AIN0),
217 ADS1115_V_CHAN(1, ADS1015_AIN1),
218 ADS1115_V_CHAN(2, ADS1015_AIN2),
219 ADS1115_V_CHAN(3, ADS1015_AIN3),
220 IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
221};
222
160static int ads1015_set_power_state(struct ads1015_data *data, bool on) 223static int ads1015_set_power_state(struct ads1015_data *data, bool on)
161{ 224{
162 int ret; 225 int ret;
@@ -196,7 +259,7 @@ int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
196 return ret; 259 return ret;
197 260
198 if (change) { 261 if (change) {
199 conv_time = DIV_ROUND_UP(USEC_PER_SEC, ads1015_data_rate[dr]); 262 conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
200 usleep_range(conv_time, conv_time + 1); 263 usleep_range(conv_time, conv_time + 1);
201 } 264 }
202 265
@@ -263,7 +326,7 @@ static int ads1015_set_data_rate(struct ads1015_data *data, int chan, int rate)
263 int i, ret, rindex = -1; 326 int i, ret, rindex = -1;
264 327
265 for (i = 0; i < ARRAY_SIZE(ads1015_data_rate); i++) 328 for (i = 0; i < ARRAY_SIZE(ads1015_data_rate); i++)
266 if (ads1015_data_rate[i] == rate) { 329 if (data->data_rate[i] == rate) {
267 rindex = i; 330 rindex = i;
268 break; 331 break;
269 } 332 }
@@ -291,7 +354,9 @@ static int ads1015_read_raw(struct iio_dev *indio_dev,
291 mutex_lock(&indio_dev->mlock); 354 mutex_lock(&indio_dev->mlock);
292 mutex_lock(&data->lock); 355 mutex_lock(&data->lock);
293 switch (mask) { 356 switch (mask) {
294 case IIO_CHAN_INFO_RAW: 357 case IIO_CHAN_INFO_RAW: {
358 int shift = chan->scan_type.shift;
359
295 if (iio_buffer_enabled(indio_dev)) { 360 if (iio_buffer_enabled(indio_dev)) {
296 ret = -EBUSY; 361 ret = -EBUSY;
297 break; 362 break;
@@ -307,8 +372,7 @@ static int ads1015_read_raw(struct iio_dev *indio_dev,
307 break; 372 break;
308 } 373 }
309 374
310 /* 12 bit res, D0 is bit 4 in conversion register */ 375 *val = sign_extend32(*val >> shift, 15 - shift);
311 *val = sign_extend32(*val >> 4, 11);
312 376
313 ret = ads1015_set_power_state(data, false); 377 ret = ads1015_set_power_state(data, false);
314 if (ret < 0) 378 if (ret < 0)
@@ -316,6 +380,7 @@ static int ads1015_read_raw(struct iio_dev *indio_dev,
316 380
317 ret = IIO_VAL_INT; 381 ret = IIO_VAL_INT;
318 break; 382 break;
383 }
319 case IIO_CHAN_INFO_SCALE: 384 case IIO_CHAN_INFO_SCALE:
320 idx = data->channel_data[chan->address].pga; 385 idx = data->channel_data[chan->address].pga;
321 *val = ads1015_scale[idx].scale; 386 *val = ads1015_scale[idx].scale;
@@ -324,7 +389,7 @@ static int ads1015_read_raw(struct iio_dev *indio_dev,
324 break; 389 break;
325 case IIO_CHAN_INFO_SAMP_FREQ: 390 case IIO_CHAN_INFO_SAMP_FREQ:
326 idx = data->channel_data[chan->address].data_rate; 391 idx = data->channel_data[chan->address].data_rate;
327 *val = ads1015_data_rate[idx]; 392 *val = data->data_rate[idx];
328 ret = IIO_VAL_INT; 393 ret = IIO_VAL_INT;
329 break; 394 break;
330 default: 395 default:
@@ -380,12 +445,15 @@ static const struct iio_buffer_setup_ops ads1015_buffer_setup_ops = {
380}; 445};
381 446
382static IIO_CONST_ATTR(scale_available, "3 2 1 0.5 0.25 0.125"); 447static IIO_CONST_ATTR(scale_available, "3 2 1 0.5 0.25 0.125");
383static IIO_CONST_ATTR(sampling_frequency_available, 448
384 "128 250 490 920 1600 2400 3300"); 449static IIO_CONST_ATTR_NAMED(ads1015_sampling_frequency_available,
450 sampling_frequency_available, "128 250 490 920 1600 2400 3300");
451static IIO_CONST_ATTR_NAMED(ads1115_sampling_frequency_available,
452 sampling_frequency_available, "8 16 32 64 128 250 475 860");
385 453
386static struct attribute *ads1015_attributes[] = { 454static struct attribute *ads1015_attributes[] = {
387 &iio_const_attr_scale_available.dev_attr.attr, 455 &iio_const_attr_scale_available.dev_attr.attr,
388 &iio_const_attr_sampling_frequency_available.dev_attr.attr, 456 &iio_const_attr_ads1015_sampling_frequency_available.dev_attr.attr,
389 NULL, 457 NULL,
390}; 458};
391 459
@@ -393,11 +461,28 @@ static const struct attribute_group ads1015_attribute_group = {
393 .attrs = ads1015_attributes, 461 .attrs = ads1015_attributes,
394}; 462};
395 463
396static const struct iio_info ads1015_info = { 464static struct attribute *ads1115_attributes[] = {
465 &iio_const_attr_scale_available.dev_attr.attr,
466 &iio_const_attr_ads1115_sampling_frequency_available.dev_attr.attr,
467 NULL,
468};
469
470static const struct attribute_group ads1115_attribute_group = {
471 .attrs = ads1115_attributes,
472};
473
474static struct iio_info ads1015_info = {
475 .driver_module = THIS_MODULE,
476 .read_raw = ads1015_read_raw,
477 .write_raw = ads1015_write_raw,
478 .attrs = &ads1015_attribute_group,
479};
480
481static struct iio_info ads1115_info = {
397 .driver_module = THIS_MODULE, 482 .driver_module = THIS_MODULE,
398 .read_raw = ads1015_read_raw, 483 .read_raw = ads1015_read_raw,
399 .write_raw = ads1015_write_raw, 484 .write_raw = ads1015_write_raw,
400 .attrs = &ads1015_attribute_group, 485 .attrs = &ads1115_attribute_group,
401}; 486};
402 487
403#ifdef CONFIG_OF 488#ifdef CONFIG_OF
@@ -500,12 +585,24 @@ static int ads1015_probe(struct i2c_client *client,
500 mutex_init(&data->lock); 585 mutex_init(&data->lock);
501 586
502 indio_dev->dev.parent = &client->dev; 587 indio_dev->dev.parent = &client->dev;
503 indio_dev->info = &ads1015_info;
504 indio_dev->name = ADS1015_DRV_NAME; 588 indio_dev->name = ADS1015_DRV_NAME;
505 indio_dev->channels = ads1015_channels;
506 indio_dev->num_channels = ARRAY_SIZE(ads1015_channels);
507 indio_dev->modes = INDIO_DIRECT_MODE; 589 indio_dev->modes = INDIO_DIRECT_MODE;
508 590
591 switch (id->driver_data) {
592 case ADS1015:
593 indio_dev->channels = ads1015_channels;
594 indio_dev->num_channels = ARRAY_SIZE(ads1015_channels);
595 indio_dev->info = &ads1015_info;
596 data->data_rate = (unsigned int *) &ads1015_data_rate;
597 break;
598 case ADS1115:
599 indio_dev->channels = ads1115_channels;
600 indio_dev->num_channels = ARRAY_SIZE(ads1115_channels);
601 indio_dev->info = &ads1115_info;
602 data->data_rate = (unsigned int *) &ads1115_data_rate;
603 break;
604 }
605
509 /* we need to keep this ABI the same as used by hwmon ADS1015 driver */ 606 /* we need to keep this ABI the same as used by hwmon ADS1015 driver */
510 ads1015_get_channels_config(client); 607 ads1015_get_channels_config(client);
511 608
@@ -590,7 +687,8 @@ static const struct dev_pm_ops ads1015_pm_ops = {
590}; 687};
591 688
592static const struct i2c_device_id ads1015_id[] = { 689static const struct i2c_device_id ads1015_id[] = {
593 {"ads1015", 0}, 690 {"ads1015", ADS1015},
691 {"ads1115", ADS1115},
594 {} 692 {}
595}; 693};
596MODULE_DEVICE_TABLE(i2c, ads1015_id); 694MODULE_DEVICE_TABLE(i2c, ads1015_id);
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index c1e05532d437..8a368756881b 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -326,8 +326,7 @@ static int tiadc_channel_init(struct iio_dev *indio_dev, int channels)
326 int i; 326 int i;
327 327
328 indio_dev->num_channels = channels; 328 indio_dev->num_channels = channels;
329 chan_array = kcalloc(channels, 329 chan_array = kcalloc(channels, sizeof(*chan_array), GFP_KERNEL);
330 sizeof(struct iio_chan_spec), GFP_KERNEL);
331 if (chan_array == NULL) 330 if (chan_array == NULL)
332 return -ENOMEM; 331 return -ENOMEM;
333 332
@@ -467,8 +466,7 @@ static int tiadc_probe(struct platform_device *pdev)
467 return -EINVAL; 466 return -EINVAL;
468 } 467 }
469 468
470 indio_dev = devm_iio_device_alloc(&pdev->dev, 469 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*indio_dev));
471 sizeof(struct tiadc_device));
472 if (indio_dev == NULL) { 470 if (indio_dev == NULL) {
473 dev_err(&pdev->dev, "failed to allocate iio device\n"); 471 dev_err(&pdev->dev, "failed to allocate iio device\n");
474 return -ENOMEM; 472 return -ENOMEM;
@@ -531,8 +529,7 @@ static int tiadc_remove(struct platform_device *pdev)
531 return 0; 529 return 0;
532} 530}
533 531
534#ifdef CONFIG_PM 532static int __maybe_unused tiadc_suspend(struct device *dev)
535static int tiadc_suspend(struct device *dev)
536{ 533{
537 struct iio_dev *indio_dev = dev_get_drvdata(dev); 534 struct iio_dev *indio_dev = dev_get_drvdata(dev);
538 struct tiadc_device *adc_dev = iio_priv(indio_dev); 535 struct tiadc_device *adc_dev = iio_priv(indio_dev);
@@ -550,7 +547,7 @@ static int tiadc_suspend(struct device *dev)
550 return 0; 547 return 0;
551} 548}
552 549
553static int tiadc_resume(struct device *dev) 550static int __maybe_unused tiadc_resume(struct device *dev)
554{ 551{
555 struct iio_dev *indio_dev = dev_get_drvdata(dev); 552 struct iio_dev *indio_dev = dev_get_drvdata(dev);
556 struct tiadc_device *adc_dev = iio_priv(indio_dev); 553 struct tiadc_device *adc_dev = iio_priv(indio_dev);
@@ -567,14 +564,7 @@ static int tiadc_resume(struct device *dev)
567 return 0; 564 return 0;
568} 565}
569 566
570static const struct dev_pm_ops tiadc_pm_ops = { 567static SIMPLE_DEV_PM_OPS(tiadc_pm_ops, tiadc_suspend, tiadc_resume);
571 .suspend = tiadc_suspend,
572 .resume = tiadc_resume,
573};
574#define TIADC_PM_OPS (&tiadc_pm_ops)
575#else
576#define TIADC_PM_OPS NULL
577#endif
578 568
579static const struct of_device_id ti_adc_dt_ids[] = { 569static const struct of_device_id ti_adc_dt_ids[] = {
580 { .compatible = "ti,am3359-adc", }, 570 { .compatible = "ti,am3359-adc", },
@@ -585,7 +575,7 @@ MODULE_DEVICE_TABLE(of, ti_adc_dt_ids);
585static struct platform_driver tiadc_driver = { 575static struct platform_driver tiadc_driver = {
586 .driver = { 576 .driver = {
587 .name = "TI-am335x-adc", 577 .name = "TI-am335x-adc",
588 .pm = TIADC_PM_OPS, 578 .pm = &tiadc_pm_ops,
589 .of_match_table = ti_adc_dt_ids, 579 .of_match_table = ti_adc_dt_ids,
590 }, 580 },
591 .probe = tiadc_probe, 581 .probe = tiadc_probe,