aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-11-30 13:39:49 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-11-30 13:39:49 -0500
commit7bcb57cde66c19df378f3468ea342166a8a4504d (patch)
treeb661c7fb156867232f7111a7adf392e261591326 /drivers
parente143ef8f297d980037149fe2dc62af72621a0f5e (diff)
parent583f2deb9349eb55d913eb92a31273f3907d72ea (diff)
Merge tag 'iio-for-3.8f' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-next
Jonathan writes: "6th set of IIO new driver support, clean up and fixes for the 3.8 cycle (possibly wait until 3.9 cycle given timing). Here we have * the cleanup and move out of staging of ad7793. * addition support for additional parts to ad7793. * a basic new driver for TI ADC081C021/027 * 4 little fixes for the recent addition of ad16136 and ad16480. So some nice work with nothing controversial or anything that will effect stuff outside the drivers in question."
Diffstat (limited to 'drivers')
-rw-r--r--drivers/iio/adc/Kconfig22
-rw-r--r--drivers/iio/adc/Makefile3
-rw-r--r--drivers/iio/adc/ad7793.c (renamed from drivers/staging/iio/adc/ad7793.c)384
-rw-r--r--drivers/iio/adc/ti-adc081c.c161
-rw-r--r--drivers/iio/gyro/adis16136.c5
-rw-r--r--drivers/iio/imu/adis16480.c5
-rw-r--r--drivers/staging/iio/adc/Kconfig12
-rw-r--r--drivers/staging/iio/adc/Makefile1
-rw-r--r--drivers/staging/iio/adc/ad7793.h115
9 files changed, 537 insertions, 171 deletions
diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
index cd5eed60be28..961b8d0a4bac 100644
--- a/drivers/iio/adc/Kconfig
+++ b/drivers/iio/adc/Kconfig
@@ -42,6 +42,18 @@ config AD7791
42 To compile this driver as a module, choose M here: the module will be 42 To compile this driver as a module, choose M here: the module will be
43 called ad7791. 43 called ad7791.
44 44
45config AD7793
46 tristate "Analog Devices AD7793 and similar ADCs driver"
47 depends on SPI
48 select AD_SIGMA_DELTA
49 help
50 Say yes here to build support for Analog Devices AD7785, AD7792, AD7793,
51 AD7794 and AD7795 SPI analog to digital converters (ADC).
52 If unsure, say N (but it's safe to say "Y").
53
54 To compile this driver as a module, choose M here: the
55 module will be called AD7793.
56
45config AD7476 57config AD7476
46 tristate "Analog Devices AD7476 and similar 1-channel ADCs driver" 58 tristate "Analog Devices AD7476 and similar 1-channel ADCs driver"
47 depends on SPI 59 depends on SPI
@@ -103,4 +115,14 @@ config MAX1363
103 max11646, max11647) Provides direct access via sysfs and buffered 115 max11646, max11647) Provides direct access via sysfs and buffered
104 data via the iio dev interface. 116 data via the iio dev interface.
105 117
118config TI_ADC081C
119 tristate "Texas Instruments ADC081C021/027"
120 depends on I2C
121 help
122 If you say yes here you get support for Texas Instruments ADC081C021
123 and ADC081C027 ADC chips.
124
125 This driver can also be built as a module. If so, the module will be
126 called ti-adc081c.
127
106endmenu 128endmenu
diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile
index 3256dc64a466..472fd7cd2417 100644
--- a/drivers/iio/adc/Makefile
+++ b/drivers/iio/adc/Makefile
@@ -7,7 +7,10 @@ obj-$(CONFIG_AD7266) += ad7266.o
7obj-$(CONFIG_AD7298) += ad7298.o 7obj-$(CONFIG_AD7298) += ad7298.o
8obj-$(CONFIG_AD7476) += ad7476.o 8obj-$(CONFIG_AD7476) += ad7476.o
9obj-$(CONFIG_AD7791) += ad7791.o 9obj-$(CONFIG_AD7791) += ad7791.o
10obj-$(CONFIG_AD7793) += ad7793.o
10obj-$(CONFIG_AD7887) += ad7887.o 11obj-$(CONFIG_AD7887) += ad7887.o
11obj-$(CONFIG_AT91_ADC) += at91_adc.o 12obj-$(CONFIG_AT91_ADC) += at91_adc.o
12obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o 13obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o
13obj-$(CONFIG_MAX1363) += max1363.o 14obj-$(CONFIG_MAX1363) += max1363.o
15obj-$(CONFIG_TI_ADC081C) += ti-adc081c.o
16
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
index b0a57e475410..334e31ff7a4e 100644
--- a/drivers/staging/iio/adc/ad7793.c
+++ b/drivers/iio/adc/ad7793.c
@@ -25,8 +25,106 @@
25#include <linux/iio/trigger_consumer.h> 25#include <linux/iio/trigger_consumer.h>
26#include <linux/iio/triggered_buffer.h> 26#include <linux/iio/triggered_buffer.h>
27#include <linux/iio/adc/ad_sigma_delta.h> 27#include <linux/iio/adc/ad_sigma_delta.h>
28 28#include <linux/platform_data/ad7793.h>
29#include "ad7793.h" 29
30/* Registers */
31#define AD7793_REG_COMM 0 /* Communications Register (WO, 8-bit) */
32#define AD7793_REG_STAT 0 /* Status Register (RO, 8-bit) */
33#define AD7793_REG_MODE 1 /* Mode Register (RW, 16-bit */
34#define AD7793_REG_CONF 2 /* Configuration Register (RW, 16-bit) */
35#define AD7793_REG_DATA 3 /* Data Register (RO, 16-/24-bit) */
36#define AD7793_REG_ID 4 /* ID Register (RO, 8-bit) */
37#define AD7793_REG_IO 5 /* IO Register (RO, 8-bit) */
38#define AD7793_REG_OFFSET 6 /* Offset Register (RW, 16-bit
39 * (AD7792)/24-bit (AD7793)) */
40#define AD7793_REG_FULLSALE 7 /* Full-Scale Register
41 * (RW, 16-bit (AD7792)/24-bit (AD7793)) */
42
43/* Communications Register Bit Designations (AD7793_REG_COMM) */
44#define AD7793_COMM_WEN (1 << 7) /* Write Enable */
45#define AD7793_COMM_WRITE (0 << 6) /* Write Operation */
46#define AD7793_COMM_READ (1 << 6) /* Read Operation */
47#define AD7793_COMM_ADDR(x) (((x) & 0x7) << 3) /* Register Address */
48#define AD7793_COMM_CREAD (1 << 2) /* Continuous Read of Data Register */
49
50/* Status Register Bit Designations (AD7793_REG_STAT) */
51#define AD7793_STAT_RDY (1 << 7) /* Ready */
52#define AD7793_STAT_ERR (1 << 6) /* Error (Overrange, Underrange) */
53#define AD7793_STAT_CH3 (1 << 2) /* Channel 3 */
54#define AD7793_STAT_CH2 (1 << 1) /* Channel 2 */
55#define AD7793_STAT_CH1 (1 << 0) /* Channel 1 */
56
57/* Mode Register Bit Designations (AD7793_REG_MODE) */
58#define AD7793_MODE_SEL(x) (((x) & 0x7) << 13) /* Operation Mode Select */
59#define AD7793_MODE_SEL_MASK (0x7 << 13) /* Operation Mode Select mask */
60#define AD7793_MODE_CLKSRC(x) (((x) & 0x3) << 6) /* ADC Clock Source Select */
61#define AD7793_MODE_RATE(x) ((x) & 0xF) /* Filter Update Rate Select */
62
63#define AD7793_MODE_CONT 0 /* Continuous Conversion Mode */
64#define AD7793_MODE_SINGLE 1 /* Single Conversion Mode */
65#define AD7793_MODE_IDLE 2 /* Idle Mode */
66#define AD7793_MODE_PWRDN 3 /* Power-Down Mode */
67#define AD7793_MODE_CAL_INT_ZERO 4 /* Internal Zero-Scale Calibration */
68#define AD7793_MODE_CAL_INT_FULL 5 /* Internal Full-Scale Calibration */
69#define AD7793_MODE_CAL_SYS_ZERO 6 /* System Zero-Scale Calibration */
70#define AD7793_MODE_CAL_SYS_FULL 7 /* System Full-Scale Calibration */
71
72#define AD7793_CLK_INT 0 /* Internal 64 kHz Clock not
73 * available at the CLK pin */
74#define AD7793_CLK_INT_CO 1 /* Internal 64 kHz Clock available
75 * at the CLK pin */
76#define AD7793_CLK_EXT 2 /* External 64 kHz Clock */
77#define AD7793_CLK_EXT_DIV2 3 /* External Clock divided by 2 */
78
79/* Configuration Register Bit Designations (AD7793_REG_CONF) */
80#define AD7793_CONF_VBIAS(x) (((x) & 0x3) << 14) /* Bias Voltage
81 * Generator Enable */
82#define AD7793_CONF_BO_EN (1 << 13) /* Burnout Current Enable */
83#define AD7793_CONF_UNIPOLAR (1 << 12) /* Unipolar/Bipolar Enable */
84#define AD7793_CONF_BOOST (1 << 11) /* Boost Enable */
85#define AD7793_CONF_GAIN(x) (((x) & 0x7) << 8) /* Gain Select */
86#define AD7793_CONF_REFSEL(x) ((x) << 6) /* INT/EXT Reference Select */
87#define AD7793_CONF_BUF (1 << 4) /* Buffered Mode Enable */
88#define AD7793_CONF_CHAN(x) ((x) & 0xf) /* Channel select */
89#define AD7793_CONF_CHAN_MASK 0xf /* Channel select mask */
90
91#define AD7793_CH_AIN1P_AIN1M 0 /* AIN1(+) - AIN1(-) */
92#define AD7793_CH_AIN2P_AIN2M 1 /* AIN2(+) - AIN2(-) */
93#define AD7793_CH_AIN3P_AIN3M 2 /* AIN3(+) - AIN3(-) */
94#define AD7793_CH_AIN1M_AIN1M 3 /* AIN1(-) - AIN1(-) */
95#define AD7793_CH_TEMP 6 /* Temp Sensor */
96#define AD7793_CH_AVDD_MONITOR 7 /* AVDD Monitor */
97
98#define AD7795_CH_AIN4P_AIN4M 4 /* AIN4(+) - AIN4(-) */
99#define AD7795_CH_AIN5P_AIN5M 5 /* AIN5(+) - AIN5(-) */
100#define AD7795_CH_AIN6P_AIN6M 6 /* AIN6(+) - AIN6(-) */
101#define AD7795_CH_AIN1M_AIN1M 8 /* AIN1(-) - AIN1(-) */
102
103/* ID Register Bit Designations (AD7793_REG_ID) */
104#define AD7785_ID 0xB
105#define AD7792_ID 0xA
106#define AD7793_ID 0xB
107#define AD7794_ID 0xF
108#define AD7795_ID 0xF
109#define AD7796_ID 0xA
110#define AD7797_ID 0xB
111#define AD7798_ID 0x8
112#define AD7799_ID 0x9
113#define AD7793_ID_MASK 0xF
114
115/* IO (Excitation Current Sources) Register Bit Designations (AD7793_REG_IO) */
116#define AD7793_IO_IEXC1_IOUT1_IEXC2_IOUT2 0 /* IEXC1 connect to IOUT1,
117 * IEXC2 connect to IOUT2 */
118#define AD7793_IO_IEXC1_IOUT2_IEXC2_IOUT1 1 /* IEXC1 connect to IOUT2,
119 * IEXC2 connect to IOUT1 */
120#define AD7793_IO_IEXC1_IEXC2_IOUT1 2 /* Both current sources
121 * IEXC1,2 connect to IOUT1 */
122#define AD7793_IO_IEXC1_IEXC2_IOUT2 3 /* Both current sources
123 * IEXC1,2 connect to IOUT2 */
124
125#define AD7793_IO_IXCEN_10uA (1 << 0) /* Excitation Current 10uA */
126#define AD7793_IO_IXCEN_210uA (2 << 0) /* Excitation Current 210uA */
127#define AD7793_IO_IXCEN_1mA (3 << 0) /* Excitation Current 1mA */
30 128
31/* NOTE: 129/* NOTE:
32 * The AD7792/AD7793 features a dual use data out ready DOUT/RDY output. 130 * The AD7792/AD7793 features a dual use data out ready DOUT/RDY output.
@@ -36,9 +134,21 @@
36 * The DOUT/RDY output must also be wired to an interrupt capable GPIO. 134 * The DOUT/RDY output must also be wired to an interrupt capable GPIO.
37 */ 135 */
38 136
137#define AD7793_FLAG_HAS_CLKSEL BIT(0)
138#define AD7793_FLAG_HAS_REFSEL BIT(1)
139#define AD7793_FLAG_HAS_VBIAS BIT(2)
140#define AD7793_HAS_EXITATION_CURRENT BIT(3)
141#define AD7793_FLAG_HAS_GAIN BIT(4)
142#define AD7793_FLAG_HAS_BUFFER BIT(5)
143
39struct ad7793_chip_info { 144struct ad7793_chip_info {
145 unsigned int id;
40 const struct iio_chan_spec *channels; 146 const struct iio_chan_spec *channels;
41 unsigned int num_channels; 147 unsigned int num_channels;
148 unsigned int flags;
149
150 const struct iio_info *iio_info;
151 const u16 *sample_freq_avail;
42}; 152};
43 153
44struct ad7793_state { 154struct ad7793_state {
@@ -59,6 +169,10 @@ enum ad7793_supported_device_ids {
59 ID_AD7793, 169 ID_AD7793,
60 ID_AD7794, 170 ID_AD7794,
61 ID_AD7795, 171 ID_AD7795,
172 ID_AD7796,
173 ID_AD7797,
174 ID_AD7798,
175 ID_AD7799,
62}; 176};
63 177
64static struct ad7793_state *ad_sigma_delta_to_ad7793(struct ad_sigma_delta *sd) 178static struct ad7793_state *ad_sigma_delta_to_ad7793(struct ad_sigma_delta *sd)
@@ -110,19 +224,52 @@ static int ad7793_calibrate_all(struct ad7793_state *st)
110 ARRAY_SIZE(ad7793_calib_arr)); 224 ARRAY_SIZE(ad7793_calib_arr));
111} 225}
112 226
113static int ad7793_setup(struct iio_dev *indio_dev, 227static int ad7793_check_platform_data(struct ad7793_state *st,
114 const struct ad7793_platform_data *pdata) 228 const struct ad7793_platform_data *pdata)
115{ 229{
230 if ((pdata->current_source_direction == AD7793_IEXEC1_IEXEC2_IOUT1 ||
231 pdata->current_source_direction == AD7793_IEXEC1_IEXEC2_IOUT2) &&
232 ((pdata->exitation_current != AD7793_IX_10uA) &&
233 (pdata->exitation_current != AD7793_IX_210uA)))
234 return -EINVAL;
235
236 if (!(st->chip_info->flags & AD7793_FLAG_HAS_CLKSEL) &&
237 pdata->clock_src != AD7793_CLK_SRC_INT)
238 return -EINVAL;
239
240 if (!(st->chip_info->flags & AD7793_FLAG_HAS_REFSEL) &&
241 pdata->refsel != AD7793_REFSEL_REFIN1)
242 return -EINVAL;
243
244 if (!(st->chip_info->flags & AD7793_FLAG_HAS_VBIAS) &&
245 pdata->bias_voltage != AD7793_BIAS_VOLTAGE_DISABLED)
246 return -EINVAL;
247
248 if (!(st->chip_info->flags & AD7793_HAS_EXITATION_CURRENT) &&
249 pdata->exitation_current != AD7793_IX_DISABLED)
250 return -EINVAL;
251
252 return 0;
253}
254
255static int ad7793_setup(struct iio_dev *indio_dev,
256 const struct ad7793_platform_data *pdata,
257 unsigned int vref_mv)
258{
116 struct ad7793_state *st = iio_priv(indio_dev); 259 struct ad7793_state *st = iio_priv(indio_dev);
117 int i, ret = -1; 260 int i, ret = -1;
118 unsigned long long scale_uv; 261 unsigned long long scale_uv;
119 u32 id; 262 u32 id;
120 263
264 ret = ad7793_check_platform_data(st, pdata);
265 if (ret)
266 return ret;
267
121 /* reset the serial interface */ 268 /* reset the serial interface */
122 ret = spi_write(st->sd.spi, (u8 *)&ret, sizeof(ret)); 269 ret = spi_write(st->sd.spi, (u8 *)&ret, sizeof(ret));
123 if (ret < 0) 270 if (ret < 0)
124 goto out; 271 goto out;
125 msleep(1); /* Wait for at least 500us */ 272 usleep_range(500, 2000); /* Wait for at least 500us */
126 273
127 /* write/read test for device presence */ 274 /* write/read test for device presence */
128 ret = ad_sd_read_reg(&st->sd, AD7793_REG_ID, 1, &id); 275 ret = ad_sd_read_reg(&st->sd, AD7793_REG_ID, 1, &id);
@@ -131,13 +278,32 @@ static int ad7793_setup(struct iio_dev *indio_dev,
131 278
132 id &= AD7793_ID_MASK; 279 id &= AD7793_ID_MASK;
133 280
134 if (!((id == AD7792_ID) || (id == AD7793_ID) || (id == AD7795_ID))) { 281 if (id != st->chip_info->id) {
135 dev_err(&st->sd.spi->dev, "device ID query failed\n"); 282 dev_err(&st->sd.spi->dev, "device ID query failed\n");
136 goto out; 283 goto out;
137 } 284 }
138 285
139 st->mode = pdata->mode; 286 st->mode = AD7793_MODE_RATE(1);
140 st->conf = pdata->conf; 287 st->conf = 0;
288
289 if (st->chip_info->flags & AD7793_FLAG_HAS_CLKSEL)
290 st->mode |= AD7793_MODE_CLKSRC(pdata->clock_src);
291 if (st->chip_info->flags & AD7793_FLAG_HAS_REFSEL)
292 st->conf |= AD7793_CONF_REFSEL(pdata->refsel);
293 if (st->chip_info->flags & AD7793_FLAG_HAS_VBIAS)
294 st->conf |= AD7793_CONF_VBIAS(pdata->bias_voltage);
295 if (pdata->buffered || !(st->chip_info->flags & AD7793_FLAG_HAS_BUFFER))
296 st->conf |= AD7793_CONF_BUF;
297 if (pdata->boost_enable &&
298 (st->chip_info->flags & AD7793_FLAG_HAS_VBIAS))
299 st->conf |= AD7793_CONF_BOOST;
300 if (pdata->burnout_current)
301 st->conf |= AD7793_CONF_BO_EN;
302 if (pdata->unipolar)
303 st->conf |= AD7793_CONF_UNIPOLAR;
304
305 if (!(st->chip_info->flags & AD7793_FLAG_HAS_GAIN))
306 st->conf |= AD7793_CONF_GAIN(7);
141 307
142 ret = ad7793_set_mode(&st->sd, AD_SD_MODE_IDLE); 308 ret = ad7793_set_mode(&st->sd, AD_SD_MODE_IDLE);
143 if (ret) 309 if (ret)
@@ -147,10 +313,13 @@ static int ad7793_setup(struct iio_dev *indio_dev,
147 if (ret) 313 if (ret)
148 goto out; 314 goto out;
149 315
150 ret = ad_sd_write_reg(&st->sd, AD7793_REG_IO, 316 if (st->chip_info->flags & AD7793_HAS_EXITATION_CURRENT) {
151 sizeof(pdata->io), pdata->io); 317 ret = ad_sd_write_reg(&st->sd, AD7793_REG_IO, 1,
152 if (ret) 318 pdata->exitation_current |
153 goto out; 319 (pdata->current_source_direction << 2));
320 if (ret)
321 goto out;
322 }
154 323
155 ret = ad7793_calibrate_all(st); 324 ret = ad7793_calibrate_all(st);
156 if (ret) 325 if (ret)
@@ -158,7 +327,7 @@ static int ad7793_setup(struct iio_dev *indio_dev,
158 327
159 /* Populate available ADC input ranges */ 328 /* Populate available ADC input ranges */
160 for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++) { 329 for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++) {
161 scale_uv = ((u64)st->int_vref_mv * 100000000) 330 scale_uv = ((u64)vref_mv * 100000000)
162 >> (st->chip_info->channels[0].scan_type.realbits - 331 >> (st->chip_info->channels[0].scan_type.realbits -
163 (!!(st->conf & AD7793_CONF_UNIPOLAR) ? 0 : 1)); 332 (!!(st->conf & AD7793_CONF_UNIPOLAR) ? 0 : 1));
164 scale_uv >>= i; 333 scale_uv >>= i;
@@ -173,8 +342,11 @@ out:
173 return ret; 342 return ret;
174} 343}
175 344
176static const u16 sample_freq_avail[16] = {0, 470, 242, 123, 62, 50, 39, 33, 19, 345static const u16 ad7793_sample_freq_avail[16] = {0, 470, 242, 123, 62, 50, 39,
177 17, 16, 12, 10, 8, 6, 4}; 346 33, 19, 17, 16, 12, 10, 8, 6, 4};
347
348static const u16 ad7797_sample_freq_avail[16] = {0, 0, 0, 123, 62, 50, 0,
349 33, 0, 17, 16, 12, 10, 8, 6, 4};
178 350
179static ssize_t ad7793_read_frequency(struct device *dev, 351static ssize_t ad7793_read_frequency(struct device *dev,
180 struct device_attribute *attr, 352 struct device_attribute *attr,
@@ -184,7 +356,7 @@ static ssize_t ad7793_read_frequency(struct device *dev,
184 struct ad7793_state *st = iio_priv(indio_dev); 356 struct ad7793_state *st = iio_priv(indio_dev);
185 357
186 return sprintf(buf, "%d\n", 358 return sprintf(buf, "%d\n",
187 sample_freq_avail[AD7793_MODE_RATE(st->mode)]); 359 st->chip_info->sample_freq_avail[AD7793_MODE_RATE(st->mode)]);
188} 360}
189 361
190static ssize_t ad7793_write_frequency(struct device *dev, 362static ssize_t ad7793_write_frequency(struct device *dev,
@@ -204,14 +376,17 @@ static ssize_t ad7793_write_frequency(struct device *dev,
204 } 376 }
205 mutex_unlock(&indio_dev->mlock); 377 mutex_unlock(&indio_dev->mlock);
206 378
207 ret = strict_strtol(buf, 10, &lval); 379 ret = kstrtol(buf, 10, &lval);
208 if (ret) 380 if (ret)
209 return ret; 381 return ret;
210 382
383 if (lval == 0)
384 return -EINVAL;
385
211 ret = -EINVAL; 386 ret = -EINVAL;
212 387
213 for (i = 0; i < ARRAY_SIZE(sample_freq_avail); i++) 388 for (i = 0; i < 16; i++)
214 if (lval == sample_freq_avail[i]) { 389 if (lval == st->chip_info->sample_freq_avail[i]) {
215 mutex_lock(&indio_dev->mlock); 390 mutex_lock(&indio_dev->mlock);
216 st->mode &= ~AD7793_MODE_RATE(-1); 391 st->mode &= ~AD7793_MODE_RATE(-1);
217 st->mode |= AD7793_MODE_RATE(i); 392 st->mode |= AD7793_MODE_RATE(i);
@@ -231,6 +406,9 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
231static IIO_CONST_ATTR_SAMP_FREQ_AVAIL( 406static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
232 "470 242 123 62 50 39 33 19 17 16 12 10 8 6 4"); 407 "470 242 123 62 50 39 33 19 17 16 12 10 8 6 4");
233 408
409static IIO_CONST_ATTR_NAMED(sampling_frequency_available_ad7797,
410 sampling_frequency_available, "123 62 50 33 17 16 12 10 8 6 4");
411
234static ssize_t ad7793_show_scale_available(struct device *dev, 412static ssize_t ad7793_show_scale_available(struct device *dev,
235 struct device_attribute *attr, char *buf) 413 struct device_attribute *attr, char *buf)
236{ 414{
@@ -262,6 +440,16 @@ static const struct attribute_group ad7793_attribute_group = {
262 .attrs = ad7793_attributes, 440 .attrs = ad7793_attributes,
263}; 441};
264 442
443static struct attribute *ad7797_attributes[] = {
444 &iio_dev_attr_sampling_frequency.dev_attr.attr,
445 &iio_const_attr_sampling_frequency_available_ad7797.dev_attr.attr,
446 NULL
447};
448
449static const struct attribute_group ad7797_attribute_group = {
450 .attrs = ad7797_attributes,
451};
452
265static int ad7793_read_raw(struct iio_dev *indio_dev, 453static int ad7793_read_raw(struct iio_dev *indio_dev,
266 struct iio_chan_spec const *chan, 454 struct iio_chan_spec const *chan,
267 int *val, 455 int *val,
@@ -292,12 +480,12 @@ static int ad7793_read_raw(struct iio_dev *indio_dev,
292 return IIO_VAL_INT_PLUS_NANO; 480 return IIO_VAL_INT_PLUS_NANO;
293 } else { 481 } else {
294 /* 1170mV / 2^23 * 6 */ 482 /* 1170mV / 2^23 * 6 */
295 scale_uv = (1170ULL * 100000000ULL * 6ULL); 483 scale_uv = (1170ULL * 1000000000ULL * 6ULL);
296 } 484 }
297 break; 485 break;
298 case IIO_TEMP: 486 case IIO_TEMP:
299 /* 1170mV / 0.81 mV/C / 2^23 */ 487 /* 1170mV / 0.81 mV/C / 2^23 */
300 scale_uv = 1444444444444ULL; 488 scale_uv = 1444444444444444ULL;
301 break; 489 break;
302 default: 490 default:
303 return -EINVAL; 491 return -EINVAL;
@@ -387,6 +575,15 @@ static const struct iio_info ad7793_info = {
387 .driver_module = THIS_MODULE, 575 .driver_module = THIS_MODULE,
388}; 576};
389 577
578static const struct iio_info ad7797_info = {
579 .read_raw = &ad7793_read_raw,
580 .write_raw = &ad7793_write_raw,
581 .write_raw_get_fmt = &ad7793_write_raw_get_fmt,
582 .attrs = &ad7793_attribute_group,
583 .validate_trigger = ad_sd_validate_trigger,
584 .driver_module = THIS_MODULE,
585};
586
390#define DECLARE_AD7793_CHANNELS(_name, _b, _sb, _s) \ 587#define DECLARE_AD7793_CHANNELS(_name, _b, _sb, _s) \
391const struct iio_chan_spec _name##_channels[] = { \ 588const struct iio_chan_spec _name##_channels[] = { \
392 AD_SD_DIFF_CHANNEL(0, 0, 0, AD7793_CH_AIN1P_AIN1M, (_b), (_sb), (_s)), \ 589 AD_SD_DIFF_CHANNEL(0, 0, 0, AD7793_CH_AIN1P_AIN1M, (_b), (_sb), (_s)), \
@@ -412,32 +609,134 @@ const struct iio_chan_spec _name##_channels[] = { \
412 IIO_CHAN_SOFT_TIMESTAMP(9), \ 609 IIO_CHAN_SOFT_TIMESTAMP(9), \
413} 610}
414 611
612#define DECLARE_AD7797_CHANNELS(_name, _b, _sb) \
613const struct iio_chan_spec _name##_channels[] = { \
614 AD_SD_DIFF_CHANNEL(0, 0, 0, AD7793_CH_AIN1P_AIN1M, (_b), (_sb), 0), \
615 AD_SD_SHORTED_CHANNEL(1, 0, AD7793_CH_AIN1M_AIN1M, (_b), (_sb), 0), \
616 AD_SD_TEMP_CHANNEL(2, AD7793_CH_TEMP, (_b), (_sb), 0), \
617 AD_SD_SUPPLY_CHANNEL(3, 3, AD7793_CH_AVDD_MONITOR, (_b), (_sb), 0), \
618 IIO_CHAN_SOFT_TIMESTAMP(4), \
619}
620
621#define DECLARE_AD7799_CHANNELS(_name, _b, _sb) \
622const struct iio_chan_spec _name##_channels[] = { \
623 AD_SD_DIFF_CHANNEL(0, 0, 0, AD7793_CH_AIN1P_AIN1M, (_b), (_sb), 0), \
624 AD_SD_DIFF_CHANNEL(1, 1, 1, AD7793_CH_AIN2P_AIN2M, (_b), (_sb), 0), \
625 AD_SD_DIFF_CHANNEL(2, 2, 2, AD7793_CH_AIN3P_AIN3M, (_b), (_sb), 0), \
626 AD_SD_SHORTED_CHANNEL(3, 0, AD7793_CH_AIN1M_AIN1M, (_b), (_sb), 0), \
627 AD_SD_SUPPLY_CHANNEL(4, 3, AD7793_CH_AVDD_MONITOR, (_b), (_sb), 0), \
628 IIO_CHAN_SOFT_TIMESTAMP(5), \
629}
630
415static DECLARE_AD7793_CHANNELS(ad7785, 20, 32, 4); 631static DECLARE_AD7793_CHANNELS(ad7785, 20, 32, 4);
416static DECLARE_AD7793_CHANNELS(ad7792, 16, 32, 0); 632static DECLARE_AD7793_CHANNELS(ad7792, 16, 32, 0);
417static DECLARE_AD7793_CHANNELS(ad7793, 24, 32, 0); 633static DECLARE_AD7793_CHANNELS(ad7793, 24, 32, 0);
418static DECLARE_AD7795_CHANNELS(ad7794, 16, 32); 634static DECLARE_AD7795_CHANNELS(ad7794, 16, 32);
419static DECLARE_AD7795_CHANNELS(ad7795, 24, 32); 635static DECLARE_AD7795_CHANNELS(ad7795, 24, 32);
636static DECLARE_AD7797_CHANNELS(ad7796, 16, 16);
637static DECLARE_AD7797_CHANNELS(ad7797, 24, 32);
638static DECLARE_AD7799_CHANNELS(ad7798, 16, 16);
639static DECLARE_AD7799_CHANNELS(ad7799, 24, 32);
420 640
421static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { 641static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
422 [ID_AD7785] = { 642 [ID_AD7785] = {
643 .id = AD7785_ID,
423 .channels = ad7785_channels, 644 .channels = ad7785_channels,
424 .num_channels = ARRAY_SIZE(ad7785_channels), 645 .num_channels = ARRAY_SIZE(ad7785_channels),
646 .iio_info = &ad7793_info,
647 .sample_freq_avail = ad7793_sample_freq_avail,
648 .flags = AD7793_FLAG_HAS_CLKSEL |
649 AD7793_FLAG_HAS_REFSEL |
650 AD7793_FLAG_HAS_VBIAS |
651 AD7793_HAS_EXITATION_CURRENT |
652 AD7793_FLAG_HAS_GAIN |
653 AD7793_FLAG_HAS_BUFFER,
425 }, 654 },
426 [ID_AD7792] = { 655 [ID_AD7792] = {
656 .id = AD7792_ID,
427 .channels = ad7792_channels, 657 .channels = ad7792_channels,
428 .num_channels = ARRAY_SIZE(ad7792_channels), 658 .num_channels = ARRAY_SIZE(ad7792_channels),
659 .iio_info = &ad7793_info,
660 .sample_freq_avail = ad7793_sample_freq_avail,
661 .flags = AD7793_FLAG_HAS_CLKSEL |
662 AD7793_FLAG_HAS_REFSEL |
663 AD7793_FLAG_HAS_VBIAS |
664 AD7793_HAS_EXITATION_CURRENT |
665 AD7793_FLAG_HAS_GAIN |
666 AD7793_FLAG_HAS_BUFFER,
429 }, 667 },
430 [ID_AD7793] = { 668 [ID_AD7793] = {
669 .id = AD7793_ID,
431 .channels = ad7793_channels, 670 .channels = ad7793_channels,
432 .num_channels = ARRAY_SIZE(ad7793_channels), 671 .num_channels = ARRAY_SIZE(ad7793_channels),
672 .iio_info = &ad7793_info,
673 .sample_freq_avail = ad7793_sample_freq_avail,
674 .flags = AD7793_FLAG_HAS_CLKSEL |
675 AD7793_FLAG_HAS_REFSEL |
676 AD7793_FLAG_HAS_VBIAS |
677 AD7793_HAS_EXITATION_CURRENT |
678 AD7793_FLAG_HAS_GAIN |
679 AD7793_FLAG_HAS_BUFFER,
433 }, 680 },
434 [ID_AD7794] = { 681 [ID_AD7794] = {
682 .id = AD7794_ID,
435 .channels = ad7794_channels, 683 .channels = ad7794_channels,
436 .num_channels = ARRAY_SIZE(ad7794_channels), 684 .num_channels = ARRAY_SIZE(ad7794_channels),
685 .iio_info = &ad7793_info,
686 .sample_freq_avail = ad7793_sample_freq_avail,
687 .flags = AD7793_FLAG_HAS_CLKSEL |
688 AD7793_FLAG_HAS_REFSEL |
689 AD7793_FLAG_HAS_VBIAS |
690 AD7793_HAS_EXITATION_CURRENT |
691 AD7793_FLAG_HAS_GAIN |
692 AD7793_FLAG_HAS_BUFFER,
437 }, 693 },
438 [ID_AD7795] = { 694 [ID_AD7795] = {
695 .id = AD7795_ID,
439 .channels = ad7795_channels, 696 .channels = ad7795_channels,
440 .num_channels = ARRAY_SIZE(ad7795_channels), 697 .num_channels = ARRAY_SIZE(ad7795_channels),
698 .iio_info = &ad7793_info,
699 .sample_freq_avail = ad7793_sample_freq_avail,
700 .flags = AD7793_FLAG_HAS_CLKSEL |
701 AD7793_FLAG_HAS_REFSEL |
702 AD7793_FLAG_HAS_VBIAS |
703 AD7793_HAS_EXITATION_CURRENT |
704 AD7793_FLAG_HAS_GAIN |
705 AD7793_FLAG_HAS_BUFFER,
706 },
707 [ID_AD7796] = {
708 .id = AD7796_ID,
709 .channels = ad7796_channels,
710 .num_channels = ARRAY_SIZE(ad7796_channels),
711 .iio_info = &ad7797_info,
712 .sample_freq_avail = ad7797_sample_freq_avail,
713 .flags = AD7793_FLAG_HAS_CLKSEL,
714 },
715 [ID_AD7797] = {
716 .id = AD7797_ID,
717 .channels = ad7797_channels,
718 .num_channels = ARRAY_SIZE(ad7797_channels),
719 .iio_info = &ad7797_info,
720 .sample_freq_avail = ad7797_sample_freq_avail,
721 .flags = AD7793_FLAG_HAS_CLKSEL,
722 },
723 [ID_AD7798] = {
724 .id = AD7798_ID,
725 .channels = ad7798_channels,
726 .num_channels = ARRAY_SIZE(ad7798_channels),
727 .iio_info = &ad7793_info,
728 .sample_freq_avail = ad7793_sample_freq_avail,
729 .flags = AD7793_FLAG_HAS_GAIN |
730 AD7793_FLAG_HAS_BUFFER,
731 },
732 [ID_AD7799] = {
733 .id = AD7799_ID,
734 .channels = ad7799_channels,
735 .num_channels = ARRAY_SIZE(ad7799_channels),
736 .iio_info = &ad7793_info,
737 .sample_freq_avail = ad7793_sample_freq_avail,
738 .flags = AD7793_FLAG_HAS_GAIN |
739 AD7793_FLAG_HAS_BUFFER,
441 }, 740 },
442}; 741};
443 742
@@ -446,7 +745,7 @@ static int ad7793_probe(struct spi_device *spi)
446 const struct ad7793_platform_data *pdata = spi->dev.platform_data; 745 const struct ad7793_platform_data *pdata = spi->dev.platform_data;
447 struct ad7793_state *st; 746 struct ad7793_state *st;
448 struct iio_dev *indio_dev; 747 struct iio_dev *indio_dev;
449 int ret, voltage_uv = 0; 748 int ret, vref_mv = 0;
450 749
451 if (!pdata) { 750 if (!pdata) {
452 dev_err(&spi->dev, "no platform data?\n"); 751 dev_err(&spi->dev, "no platform data?\n");
@@ -466,25 +765,31 @@ static int ad7793_probe(struct spi_device *spi)
466 765
467 ad_sd_init(&st->sd, indio_dev, spi, &ad7793_sigma_delta_info); 766 ad_sd_init(&st->sd, indio_dev, spi, &ad7793_sigma_delta_info);
468 767
469 st->reg = regulator_get(&spi->dev, "vcc"); 768 if (pdata->refsel != AD7793_REFSEL_INTERNAL) {
470 if (!IS_ERR(st->reg)) { 769 st->reg = regulator_get(&spi->dev, "refin");
770 if (IS_ERR(st->reg)) {
771 ret = PTR_ERR(st->reg);
772 goto error_device_free;
773 }
774
471 ret = regulator_enable(st->reg); 775 ret = regulator_enable(st->reg);
472 if (ret) 776 if (ret)
473 goto error_put_reg; 777 goto error_put_reg;
474 778
475 voltage_uv = regulator_get_voltage(st->reg); 779 vref_mv = regulator_get_voltage(st->reg);
780 if (vref_mv < 0) {
781 ret = vref_mv;
782 goto error_disable_reg;
783 }
784
785 vref_mv /= 1000;
786 } else {
787 vref_mv = 1170; /* Build-in ref */
476 } 788 }
477 789
478 st->chip_info = 790 st->chip_info =
479 &ad7793_chip_info_tbl[spi_get_device_id(spi)->driver_data]; 791 &ad7793_chip_info_tbl[spi_get_device_id(spi)->driver_data];
480 792
481 if (pdata && pdata->vref_mv)
482 st->int_vref_mv = pdata->vref_mv;
483 else if (voltage_uv)
484 st->int_vref_mv = voltage_uv / 1000;
485 else
486 st->int_vref_mv = 1170; /* Build-in ref */
487
488 spi_set_drvdata(spi, indio_dev); 793 spi_set_drvdata(spi, indio_dev);
489 794
490 indio_dev->dev.parent = &spi->dev; 795 indio_dev->dev.parent = &spi->dev;
@@ -492,13 +797,13 @@ static int ad7793_probe(struct spi_device *spi)
492 indio_dev->modes = INDIO_DIRECT_MODE; 797 indio_dev->modes = INDIO_DIRECT_MODE;
493 indio_dev->channels = st->chip_info->channels; 798 indio_dev->channels = st->chip_info->channels;
494 indio_dev->num_channels = st->chip_info->num_channels; 799 indio_dev->num_channels = st->chip_info->num_channels;
495 indio_dev->info = &ad7793_info; 800 indio_dev->info = st->chip_info->iio_info;
496 801
497 ret = ad_sd_setup_buffer_and_trigger(indio_dev); 802 ret = ad_sd_setup_buffer_and_trigger(indio_dev);
498 if (ret) 803 if (ret)
499 goto error_disable_reg; 804 goto error_disable_reg;
500 805
501 ret = ad7793_setup(indio_dev, pdata); 806 ret = ad7793_setup(indio_dev, pdata, vref_mv);
502 if (ret) 807 if (ret)
503 goto error_remove_trigger; 808 goto error_remove_trigger;
504 809
@@ -511,12 +816,12 @@ static int ad7793_probe(struct spi_device *spi)
511error_remove_trigger: 816error_remove_trigger:
512 ad_sd_cleanup_buffer_and_trigger(indio_dev); 817 ad_sd_cleanup_buffer_and_trigger(indio_dev);
513error_disable_reg: 818error_disable_reg:
514 if (!IS_ERR(st->reg)) 819 if (pdata->refsel != AD7793_REFSEL_INTERNAL)
515 regulator_disable(st->reg); 820 regulator_disable(st->reg);
516error_put_reg: 821error_put_reg:
517 if (!IS_ERR(st->reg)) 822 if (pdata->refsel != AD7793_REFSEL_INTERNAL)
518 regulator_put(st->reg); 823 regulator_put(st->reg);
519 824error_device_free:
520 iio_device_free(indio_dev); 825 iio_device_free(indio_dev);
521 826
522 return ret; 827 return ret;
@@ -524,13 +829,14 @@ error_put_reg:
524 829
525static int ad7793_remove(struct spi_device *spi) 830static int ad7793_remove(struct spi_device *spi)
526{ 831{
832 const struct ad7793_platform_data *pdata = spi->dev.platform_data;
527 struct iio_dev *indio_dev = spi_get_drvdata(spi); 833 struct iio_dev *indio_dev = spi_get_drvdata(spi);
528 struct ad7793_state *st = iio_priv(indio_dev); 834 struct ad7793_state *st = iio_priv(indio_dev);
529 835
530 iio_device_unregister(indio_dev); 836 iio_device_unregister(indio_dev);
531 ad_sd_cleanup_buffer_and_trigger(indio_dev); 837 ad_sd_cleanup_buffer_and_trigger(indio_dev);
532 838
533 if (!IS_ERR(st->reg)) { 839 if (pdata->refsel != AD7793_REFSEL_INTERNAL) {
534 regulator_disable(st->reg); 840 regulator_disable(st->reg);
535 regulator_put(st->reg); 841 regulator_put(st->reg);
536 } 842 }
@@ -546,6 +852,10 @@ static const struct spi_device_id ad7793_id[] = {
546 {"ad7793", ID_AD7793}, 852 {"ad7793", ID_AD7793},
547 {"ad7794", ID_AD7794}, 853 {"ad7794", ID_AD7794},
548 {"ad7795", ID_AD7795}, 854 {"ad7795", ID_AD7795},
855 {"ad7796", ID_AD7796},
856 {"ad7797", ID_AD7797},
857 {"ad7798", ID_AD7798},
858 {"ad7799", ID_AD7799},
549 {} 859 {}
550}; 860};
551MODULE_DEVICE_TABLE(spi, ad7793_id); 861MODULE_DEVICE_TABLE(spi, ad7793_id);
diff --git a/drivers/iio/adc/ti-adc081c.c b/drivers/iio/adc/ti-adc081c.c
new file mode 100644
index 000000000000..f4a46dd8f43b
--- /dev/null
+++ b/drivers/iio/adc/ti-adc081c.c
@@ -0,0 +1,161 @@
1/*
2 * Copyright (C) 2012 Avionic Design GmbH
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#include <linux/err.h>
10#include <linux/i2c.h>
11#include <linux/module.h>
12
13#include <linux/iio/iio.h>
14#include <linux/regulator/consumer.h>
15
16struct adc081c {
17 struct i2c_client *i2c;
18 struct regulator *ref;
19};
20
21#define REG_CONV_RES 0x00
22
23static int adc081c_read_raw(struct iio_dev *iio,
24 struct iio_chan_spec const *channel, int *value,
25 int *shift, long mask)
26{
27 struct adc081c *adc = iio_priv(iio);
28 int err;
29
30 switch (mask) {
31 case IIO_CHAN_INFO_RAW:
32 err = i2c_smbus_read_word_swapped(adc->i2c, REG_CONV_RES);
33 if (err < 0)
34 return err;
35
36 *value = (err >> 4) & 0xff;
37 return IIO_VAL_INT;
38
39 case IIO_CHAN_INFO_SCALE:
40 err = regulator_get_voltage(adc->ref);
41 if (err < 0)
42 return err;
43
44 *value = err / 1000;
45 *shift = 8;
46
47 return IIO_VAL_FRACTIONAL_LOG2;
48
49 default:
50 break;
51 }
52
53 return -EINVAL;
54}
55
56static const struct iio_chan_spec adc081c_channel = {
57 .type = IIO_VOLTAGE,
58 .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT |
59 IIO_CHAN_INFO_RAW_SEPARATE_BIT,
60};
61
62static const struct iio_info adc081c_info = {
63 .read_raw = adc081c_read_raw,
64 .driver_module = THIS_MODULE,
65};
66
67static int adc081c_probe(struct i2c_client *client,
68 const struct i2c_device_id *id)
69{
70 struct iio_dev *iio;
71 struct adc081c *adc;
72 int err;
73
74 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA))
75 return -ENODEV;
76
77 iio = iio_device_alloc(sizeof(*adc));
78 if (!iio)
79 return -ENOMEM;
80
81 adc = iio_priv(iio);
82 adc->i2c = client;
83
84 adc->ref = regulator_get(&client->dev, "vref");
85 if (IS_ERR(adc->ref)) {
86 err = PTR_ERR(adc->ref);
87 goto iio_free;
88 }
89
90 err = regulator_enable(adc->ref);
91 if (err < 0)
92 goto regulator_put;
93
94 iio->dev.parent = &client->dev;
95 iio->name = dev_name(&client->dev);
96 iio->modes = INDIO_DIRECT_MODE;
97 iio->info = &adc081c_info;
98
99 iio->channels = &adc081c_channel;
100 iio->num_channels = 1;
101
102 err = iio_device_register(iio);
103 if (err < 0)
104 goto regulator_disable;
105
106 i2c_set_clientdata(client, iio);
107
108 return 0;
109
110regulator_disable:
111 regulator_disable(adc->ref);
112regulator_put:
113 regulator_put(adc->ref);
114iio_free:
115 iio_device_free(iio);
116
117 return err;
118}
119
120static int adc081c_remove(struct i2c_client *client)
121{
122 struct iio_dev *iio = i2c_get_clientdata(client);
123 struct adc081c *adc = iio_priv(iio);
124
125 iio_device_unregister(iio);
126 regulator_disable(adc->ref);
127 regulator_put(adc->ref);
128 iio_device_free(iio);
129
130 return 0;
131}
132
133static const struct i2c_device_id adc081c_id[] = {
134 { "adc081c", 0 },
135 { }
136};
137MODULE_DEVICE_TABLE(i2c, adc081c_id);
138
139#ifdef CONFIG_OF
140static const struct of_device_id adc081c_of_match[] = {
141 { .compatible = "ti,adc081c" },
142 { }
143};
144MODULE_DEVICE_TABLE(of, adc081c_of_match);
145#endif
146
147static struct i2c_driver adc081c_driver = {
148 .driver = {
149 .name = "adc081c",
150 .owner = THIS_MODULE,
151 .of_match_table = of_match_ptr(adc081c_of_match),
152 },
153 .probe = adc081c_probe,
154 .remove = adc081c_remove,
155 .id_table = adc081c_id,
156};
157module_i2c_driver(adc081c_driver);
158
159MODULE_AUTHOR("Thierry Reding <thierry.reding@avionic-design.de>");
160MODULE_DESCRIPTION("Texas Instruments ADC081C021/027 driver");
161MODULE_LICENSE("GPL v2");
diff --git a/drivers/iio/gyro/adis16136.c b/drivers/iio/gyro/adis16136.c
index 05486dfd721b..8cb0bcbfd609 100644
--- a/drivers/iio/gyro/adis16136.c
+++ b/drivers/iio/gyro/adis16136.c
@@ -22,7 +22,6 @@
22#include <linux/iio/buffer.h> 22#include <linux/iio/buffer.h>
23#include <linux/iio/imu/adis.h> 23#include <linux/iio/imu/adis.h>
24 24
25#include <linux/iio/iio.h>
26#include <linux/debugfs.h> 25#include <linux/debugfs.h>
27 26
28#define ADIS16136_REG_FLASH_CNT 0x00 27#define ADIS16136_REG_FLASH_CNT 0x00
@@ -203,10 +202,10 @@ static ssize_t adis16136_write_frequency(struct device *dev,
203{ 202{
204 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 203 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
205 struct adis16136 *adis16136 = iio_priv(indio_dev); 204 struct adis16136 *adis16136 = iio_priv(indio_dev);
206 long val; 205 unsigned int val;
207 int ret; 206 int ret;
208 207
209 ret = kstrtol(buf, 10, &val); 208 ret = kstrtouint(buf, 10, &val);
210 if (ret) 209 if (ret)
211 return ret; 210 return ret;
212 211
diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c
index a080b3515015..8c26a5f7cd5d 100644
--- a/drivers/iio/imu/adis16480.c
+++ b/drivers/iio/imu/adis16480.c
@@ -24,7 +24,6 @@
24#include <linux/iio/buffer.h> 24#include <linux/iio/buffer.h>
25#include <linux/iio/imu/adis.h> 25#include <linux/iio/imu/adis.h>
26 26
27#include <linux/iio/iio.h>
28#include <linux/debugfs.h> 27#include <linux/debugfs.h>
29 28
30#define ADIS16480_PAGE_SIZE 0x80 29#define ADIS16480_PAGE_SIZE 0x80
@@ -125,7 +124,7 @@ static ssize_t adis16480_show_firmware_revision(struct file *file,
125 char __user *userbuf, size_t count, loff_t *ppos) 124 char __user *userbuf, size_t count, loff_t *ppos)
126{ 125{
127 struct adis16480 *adis16480 = file->private_data; 126 struct adis16480 *adis16480 = file->private_data;
128 char buf[6]; 127 char buf[7];
129 size_t len; 128 size_t len;
130 u16 rev; 129 u16 rev;
131 int ret; 130 int ret;
@@ -134,7 +133,7 @@ static ssize_t adis16480_show_firmware_revision(struct file *file,
134 if (ret < 0) 133 if (ret < 0)
135 return ret; 134 return ret;
136 135
137 len = snprintf(buf, sizeof(buf), "%x.%x\n", rev >> 8, rev & 0xff); 136 len = scnprintf(buf, sizeof(buf), "%x.%x\n", rev >> 8, rev & 0xff);
138 137
139 return simple_read_from_buffer(userbuf, count, ppos, buf, len); 138 return simple_read_from_buffer(userbuf, count, ppos, buf, len);
140} 139}
diff --git a/drivers/staging/iio/adc/Kconfig b/drivers/staging/iio/adc/Kconfig
index dc8582b95b61..fb8c239b0c88 100644
--- a/drivers/staging/iio/adc/Kconfig
+++ b/drivers/staging/iio/adc/Kconfig
@@ -70,18 +70,6 @@ config AD7780
70 To compile this driver as a module, choose M here: the 70 To compile this driver as a module, choose M here: the
71 module will be called ad7780. 71 module will be called ad7780.
72 72
73config AD7793
74 tristate "Analog Devices AD7793 and similar ADCs driver"
75 depends on SPI
76 select AD_SIGMA_DELTA
77 help
78 Say yes here to build support for Analog Devices AD7785, AD7792, AD7793,
79 AD7794 and AD7795 SPI analog to digital converters (ADC).
80 If unsure, say N (but it's safe to say "Y").
81
82 To compile this driver as a module, choose M here: the
83 module will be called AD7793.
84
85config AD7816 73config AD7816
86 tristate "Analog Devices AD7816/7/8 temperature sensor and ADC driver" 74 tristate "Analog Devices AD7816/7/8 temperature sensor and ADC driver"
87 depends on SPI 75 depends on SPI
diff --git a/drivers/staging/iio/adc/Makefile b/drivers/staging/iio/adc/Makefile
index 7281451a613a..d285596272a0 100644
--- a/drivers/staging/iio/adc/Makefile
+++ b/drivers/staging/iio/adc/Makefile
@@ -14,7 +14,6 @@ obj-$(CONFIG_AD799X) += ad799x.o
14 14
15obj-$(CONFIG_AD7291) += ad7291.o 15obj-$(CONFIG_AD7291) += ad7291.o
16obj-$(CONFIG_AD7780) += ad7780.o 16obj-$(CONFIG_AD7780) += ad7780.o
17obj-$(CONFIG_AD7793) += ad7793.o
18obj-$(CONFIG_AD7816) += ad7816.o 17obj-$(CONFIG_AD7816) += ad7816.o
19obj-$(CONFIG_AD7192) += ad7192.o 18obj-$(CONFIG_AD7192) += ad7192.o
20obj-$(CONFIG_ADT7410) += adt7410.o 19obj-$(CONFIG_ADT7410) += adt7410.o
diff --git a/drivers/staging/iio/adc/ad7793.h b/drivers/staging/iio/adc/ad7793.h
deleted file mode 100644
index 8fdd450a2cd9..000000000000
--- a/drivers/staging/iio/adc/ad7793.h
+++ /dev/null
@@ -1,115 +0,0 @@
1/*
2 * AD7792/AD7793 SPI ADC driver
3 *
4 * Copyright 2011 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2.
7 */
8#ifndef IIO_ADC_AD7793_H_
9#define IIO_ADC_AD7793_H_
10
11/*
12 * TODO: struct ad7793_platform_data needs to go into include/linux/iio
13 */
14
15/* Registers */
16#define AD7793_REG_COMM 0 /* Communications Register (WO, 8-bit) */
17#define AD7793_REG_STAT 0 /* Status Register (RO, 8-bit) */
18#define AD7793_REG_MODE 1 /* Mode Register (RW, 16-bit */
19#define AD7793_REG_CONF 2 /* Configuration Register (RW, 16-bit) */
20#define AD7793_REG_DATA 3 /* Data Register (RO, 16-/24-bit) */
21#define AD7793_REG_ID 4 /* ID Register (RO, 8-bit) */
22#define AD7793_REG_IO 5 /* IO Register (RO, 8-bit) */
23#define AD7793_REG_OFFSET 6 /* Offset Register (RW, 16-bit
24 * (AD7792)/24-bit (AD7793)) */
25#define AD7793_REG_FULLSALE 7 /* Full-Scale Register
26 * (RW, 16-bit (AD7792)/24-bit (AD7793)) */
27
28/* Communications Register Bit Designations (AD7793_REG_COMM) */
29#define AD7793_COMM_WEN (1 << 7) /* Write Enable */
30#define AD7793_COMM_WRITE (0 << 6) /* Write Operation */
31#define AD7793_COMM_READ (1 << 6) /* Read Operation */
32#define AD7793_COMM_ADDR(x) (((x) & 0x7) << 3) /* Register Address */
33#define AD7793_COMM_CREAD (1 << 2) /* Continuous Read of Data Register */
34
35/* Status Register Bit Designations (AD7793_REG_STAT) */
36#define AD7793_STAT_RDY (1 << 7) /* Ready */
37#define AD7793_STAT_ERR (1 << 6) /* Error (Overrange, Underrange) */
38#define AD7793_STAT_CH3 (1 << 2) /* Channel 3 */
39#define AD7793_STAT_CH2 (1 << 1) /* Channel 2 */
40#define AD7793_STAT_CH1 (1 << 0) /* Channel 1 */
41
42/* Mode Register Bit Designations (AD7793_REG_MODE) */
43#define AD7793_MODE_SEL(x) (((x) & 0x7) << 13) /* Operation Mode Select */
44#define AD7793_MODE_SEL_MASK (0x7 << 13) /* Operation Mode Select mask */
45#define AD7793_MODE_CLKSRC(x) (((x) & 0x3) << 6) /* ADC Clock Source Select */
46#define AD7793_MODE_RATE(x) ((x) & 0xF) /* Filter Update Rate Select */
47
48#define AD7793_MODE_CONT 0 /* Continuous Conversion Mode */
49#define AD7793_MODE_SINGLE 1 /* Single Conversion Mode */
50#define AD7793_MODE_IDLE 2 /* Idle Mode */
51#define AD7793_MODE_PWRDN 3 /* Power-Down Mode */
52#define AD7793_MODE_CAL_INT_ZERO 4 /* Internal Zero-Scale Calibration */
53#define AD7793_MODE_CAL_INT_FULL 5 /* Internal Full-Scale Calibration */
54#define AD7793_MODE_CAL_SYS_ZERO 6 /* System Zero-Scale Calibration */
55#define AD7793_MODE_CAL_SYS_FULL 7 /* System Full-Scale Calibration */
56
57#define AD7793_CLK_INT 0 /* Internal 64 kHz Clock not
58 * available at the CLK pin */
59#define AD7793_CLK_INT_CO 1 /* Internal 64 kHz Clock available
60 * at the CLK pin */
61#define AD7793_CLK_EXT 2 /* External 64 kHz Clock */
62#define AD7793_CLK_EXT_DIV2 3 /* External Clock divided by 2 */
63
64/* Configuration Register Bit Designations (AD7793_REG_CONF) */
65#define AD7793_CONF_VBIAS(x) (((x) & 0x3) << 14) /* Bias Voltage
66 * Generator Enable */
67#define AD7793_CONF_BO_EN (1 << 13) /* Burnout Current Enable */
68#define AD7793_CONF_UNIPOLAR (1 << 12) /* Unipolar/Bipolar Enable */
69#define AD7793_CONF_BOOST (1 << 11) /* Boost Enable */
70#define AD7793_CONF_GAIN(x) (((x) & 0x7) << 8) /* Gain Select */
71#define AD7793_CONF_REFSEL (1 << 7) /* INT/EXT Reference Select */
72#define AD7793_CONF_BUF (1 << 4) /* Buffered Mode Enable */
73#define AD7793_CONF_CHAN(x) ((x) & 0xf) /* Channel select */
74#define AD7793_CONF_CHAN_MASK 0xf /* Channel select mask */
75
76#define AD7793_CH_AIN1P_AIN1M 0 /* AIN1(+) - AIN1(-) */
77#define AD7793_CH_AIN2P_AIN2M 1 /* AIN2(+) - AIN2(-) */
78#define AD7793_CH_AIN3P_AIN3M 2 /* AIN3(+) - AIN3(-) */
79#define AD7793_CH_AIN1M_AIN1M 3 /* AIN1(-) - AIN1(-) */
80#define AD7793_CH_TEMP 6 /* Temp Sensor */
81#define AD7793_CH_AVDD_MONITOR 7 /* AVDD Monitor */
82
83#define AD7795_CH_AIN4P_AIN4M 4 /* AIN4(+) - AIN4(-) */
84#define AD7795_CH_AIN5P_AIN5M 5 /* AIN5(+) - AIN5(-) */
85#define AD7795_CH_AIN6P_AIN6M 6 /* AIN6(+) - AIN6(-) */
86#define AD7795_CH_AIN1M_AIN1M 8 /* AIN1(-) - AIN1(-) */
87
88/* ID Register Bit Designations (AD7793_REG_ID) */
89#define AD7792_ID 0xA
90#define AD7793_ID 0xB
91#define AD7795_ID 0xF
92#define AD7793_ID_MASK 0xF
93
94/* IO (Excitation Current Sources) Register Bit Designations (AD7793_REG_IO) */
95#define AD7793_IO_IEXC1_IOUT1_IEXC2_IOUT2 0 /* IEXC1 connect to IOUT1,
96 * IEXC2 connect to IOUT2 */
97#define AD7793_IO_IEXC1_IOUT2_IEXC2_IOUT1 1 /* IEXC1 connect to IOUT2,
98 * IEXC2 connect to IOUT1 */
99#define AD7793_IO_IEXC1_IEXC2_IOUT1 2 /* Both current sources
100 * IEXC1,2 connect to IOUT1 */
101#define AD7793_IO_IEXC1_IEXC2_IOUT2 3 /* Both current sources
102 * IEXC1,2 connect to IOUT2 */
103
104#define AD7793_IO_IXCEN_10uA (1 << 0) /* Excitation Current 10uA */
105#define AD7793_IO_IXCEN_210uA (2 << 0) /* Excitation Current 210uA */
106#define AD7793_IO_IXCEN_1mA (3 << 0) /* Excitation Current 1mA */
107
108struct ad7793_platform_data {
109 u16 vref_mv;
110 u16 mode;
111 u16 conf;
112 u8 io;
113};
114
115#endif /* IIO_ADC_AD7793_H_ */