diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2012-08-10 12:36:00 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2012-08-27 13:10:36 -0400 |
commit | 1abec6ac69fe5aea1013c1e8f764d9e71a8e64c4 (patch) | |
tree | b719a5c8766aeb7d01f18f4bbd9d35567a4e474d | |
parent | 32e0e7e08c32fbd61ddfb7e80ba96c13085f3d39 (diff) |
staging:iio:ad7793: Use common Sigma Delta library
Convert the ad7793 driver to make use of the new common code for devices from
the Analog Devices Sigma Delta family.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r-- | drivers/staging/iio/adc/Kconfig | 3 | ||||
-rw-r--r-- | drivers/staging/iio/adc/ad7793.c | 624 | ||||
-rw-r--r-- | drivers/staging/iio/adc/ad7793.h | 2 |
3 files changed, 75 insertions, 554 deletions
diff --git a/drivers/staging/iio/adc/Kconfig b/drivers/staging/iio/adc/Kconfig index d0eb27be381c..f7d7e44af672 100644 --- a/drivers/staging/iio/adc/Kconfig +++ b/drivers/staging/iio/adc/Kconfig | |||
@@ -111,8 +111,7 @@ config AD7780 | |||
111 | config AD7793 | 111 | config AD7793 |
112 | tristate "Analog Devices AD7792 AD7793 ADC driver" | 112 | tristate "Analog Devices AD7792 AD7793 ADC driver" |
113 | depends on SPI | 113 | depends on SPI |
114 | select IIO_BUFFER | 114 | select AD_SIGMA_DELTA |
115 | select IIO_TRIGGERED_BUFFER | ||
116 | help | 115 | help |
117 | Say yes here to build support for Analog Devices | 116 | Say yes here to build support for Analog Devices |
118 | AD7792 and AD7793 SPI analog to digital converters (ADC). | 117 | AD7792 and AD7793 SPI analog to digital converters (ADC). |
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c index 5c2fcd7d2def..90335958d9c9 100644 --- a/drivers/staging/iio/adc/ad7793.c +++ b/drivers/staging/iio/adc/ad7793.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/iio/trigger.h> | 24 | #include <linux/iio/trigger.h> |
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 | 28 | ||
28 | #include "ad7793.h" | 29 | #include "ad7793.h" |
29 | 30 | ||
@@ -36,27 +37,19 @@ | |||
36 | */ | 37 | */ |
37 | 38 | ||
38 | struct ad7793_chip_info { | 39 | struct ad7793_chip_info { |
39 | struct iio_chan_spec channel[7]; | 40 | struct iio_chan_spec channel[7]; |
40 | }; | 41 | }; |
41 | 42 | ||
42 | struct ad7793_state { | 43 | struct ad7793_state { |
43 | struct spi_device *spi; | ||
44 | struct iio_trigger *trig; | ||
45 | const struct ad7793_chip_info *chip_info; | 44 | const struct ad7793_chip_info *chip_info; |
46 | struct regulator *reg; | 45 | struct regulator *reg; |
47 | wait_queue_head_t wq_data_avail; | ||
48 | bool done; | ||
49 | bool irq_dis; | ||
50 | u16 int_vref_mv; | 46 | u16 int_vref_mv; |
51 | u16 mode; | 47 | u16 mode; |
52 | u16 conf; | 48 | u16 conf; |
53 | u32 scale_avail[8][2]; | 49 | u32 scale_avail[8][2]; |
54 | 50 | ||
55 | /* | 51 | struct ad_sigma_delta sd; |
56 | * DMA (thus cache coherency maintenance) requires the | 52 | |
57 | * transfer buffers to live in their own cache lines. | ||
58 | */ | ||
59 | u8 data[4] ____cacheline_aligned; | ||
60 | }; | 53 | }; |
61 | 54 | ||
62 | enum ad7793_supported_device_ids { | 55 | enum ad7793_supported_device_ids { |
@@ -64,169 +57,41 @@ enum ad7793_supported_device_ids { | |||
64 | ID_AD7793, | 57 | ID_AD7793, |
65 | }; | 58 | }; |
66 | 59 | ||
67 | static int __ad7793_write_reg(struct ad7793_state *st, bool locked, | 60 | static struct ad7793_state *ad_sigma_delta_to_ad7793(struct ad_sigma_delta *sd) |
68 | bool cs_change, unsigned char reg, | ||
69 | unsigned size, unsigned val) | ||
70 | { | 61 | { |
71 | u8 *data = st->data; | 62 | return container_of(sd, struct ad7793_state, sd); |
72 | struct spi_transfer t = { | ||
73 | .tx_buf = data, | ||
74 | .len = size + 1, | ||
75 | .cs_change = cs_change, | ||
76 | }; | ||
77 | struct spi_message m; | ||
78 | |||
79 | data[0] = AD7793_COMM_WRITE | AD7793_COMM_ADDR(reg); | ||
80 | |||
81 | switch (size) { | ||
82 | case 3: | ||
83 | data[1] = val >> 16; | ||
84 | data[2] = val >> 8; | ||
85 | data[3] = val; | ||
86 | break; | ||
87 | case 2: | ||
88 | data[1] = val >> 8; | ||
89 | data[2] = val; | ||
90 | break; | ||
91 | case 1: | ||
92 | data[1] = val; | ||
93 | break; | ||
94 | default: | ||
95 | return -EINVAL; | ||
96 | } | ||
97 | |||
98 | spi_message_init(&m); | ||
99 | spi_message_add_tail(&t, &m); | ||
100 | |||
101 | if (locked) | ||
102 | return spi_sync_locked(st->spi, &m); | ||
103 | else | ||
104 | return spi_sync(st->spi, &m); | ||
105 | } | 63 | } |
106 | 64 | ||
107 | static int ad7793_write_reg(struct ad7793_state *st, | 65 | static int ad7793_set_channel(struct ad_sigma_delta *sd, unsigned int channel) |
108 | unsigned reg, unsigned size, unsigned val) | ||
109 | { | 66 | { |
110 | return __ad7793_write_reg(st, false, false, reg, size, val); | 67 | struct ad7793_state *st = ad_sigma_delta_to_ad7793(sd); |
111 | } | ||
112 | 68 | ||
113 | static int __ad7793_read_reg(struct ad7793_state *st, bool locked, | 69 | st->conf &= ~AD7793_CONF_CHAN_MASK; |
114 | bool cs_change, unsigned char reg, | 70 | st->conf |= AD7793_CONF_CHAN(channel); |
115 | int *val, unsigned size) | ||
116 | { | ||
117 | u8 *data = st->data; | ||
118 | int ret; | ||
119 | struct spi_transfer t[] = { | ||
120 | { | ||
121 | .tx_buf = data, | ||
122 | .len = 1, | ||
123 | }, { | ||
124 | .rx_buf = data, | ||
125 | .len = size, | ||
126 | .cs_change = cs_change, | ||
127 | }, | ||
128 | }; | ||
129 | struct spi_message m; | ||
130 | |||
131 | data[0] = AD7793_COMM_READ | AD7793_COMM_ADDR(reg); | ||
132 | |||
133 | spi_message_init(&m); | ||
134 | spi_message_add_tail(&t[0], &m); | ||
135 | spi_message_add_tail(&t[1], &m); | ||
136 | |||
137 | if (locked) | ||
138 | ret = spi_sync_locked(st->spi, &m); | ||
139 | else | ||
140 | ret = spi_sync(st->spi, &m); | ||
141 | 71 | ||
142 | if (ret < 0) | 72 | return ad_sd_write_reg(&st->sd, AD7793_REG_CONF, 2, st->conf); |
143 | return ret; | ||
144 | |||
145 | switch (size) { | ||
146 | case 3: | ||
147 | *val = data[0] << 16 | data[1] << 8 | data[2]; | ||
148 | break; | ||
149 | case 2: | ||
150 | *val = data[0] << 8 | data[1]; | ||
151 | break; | ||
152 | case 1: | ||
153 | *val = data[0]; | ||
154 | break; | ||
155 | default: | ||
156 | return -EINVAL; | ||
157 | } | ||
158 | |||
159 | return 0; | ||
160 | } | 73 | } |
161 | 74 | ||
162 | static int ad7793_read_reg(struct ad7793_state *st, | 75 | static int ad7793_set_mode(struct ad_sigma_delta *sd, |
163 | unsigned reg, int *val, unsigned size) | 76 | enum ad_sigma_delta_mode mode) |
164 | { | 77 | { |
165 | return __ad7793_read_reg(st, 0, 0, reg, val, size); | 78 | struct ad7793_state *st = ad_sigma_delta_to_ad7793(sd); |
166 | } | ||
167 | |||
168 | static int ad7793_read(struct ad7793_state *st, unsigned ch, | ||
169 | unsigned len, int *val) | ||
170 | { | ||
171 | int ret; | ||
172 | st->conf = (st->conf & ~AD7793_CONF_CHAN(-1)) | AD7793_CONF_CHAN(ch); | ||
173 | st->mode = (st->mode & ~AD7793_MODE_SEL(-1)) | | ||
174 | AD7793_MODE_SEL(AD7793_MODE_SINGLE); | ||
175 | 79 | ||
176 | ad7793_write_reg(st, AD7793_REG_CONF, sizeof(st->conf), st->conf); | 80 | st->mode &= ~AD7793_MODE_SEL_MASK; |
81 | st->mode |= AD7793_MODE_SEL(mode); | ||
177 | 82 | ||
178 | spi_bus_lock(st->spi->master); | 83 | return ad_sd_write_reg(&st->sd, AD7793_REG_MODE, 2, st->mode); |
179 | st->done = false; | ||
180 | |||
181 | ret = __ad7793_write_reg(st, 1, 1, AD7793_REG_MODE, | ||
182 | sizeof(st->mode), st->mode); | ||
183 | if (ret < 0) | ||
184 | goto out; | ||
185 | |||
186 | st->irq_dis = false; | ||
187 | enable_irq(st->spi->irq); | ||
188 | wait_event_interruptible(st->wq_data_avail, st->done); | ||
189 | |||
190 | ret = __ad7793_read_reg(st, 1, 0, AD7793_REG_DATA, val, len); | ||
191 | out: | ||
192 | spi_bus_unlock(st->spi->master); | ||
193 | |||
194 | return ret; | ||
195 | } | 84 | } |
196 | 85 | ||
197 | static int ad7793_calibrate(struct ad7793_state *st, unsigned mode, unsigned ch) | 86 | static const struct ad_sigma_delta_info ad7793_sigma_delta_info = { |
198 | { | 87 | .set_channel = ad7793_set_channel, |
199 | int ret; | 88 | .set_mode = ad7793_set_mode, |
200 | 89 | .has_registers = true, | |
201 | st->conf = (st->conf & ~AD7793_CONF_CHAN(-1)) | AD7793_CONF_CHAN(ch); | 90 | .addr_shift = 3, |
202 | st->mode = (st->mode & ~AD7793_MODE_SEL(-1)) | AD7793_MODE_SEL(mode); | 91 | .read_mask = BIT(6), |
203 | 92 | }; | |
204 | ad7793_write_reg(st, AD7793_REG_CONF, sizeof(st->conf), st->conf); | ||
205 | |||
206 | spi_bus_lock(st->spi->master); | ||
207 | st->done = false; | ||
208 | |||
209 | ret = __ad7793_write_reg(st, 1, 1, AD7793_REG_MODE, | ||
210 | sizeof(st->mode), st->mode); | ||
211 | if (ret < 0) | ||
212 | goto out; | ||
213 | |||
214 | st->irq_dis = false; | ||
215 | enable_irq(st->spi->irq); | ||
216 | wait_event_interruptible(st->wq_data_avail, st->done); | ||
217 | |||
218 | st->mode = (st->mode & ~AD7793_MODE_SEL(-1)) | | ||
219 | AD7793_MODE_SEL(AD7793_MODE_IDLE); | ||
220 | |||
221 | ret = __ad7793_write_reg(st, 1, 0, AD7793_REG_MODE, | ||
222 | sizeof(st->mode), st->mode); | ||
223 | out: | ||
224 | spi_bus_unlock(st->spi->master); | ||
225 | |||
226 | return ret; | ||
227 | } | ||
228 | 93 | ||
229 | static const u8 ad7793_calib_arr[6][2] = { | 94 | static const struct ad_sd_calib_data ad7793_calib_arr[6] = { |
230 | {AD7793_MODE_CAL_INT_ZERO, AD7793_CH_AIN1P_AIN1M}, | 95 | {AD7793_MODE_CAL_INT_ZERO, AD7793_CH_AIN1P_AIN1M}, |
231 | {AD7793_MODE_CAL_INT_FULL, AD7793_CH_AIN1P_AIN1M}, | 96 | {AD7793_MODE_CAL_INT_FULL, AD7793_CH_AIN1P_AIN1M}, |
232 | {AD7793_MODE_CAL_INT_ZERO, AD7793_CH_AIN2P_AIN2M}, | 97 | {AD7793_MODE_CAL_INT_ZERO, AD7793_CH_AIN2P_AIN2M}, |
@@ -237,59 +102,48 @@ static const u8 ad7793_calib_arr[6][2] = { | |||
237 | 102 | ||
238 | static int ad7793_calibrate_all(struct ad7793_state *st) | 103 | static int ad7793_calibrate_all(struct ad7793_state *st) |
239 | { | 104 | { |
240 | int i, ret; | 105 | return ad_sd_calibrate_all(&st->sd, ad7793_calib_arr, |
241 | 106 | ARRAY_SIZE(ad7793_calib_arr)); | |
242 | for (i = 0; i < ARRAY_SIZE(ad7793_calib_arr); i++) { | ||
243 | ret = ad7793_calibrate(st, ad7793_calib_arr[i][0], | ||
244 | ad7793_calib_arr[i][1]); | ||
245 | if (ret) | ||
246 | goto out; | ||
247 | } | ||
248 | |||
249 | return 0; | ||
250 | out: | ||
251 | dev_err(&st->spi->dev, "Calibration failed\n"); | ||
252 | return ret; | ||
253 | } | 107 | } |
254 | 108 | ||
255 | static int ad7793_setup(struct ad7793_state *st, | 109 | static int ad7793_setup(struct iio_dev *indio_dev, |
256 | const struct ad7793_platform_data *pdata) | 110 | const struct ad7793_platform_data *pdata) |
257 | { | 111 | { |
112 | struct ad7793_state *st = iio_priv(indio_dev); | ||
258 | int i, ret = -1; | 113 | int i, ret = -1; |
259 | unsigned long long scale_uv; | 114 | unsigned long long scale_uv; |
260 | u32 id; | 115 | u32 id; |
261 | 116 | ||
262 | /* reset the serial interface */ | 117 | /* reset the serial interface */ |
263 | ret = spi_write(st->spi, (u8 *)&ret, sizeof(ret)); | 118 | ret = spi_write(st->sd.spi, (u8 *)&ret, sizeof(ret)); |
264 | if (ret < 0) | 119 | if (ret < 0) |
265 | goto out; | 120 | goto out; |
266 | msleep(1); /* Wait for at least 500us */ | 121 | msleep(1); /* Wait for at least 500us */ |
267 | 122 | ||
268 | /* write/read test for device presence */ | 123 | /* write/read test for device presence */ |
269 | ret = ad7793_read_reg(st, AD7793_REG_ID, &id, 1); | 124 | ret = ad_sd_read_reg(&st->sd, AD7793_REG_ID, 1, &id); |
270 | if (ret) | 125 | if (ret) |
271 | goto out; | 126 | goto out; |
272 | 127 | ||
273 | id &= AD7793_ID_MASK; | 128 | id &= AD7793_ID_MASK; |
274 | 129 | ||
275 | if (!((id == AD7792_ID) || (id == AD7793_ID))) { | 130 | if (!((id == AD7792_ID) || (id == AD7793_ID))) { |
276 | dev_err(&st->spi->dev, "device ID query failed\n"); | 131 | dev_err(&st->sd.spi->dev, "device ID query failed\n"); |
277 | goto out; | 132 | goto out; |
278 | } | 133 | } |
279 | 134 | ||
280 | st->mode = (pdata->mode & ~AD7793_MODE_SEL(-1)) | | 135 | st->mode = pdata->mode; |
281 | AD7793_MODE_SEL(AD7793_MODE_IDLE); | 136 | st->conf = pdata->conf; |
282 | st->conf = pdata->conf & ~AD7793_CONF_CHAN(-1); | ||
283 | 137 | ||
284 | ret = ad7793_write_reg(st, AD7793_REG_MODE, sizeof(st->mode), st->mode); | 138 | ret = ad7793_set_mode(&st->sd, AD_SD_MODE_IDLE); |
285 | if (ret) | 139 | if (ret) |
286 | goto out; | 140 | goto out; |
287 | 141 | ||
288 | ret = ad7793_write_reg(st, AD7793_REG_CONF, sizeof(st->conf), st->conf); | 142 | ret = ad7793_set_channel(&st->sd, 0); |
289 | if (ret) | 143 | if (ret) |
290 | goto out; | 144 | goto out; |
291 | 145 | ||
292 | ret = ad7793_write_reg(st, AD7793_REG_IO, | 146 | ret = ad_sd_write_reg(&st->sd, AD7793_REG_IO, |
293 | sizeof(pdata->io), pdata->io); | 147 | sizeof(pdata->io), pdata->io); |
294 | if (ret) | 148 | if (ret) |
295 | goto out; | 149 | goto out; |
@@ -311,184 +165,10 @@ static int ad7793_setup(struct ad7793_state *st, | |||
311 | 165 | ||
312 | return 0; | 166 | return 0; |
313 | out: | 167 | out: |
314 | dev_err(&st->spi->dev, "setup failed\n"); | 168 | dev_err(&st->sd.spi->dev, "setup failed\n"); |
315 | return ret; | ||
316 | } | ||
317 | |||
318 | static int ad7793_ring_preenable(struct iio_dev *indio_dev) | ||
319 | { | ||
320 | struct ad7793_state *st = iio_priv(indio_dev); | ||
321 | unsigned channel; | ||
322 | int ret; | ||
323 | |||
324 | if (bitmap_empty(indio_dev->active_scan_mask, indio_dev->masklength)) | ||
325 | return -EINVAL; | ||
326 | ret = iio_sw_buffer_preenable(indio_dev); | ||
327 | if (ret < 0) | ||
328 | return ret; | ||
329 | |||
330 | channel = find_first_bit(indio_dev->active_scan_mask, | ||
331 | indio_dev->masklength); | ||
332 | |||
333 | st->mode = (st->mode & ~AD7793_MODE_SEL(-1)) | | ||
334 | AD7793_MODE_SEL(AD7793_MODE_CONT); | ||
335 | st->conf = (st->conf & ~AD7793_CONF_CHAN(-1)) | | ||
336 | AD7793_CONF_CHAN(indio_dev->channels[channel].address); | ||
337 | |||
338 | ad7793_write_reg(st, AD7793_REG_CONF, sizeof(st->conf), st->conf); | ||
339 | |||
340 | spi_bus_lock(st->spi->master); | ||
341 | __ad7793_write_reg(st, 1, 1, AD7793_REG_MODE, | ||
342 | sizeof(st->mode), st->mode); | ||
343 | |||
344 | st->irq_dis = false; | ||
345 | enable_irq(st->spi->irq); | ||
346 | |||
347 | return 0; | ||
348 | } | ||
349 | |||
350 | static int ad7793_ring_postdisable(struct iio_dev *indio_dev) | ||
351 | { | ||
352 | struct ad7793_state *st = iio_priv(indio_dev); | ||
353 | |||
354 | st->mode = (st->mode & ~AD7793_MODE_SEL(-1)) | | ||
355 | AD7793_MODE_SEL(AD7793_MODE_IDLE); | ||
356 | |||
357 | st->done = false; | ||
358 | wait_event_interruptible(st->wq_data_avail, st->done); | ||
359 | |||
360 | if (!st->irq_dis) | ||
361 | disable_irq_nosync(st->spi->irq); | ||
362 | |||
363 | __ad7793_write_reg(st, 1, 0, AD7793_REG_MODE, | ||
364 | sizeof(st->mode), st->mode); | ||
365 | |||
366 | return spi_bus_unlock(st->spi->master); | ||
367 | } | ||
368 | |||
369 | /** | ||
370 | * ad7793_trigger_handler() bh of trigger launched polling to ring buffer | ||
371 | **/ | ||
372 | |||
373 | static irqreturn_t ad7793_trigger_handler(int irq, void *p) | ||
374 | { | ||
375 | struct iio_poll_func *pf = p; | ||
376 | struct iio_dev *indio_dev = pf->indio_dev; | ||
377 | struct iio_buffer *ring = indio_dev->buffer; | ||
378 | struct ad7793_state *st = iio_priv(indio_dev); | ||
379 | s64 dat64[2]; | ||
380 | s32 *dat32 = (s32 *)dat64; | ||
381 | |||
382 | if (!bitmap_empty(indio_dev->active_scan_mask, indio_dev->masklength)) | ||
383 | __ad7793_read_reg(st, 1, 1, AD7793_REG_DATA, | ||
384 | dat32, | ||
385 | indio_dev->channels[0].scan_type.realbits/8); | ||
386 | |||
387 | /* Guaranteed to be aligned with 8 byte boundary */ | ||
388 | if (indio_dev->scan_timestamp) | ||
389 | dat64[1] = pf->timestamp; | ||
390 | |||
391 | ring->access->store_to(ring, (u8 *)dat64, pf->timestamp); | ||
392 | |||
393 | iio_trigger_notify_done(indio_dev->trig); | ||
394 | st->irq_dis = false; | ||
395 | enable_irq(st->spi->irq); | ||
396 | |||
397 | return IRQ_HANDLED; | ||
398 | } | ||
399 | |||
400 | static const struct iio_buffer_setup_ops ad7793_ring_setup_ops = { | ||
401 | .preenable = &ad7793_ring_preenable, | ||
402 | .postenable = &iio_triggered_buffer_postenable, | ||
403 | .predisable = &iio_triggered_buffer_predisable, | ||
404 | .postdisable = &ad7793_ring_postdisable, | ||
405 | .validate_scan_mask = &iio_validate_scan_mask_onehot, | ||
406 | }; | ||
407 | |||
408 | static int ad7793_register_ring_funcs_and_init(struct iio_dev *indio_dev) | ||
409 | { | ||
410 | return iio_triggered_buffer_setup(indio_dev, &iio_pollfunc_store_time, | ||
411 | &ad7793_trigger_handler, &ad7793_ring_setup_ops); | ||
412 | } | ||
413 | |||
414 | static void ad7793_ring_cleanup(struct iio_dev *indio_dev) | ||
415 | { | ||
416 | iio_triggered_buffer_cleanup(indio_dev); | ||
417 | } | ||
418 | |||
419 | /** | ||
420 | * ad7793_data_rdy_trig_poll() the event handler for the data rdy trig | ||
421 | **/ | ||
422 | static irqreturn_t ad7793_data_rdy_trig_poll(int irq, void *private) | ||
423 | { | ||
424 | struct ad7793_state *st = iio_priv(private); | ||
425 | |||
426 | st->done = true; | ||
427 | wake_up_interruptible(&st->wq_data_avail); | ||
428 | disable_irq_nosync(irq); | ||
429 | st->irq_dis = true; | ||
430 | iio_trigger_poll(st->trig, iio_get_time_ns()); | ||
431 | |||
432 | return IRQ_HANDLED; | ||
433 | } | ||
434 | |||
435 | static struct iio_trigger_ops ad7793_trigger_ops = { | ||
436 | .owner = THIS_MODULE, | ||
437 | }; | ||
438 | |||
439 | static int ad7793_probe_trigger(struct iio_dev *indio_dev) | ||
440 | { | ||
441 | struct ad7793_state *st = iio_priv(indio_dev); | ||
442 | int ret; | ||
443 | |||
444 | st->trig = iio_trigger_alloc("%s-dev%d", | ||
445 | spi_get_device_id(st->spi)->name, | ||
446 | indio_dev->id); | ||
447 | if (st->trig == NULL) { | ||
448 | ret = -ENOMEM; | ||
449 | goto error_ret; | ||
450 | } | ||
451 | st->trig->ops = &ad7793_trigger_ops; | ||
452 | |||
453 | ret = request_irq(st->spi->irq, | ||
454 | ad7793_data_rdy_trig_poll, | ||
455 | IRQF_TRIGGER_LOW, | ||
456 | spi_get_device_id(st->spi)->name, | ||
457 | indio_dev); | ||
458 | if (ret) | ||
459 | goto error_free_trig; | ||
460 | |||
461 | disable_irq_nosync(st->spi->irq); | ||
462 | st->irq_dis = true; | ||
463 | st->trig->dev.parent = &st->spi->dev; | ||
464 | st->trig->private_data = indio_dev; | ||
465 | |||
466 | ret = iio_trigger_register(st->trig); | ||
467 | |||
468 | /* select default trigger */ | ||
469 | indio_dev->trig = st->trig; | ||
470 | if (ret) | ||
471 | goto error_free_irq; | ||
472 | |||
473 | return 0; | ||
474 | |||
475 | error_free_irq: | ||
476 | free_irq(st->spi->irq, indio_dev); | ||
477 | error_free_trig: | ||
478 | iio_trigger_free(st->trig); | ||
479 | error_ret: | ||
480 | return ret; | 169 | return ret; |
481 | } | 170 | } |
482 | 171 | ||
483 | static void ad7793_remove_trigger(struct iio_dev *indio_dev) | ||
484 | { | ||
485 | struct ad7793_state *st = iio_priv(indio_dev); | ||
486 | |||
487 | iio_trigger_unregister(st->trig); | ||
488 | free_irq(st->spi->irq, indio_dev); | ||
489 | iio_trigger_free(st->trig); | ||
490 | } | ||
491 | |||
492 | static const u16 sample_freq_avail[16] = {0, 470, 242, 123, 62, 50, 39, 33, 19, | 172 | static const u16 sample_freq_avail[16] = {0, 470, 242, 123, 62, 50, 39, 33, 19, |
493 | 17, 16, 12, 10, 8, 6, 4}; | 173 | 17, 16, 12, 10, 8, 6, 4}; |
494 | 174 | ||
@@ -531,7 +211,7 @@ static ssize_t ad7793_write_frequency(struct device *dev, | |||
531 | mutex_lock(&indio_dev->mlock); | 211 | mutex_lock(&indio_dev->mlock); |
532 | st->mode &= ~AD7793_MODE_RATE(-1); | 212 | st->mode &= ~AD7793_MODE_RATE(-1); |
533 | st->mode |= AD7793_MODE_RATE(i); | 213 | st->mode |= AD7793_MODE_RATE(i); |
534 | ad7793_write_reg(st, AD7793_REG_MODE, | 214 | ad_sd_write_reg(&st->sd, AD7793_REG_MODE, |
535 | sizeof(st->mode), st->mode); | 215 | sizeof(st->mode), st->mode); |
536 | mutex_unlock(&indio_dev->mlock); | 216 | mutex_unlock(&indio_dev->mlock); |
537 | ret = 0; | 217 | ret = 0; |
@@ -585,26 +265,16 @@ static int ad7793_read_raw(struct iio_dev *indio_dev, | |||
585 | long m) | 265 | long m) |
586 | { | 266 | { |
587 | struct ad7793_state *st = iio_priv(indio_dev); | 267 | struct ad7793_state *st = iio_priv(indio_dev); |
588 | int ret, smpl = 0; | 268 | int ret; |
589 | unsigned long long scale_uv; | 269 | unsigned long long scale_uv; |
590 | bool unipolar = !!(st->conf & AD7793_CONF_UNIPOLAR); | 270 | bool unipolar = !!(st->conf & AD7793_CONF_UNIPOLAR); |
591 | 271 | ||
592 | switch (m) { | 272 | switch (m) { |
593 | case IIO_CHAN_INFO_RAW: | 273 | case IIO_CHAN_INFO_RAW: |
594 | mutex_lock(&indio_dev->mlock); | 274 | ret = ad_sigma_delta_single_conversion(indio_dev, chan, val); |
595 | if (iio_buffer_enabled(indio_dev)) | ||
596 | ret = -EBUSY; | ||
597 | else | ||
598 | ret = ad7793_read(st, chan->address, | ||
599 | chan->scan_type.realbits / 8, &smpl); | ||
600 | mutex_unlock(&indio_dev->mlock); | ||
601 | |||
602 | if (ret < 0) | 275 | if (ret < 0) |
603 | return ret; | 276 | return ret; |
604 | 277 | ||
605 | *val = (smpl >> chan->scan_type.shift) & | ||
606 | ((1 << (chan->scan_type.realbits)) - 1); | ||
607 | |||
608 | return IIO_VAL_INT; | 278 | return IIO_VAL_INT; |
609 | 279 | ||
610 | case IIO_CHAN_INFO_SCALE: | 280 | case IIO_CHAN_INFO_SCALE: |
@@ -675,17 +345,18 @@ static int ad7793_write_raw(struct iio_dev *indio_dev, | |||
675 | ret = -EINVAL; | 345 | ret = -EINVAL; |
676 | for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++) | 346 | for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++) |
677 | if (val2 == st->scale_avail[i][1]) { | 347 | if (val2 == st->scale_avail[i][1]) { |
348 | ret = 0; | ||
678 | tmp = st->conf; | 349 | tmp = st->conf; |
679 | st->conf &= ~AD7793_CONF_GAIN(-1); | 350 | st->conf &= ~AD7793_CONF_GAIN(-1); |
680 | st->conf |= AD7793_CONF_GAIN(i); | 351 | st->conf |= AD7793_CONF_GAIN(i); |
681 | 352 | ||
682 | if (tmp != st->conf) { | 353 | if (tmp == st->conf) |
683 | ad7793_write_reg(st, AD7793_REG_CONF, | 354 | break; |
684 | sizeof(st->conf), | 355 | |
685 | st->conf); | 356 | ad_sd_write_reg(&st->sd, AD7793_REG_CONF, |
686 | ad7793_calibrate_all(st); | 357 | sizeof(st->conf), st->conf); |
687 | } | 358 | ad7793_calibrate_all(st); |
688 | ret = 0; | 359 | break; |
689 | } | 360 | } |
690 | break; | 361 | break; |
691 | default: | 362 | default: |
@@ -696,15 +367,6 @@ static int ad7793_write_raw(struct iio_dev *indio_dev, | |||
696 | return ret; | 367 | return ret; |
697 | } | 368 | } |
698 | 369 | ||
699 | static int ad7793_validate_trigger(struct iio_dev *indio_dev, | ||
700 | struct iio_trigger *trig) | ||
701 | { | ||
702 | if (indio_dev->trig != trig) | ||
703 | return -EINVAL; | ||
704 | |||
705 | return 0; | ||
706 | } | ||
707 | |||
708 | static int ad7793_write_raw_get_fmt(struct iio_dev *indio_dev, | 370 | static int ad7793_write_raw_get_fmt(struct iio_dev *indio_dev, |
709 | struct iio_chan_spec const *chan, | 371 | struct iio_chan_spec const *chan, |
710 | long mask) | 372 | long mask) |
@@ -717,166 +379,32 @@ static const struct iio_info ad7793_info = { | |||
717 | .write_raw = &ad7793_write_raw, | 379 | .write_raw = &ad7793_write_raw, |
718 | .write_raw_get_fmt = &ad7793_write_raw_get_fmt, | 380 | .write_raw_get_fmt = &ad7793_write_raw_get_fmt, |
719 | .attrs = &ad7793_attribute_group, | 381 | .attrs = &ad7793_attribute_group, |
720 | .validate_trigger = ad7793_validate_trigger, | 382 | .validate_trigger = ad_sd_validate_trigger, |
721 | .driver_module = THIS_MODULE, | 383 | .driver_module = THIS_MODULE, |
722 | }; | 384 | }; |
723 | 385 | ||
724 | static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { | 386 | static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { |
725 | [ID_AD7793] = { | 387 | [ID_AD7793] = { |
726 | .channel[0] = { | 388 | .channel = { |
727 | .type = IIO_VOLTAGE, | 389 | AD_SD_DIFF_CHANNEL(0, 0, 0, AD7793_CH_AIN1P_AIN1M, 24, 32, 0), |
728 | .differential = 1, | 390 | AD_SD_DIFF_CHANNEL(1, 1, 1, AD7793_CH_AIN2P_AIN2M, 24, 32, 0), |
729 | .indexed = 1, | 391 | AD_SD_DIFF_CHANNEL(2, 2, 2, AD7793_CH_AIN3P_AIN3M, 24, 32, 0), |
730 | .channel = 0, | 392 | AD_SD_SHORTED_CHANNEL(3, 0, AD7793_CH_AIN1M_AIN1M, 24, 32, 0), |
731 | .channel2 = 0, | 393 | AD_SD_TEMP_CHANNEL(4, AD7793_CH_TEMP, 24, 32, 0), |
732 | .address = AD7793_CH_AIN1P_AIN1M, | 394 | AD_SD_SUPPLY_CHANNEL(5, 3, AD7793_CH_AVDD_MONITOR, 24, 32, 0), |
733 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | 395 | IIO_CHAN_SOFT_TIMESTAMP(6), |
734 | IIO_CHAN_INFO_SCALE_SHARED_BIT | | ||
735 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
736 | .scan_index = 0, | ||
737 | .scan_type = IIO_ST('u', 24, 32, 0) | ||
738 | }, | ||
739 | .channel[1] = { | ||
740 | .type = IIO_VOLTAGE, | ||
741 | .differential = 1, | ||
742 | .indexed = 1, | ||
743 | .channel = 1, | ||
744 | .channel2 = 1, | ||
745 | .address = AD7793_CH_AIN2P_AIN2M, | ||
746 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
747 | IIO_CHAN_INFO_SCALE_SHARED_BIT | | ||
748 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
749 | .scan_index = 1, | ||
750 | .scan_type = IIO_ST('u', 24, 32, 0) | ||
751 | }, | ||
752 | .channel[2] = { | ||
753 | .type = IIO_VOLTAGE, | ||
754 | .differential = 1, | ||
755 | .indexed = 1, | ||
756 | .channel = 2, | ||
757 | .channel2 = 2, | ||
758 | .address = AD7793_CH_AIN3P_AIN3M, | ||
759 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
760 | IIO_CHAN_INFO_SCALE_SHARED_BIT | | ||
761 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
762 | .scan_index = 2, | ||
763 | .scan_type = IIO_ST('u', 24, 32, 0) | ||
764 | }, | ||
765 | .channel[3] = { | ||
766 | .type = IIO_VOLTAGE, | ||
767 | .differential = 1, | ||
768 | .extend_name = "shorted", | ||
769 | .indexed = 1, | ||
770 | .channel = 2, | ||
771 | .channel2 = 2, | ||
772 | .address = AD7793_CH_AIN1M_AIN1M, | ||
773 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
774 | IIO_CHAN_INFO_SCALE_SHARED_BIT | | ||
775 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
776 | .scan_index = 3, | ||
777 | .scan_type = IIO_ST('u', 24, 32, 0) | ||
778 | }, | ||
779 | .channel[4] = { | ||
780 | .type = IIO_TEMP, | ||
781 | .indexed = 1, | ||
782 | .channel = 0, | ||
783 | .address = AD7793_CH_TEMP, | ||
784 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
785 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT, | ||
786 | .scan_index = 4, | ||
787 | .scan_type = IIO_ST('u', 24, 32, 0), | ||
788 | }, | 396 | }, |
789 | .channel[5] = { | ||
790 | .type = IIO_VOLTAGE, | ||
791 | .extend_name = "supply", | ||
792 | .indexed = 1, | ||
793 | .channel = 4, | ||
794 | .address = AD7793_CH_AVDD_MONITOR, | ||
795 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
796 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT | | ||
797 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
798 | .scan_index = 5, | ||
799 | .scan_type = IIO_ST('u', 24, 32, 0), | ||
800 | }, | ||
801 | .channel[6] = IIO_CHAN_SOFT_TIMESTAMP(6), | ||
802 | }, | 397 | }, |
803 | [ID_AD7792] = { | 398 | [ID_AD7792] = { |
804 | .channel[0] = { | 399 | .channel = { |
805 | .type = IIO_VOLTAGE, | 400 | AD_SD_DIFF_CHANNEL(0, 0, 0, AD7793_CH_AIN1P_AIN1M, 16, 32, 0), |
806 | .differential = 1, | 401 | AD_SD_DIFF_CHANNEL(1, 1, 1, AD7793_CH_AIN2P_AIN2M, 16, 32, 0), |
807 | .indexed = 1, | 402 | AD_SD_DIFF_CHANNEL(2, 2, 2, AD7793_CH_AIN3P_AIN3M, 16, 32, 0), |
808 | .channel = 0, | 403 | AD_SD_SHORTED_CHANNEL(3, 0, AD7793_CH_AIN1M_AIN1M, 16, 32, 0), |
809 | .channel2 = 0, | 404 | AD_SD_TEMP_CHANNEL(4, AD7793_CH_TEMP, 16, 32, 0), |
810 | .address = AD7793_CH_AIN1P_AIN1M, | 405 | AD_SD_SUPPLY_CHANNEL(5, 3, AD7793_CH_AVDD_MONITOR, 16, 32, 0), |
811 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | 406 | IIO_CHAN_SOFT_TIMESTAMP(6), |
812 | IIO_CHAN_INFO_SCALE_SHARED_BIT | | ||
813 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
814 | .scan_index = 0, | ||
815 | .scan_type = IIO_ST('u', 16, 32, 0) | ||
816 | }, | ||
817 | .channel[1] = { | ||
818 | .type = IIO_VOLTAGE, | ||
819 | .differential = 1, | ||
820 | .indexed = 1, | ||
821 | .channel = 1, | ||
822 | .channel2 = 1, | ||
823 | .address = AD7793_CH_AIN2P_AIN2M, | ||
824 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
825 | IIO_CHAN_INFO_SCALE_SHARED_BIT | | ||
826 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
827 | .scan_index = 1, | ||
828 | .scan_type = IIO_ST('u', 16, 32, 0) | ||
829 | }, | ||
830 | .channel[2] = { | ||
831 | .type = IIO_VOLTAGE, | ||
832 | .differential = 1, | ||
833 | .indexed = 1, | ||
834 | .channel = 2, | ||
835 | .channel2 = 2, | ||
836 | .address = AD7793_CH_AIN3P_AIN3M, | ||
837 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
838 | IIO_CHAN_INFO_SCALE_SHARED_BIT | | ||
839 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
840 | .scan_index = 2, | ||
841 | .scan_type = IIO_ST('u', 16, 32, 0) | ||
842 | }, | ||
843 | .channel[3] = { | ||
844 | .type = IIO_VOLTAGE, | ||
845 | .differential = 1, | ||
846 | .extend_name = "shorted", | ||
847 | .indexed = 1, | ||
848 | .channel = 2, | ||
849 | .channel2 = 2, | ||
850 | .address = AD7793_CH_AIN1M_AIN1M, | ||
851 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
852 | IIO_CHAN_INFO_SCALE_SHARED_BIT | | ||
853 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
854 | .scan_index = 3, | ||
855 | .scan_type = IIO_ST('u', 16, 32, 0) | ||
856 | }, | ||
857 | .channel[4] = { | ||
858 | .type = IIO_TEMP, | ||
859 | .indexed = 1, | ||
860 | .channel = 0, | ||
861 | .address = AD7793_CH_TEMP, | ||
862 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
863 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT, | ||
864 | .scan_index = 4, | ||
865 | .scan_type = IIO_ST('u', 16, 32, 0), | ||
866 | }, | 407 | }, |
867 | .channel[5] = { | ||
868 | .type = IIO_VOLTAGE, | ||
869 | .extend_name = "supply", | ||
870 | .indexed = 1, | ||
871 | .channel = 4, | ||
872 | .address = AD7793_CH_AVDD_MONITOR, | ||
873 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | | ||
874 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT | | ||
875 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, | ||
876 | .scan_index = 5, | ||
877 | .scan_type = IIO_ST('u', 16, 32, 0), | ||
878 | }, | ||
879 | .channel[6] = IIO_CHAN_SOFT_TIMESTAMP(6), | ||
880 | }, | 408 | }, |
881 | }; | 409 | }; |
882 | 410 | ||
@@ -903,6 +431,8 @@ static int __devinit ad7793_probe(struct spi_device *spi) | |||
903 | 431 | ||
904 | st = iio_priv(indio_dev); | 432 | st = iio_priv(indio_dev); |
905 | 433 | ||
434 | ad_sd_init(&st->sd, indio_dev, spi, &ad7793_sigma_delta_info); | ||
435 | |||
906 | st->reg = regulator_get(&spi->dev, "vcc"); | 436 | st->reg = regulator_get(&spi->dev, "vcc"); |
907 | if (!IS_ERR(st->reg)) { | 437 | if (!IS_ERR(st->reg)) { |
908 | ret = regulator_enable(st->reg); | 438 | ret = regulator_enable(st->reg); |
@@ -923,7 +453,6 @@ static int __devinit ad7793_probe(struct spi_device *spi) | |||
923 | st->int_vref_mv = 1170; /* Build-in ref */ | 453 | st->int_vref_mv = 1170; /* Build-in ref */ |
924 | 454 | ||
925 | spi_set_drvdata(spi, indio_dev); | 455 | spi_set_drvdata(spi, indio_dev); |
926 | st->spi = spi; | ||
927 | 456 | ||
928 | indio_dev->dev.parent = &spi->dev; | 457 | indio_dev->dev.parent = &spi->dev; |
929 | indio_dev->name = spi_get_device_id(spi)->name; | 458 | indio_dev->name = spi_get_device_id(spi)->name; |
@@ -932,17 +461,11 @@ static int __devinit ad7793_probe(struct spi_device *spi) | |||
932 | indio_dev->num_channels = 7; | 461 | indio_dev->num_channels = 7; |
933 | indio_dev->info = &ad7793_info; | 462 | indio_dev->info = &ad7793_info; |
934 | 463 | ||
935 | init_waitqueue_head(&st->wq_data_avail); | 464 | ret = ad_sd_setup_buffer_and_trigger(indio_dev); |
936 | |||
937 | ret = ad7793_register_ring_funcs_and_init(indio_dev); | ||
938 | if (ret) | 465 | if (ret) |
939 | goto error_disable_reg; | 466 | goto error_disable_reg; |
940 | 467 | ||
941 | ret = ad7793_probe_trigger(indio_dev); | 468 | ret = ad7793_setup(indio_dev, pdata); |
942 | if (ret) | ||
943 | goto error_unreg_ring; | ||
944 | |||
945 | ret = ad7793_setup(st, pdata); | ||
946 | if (ret) | 469 | if (ret) |
947 | goto error_remove_trigger; | 470 | goto error_remove_trigger; |
948 | 471 | ||
@@ -953,9 +476,7 @@ static int __devinit ad7793_probe(struct spi_device *spi) | |||
953 | return 0; | 476 | return 0; |
954 | 477 | ||
955 | error_remove_trigger: | 478 | error_remove_trigger: |
956 | ad7793_remove_trigger(indio_dev); | 479 | ad_sd_cleanup_buffer_and_trigger(indio_dev); |
957 | error_unreg_ring: | ||
958 | ad7793_ring_cleanup(indio_dev); | ||
959 | error_disable_reg: | 480 | error_disable_reg: |
960 | if (!IS_ERR(st->reg)) | 481 | if (!IS_ERR(st->reg)) |
961 | regulator_disable(st->reg); | 482 | regulator_disable(st->reg); |
@@ -974,8 +495,7 @@ static int ad7793_remove(struct spi_device *spi) | |||
974 | struct ad7793_state *st = iio_priv(indio_dev); | 495 | struct ad7793_state *st = iio_priv(indio_dev); |
975 | 496 | ||
976 | iio_device_unregister(indio_dev); | 497 | iio_device_unregister(indio_dev); |
977 | ad7793_remove_trigger(indio_dev); | 498 | ad_sd_cleanup_buffer_and_trigger(indio_dev); |
978 | ad7793_ring_cleanup(indio_dev); | ||
979 | 499 | ||
980 | if (!IS_ERR(st->reg)) { | 500 | if (!IS_ERR(st->reg)) { |
981 | regulator_disable(st->reg); | 501 | regulator_disable(st->reg); |
diff --git a/drivers/staging/iio/adc/ad7793.h b/drivers/staging/iio/adc/ad7793.h index 64f7d41dc453..0e296d88412b 100644 --- a/drivers/staging/iio/adc/ad7793.h +++ b/drivers/staging/iio/adc/ad7793.h | |||
@@ -41,6 +41,7 @@ | |||
41 | 41 | ||
42 | /* Mode Register Bit Designations (AD7793_REG_MODE) */ | 42 | /* Mode Register Bit Designations (AD7793_REG_MODE) */ |
43 | #define AD7793_MODE_SEL(x) (((x) & 0x7) << 13) /* Operation Mode Select */ | 43 | #define AD7793_MODE_SEL(x) (((x) & 0x7) << 13) /* Operation Mode Select */ |
44 | #define AD7793_MODE_SEL_MASK (0x7 << 13) /* Operation Mode Select mask */ | ||
44 | #define AD7793_MODE_CLKSRC(x) (((x) & 0x3) << 6) /* ADC Clock Source Select */ | 45 | #define AD7793_MODE_CLKSRC(x) (((x) & 0x3) << 6) /* ADC Clock Source Select */ |
45 | #define AD7793_MODE_RATE(x) ((x) & 0xF) /* Filter Update Rate Select */ | 46 | #define AD7793_MODE_RATE(x) ((x) & 0xF) /* Filter Update Rate Select */ |
46 | 47 | ||
@@ -70,6 +71,7 @@ | |||
70 | #define AD7793_CONF_REFSEL (1 << 7) /* INT/EXT Reference Select */ | 71 | #define AD7793_CONF_REFSEL (1 << 7) /* INT/EXT Reference Select */ |
71 | #define AD7793_CONF_BUF (1 << 4) /* Buffered Mode Enable */ | 72 | #define AD7793_CONF_BUF (1 << 4) /* Buffered Mode Enable */ |
72 | #define AD7793_CONF_CHAN(x) ((x) & 0x7) /* Channel select */ | 73 | #define AD7793_CONF_CHAN(x) ((x) & 0x7) /* Channel select */ |
74 | #define AD7793_CONF_CHAN_MASK 0x7 /* Channel select mask */ | ||
73 | 75 | ||
74 | #define AD7793_CH_AIN1P_AIN1M 0 /* AIN1(+) - AIN1(-) */ | 76 | #define AD7793_CH_AIN1P_AIN1M 0 /* AIN1(+) - AIN1(-) */ |
75 | #define AD7793_CH_AIN2P_AIN2M 1 /* AIN2(+) - AIN2(-) */ | 77 | #define AD7793_CH_AIN2P_AIN2M 1 /* AIN2(+) - AIN2(-) */ |