1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * AD7606 SPI ADC driver
4 *
5 * Copyright 2011 Analog Devices Inc.
6 */
7
8 #include <linux/cleanup.h>
9 #include <linux/delay.h>
10 #include <linux/device.h>
11 #include <linux/err.h>
12 #include <linux/gpio/consumer.h>
13 #include <linux/interrupt.h>
14 #include <linux/kernel.h>
15 #include <linux/module.h>
16 #include <linux/property.h>
17 #include <linux/pwm.h>
18 #include <linux/regulator/consumer.h>
19 #include <linux/sched.h>
20 #include <linux/slab.h>
21 #include <linux/sysfs.h>
22 #include <linux/units.h>
23 #include <linux/util_macros.h>
24
25 #include <linux/iio/backend.h>
26 #include <linux/iio/buffer.h>
27 #include <linux/iio/iio.h>
28 #include <linux/iio/sysfs.h>
29 #include <linux/iio/trigger.h>
30 #include <linux/iio/triggered_buffer.h>
31 #include <linux/iio/trigger_consumer.h>
32
33 #include "ad7606.h"
34
35 /*
36 * Scales are computed as 5000/32768 and 10000/32768 respectively,
37 * so that when applied to the raw values they provide mV values.
38 * The scale arrays are kept as IIO_VAL_INT_PLUS_MICRO, so index
39 * X is the integer part and X + 1 is the fractional part.
40 */
41 static const unsigned int ad7606_16bit_hw_scale_avail[2][2] = {
42 { 0, 152588 }, { 0, 305176 }
43 };
44
45 static const unsigned int ad7606_18bit_hw_scale_avail[2][2] = {
46 { 0, 38147 }, { 0, 76294 }
47 };
48
49 static const unsigned int ad7606c_16bit_single_ended_unipolar_scale_avail[3][2] = {
50 { 0, 76294 }, { 0, 152588 }, { 0, 190735 }
51 };
52
53 static const unsigned int ad7606c_16bit_single_ended_bipolar_scale_avail[5][2] = {
54 { 0, 76294 }, { 0, 152588 }, { 0, 190735 }, { 0, 305176 }, { 0, 381470 }
55 };
56
57 static const unsigned int ad7606c_16bit_differential_bipolar_scale_avail[4][2] = {
58 { 0, 152588 }, { 0, 305176 }, { 0, 381470 }, { 0, 610352 }
59 };
60
61 static const unsigned int ad7606c_18bit_single_ended_unipolar_scale_avail[3][2] = {
62 { 0, 19073 }, { 0, 38147 }, { 0, 47684 }
63 };
64
65 static const unsigned int ad7606c_18bit_single_ended_bipolar_scale_avail[5][2] = {
66 { 0, 19073 }, { 0, 38147 }, { 0, 47684 }, { 0, 76294 }, { 0, 95367 }
67 };
68
69 static const unsigned int ad7606c_18bit_differential_bipolar_scale_avail[4][2] = {
70 { 0, 38147 }, { 0, 76294 }, { 0, 95367 }, { 0, 152588 }
71 };
72
73 static const unsigned int ad7606_16bit_sw_scale_avail[3][2] = {
74 { 0, 76293 }, { 0, 152588 }, { 0, 305176 }
75 };
76
77 static const unsigned int ad7607_hw_scale_avail[2][2] = {
78 { 0, 610352 }, { 1, 220703 }
79 };
80
81 static const unsigned int ad7609_hw_scale_avail[2][2] = {
82 { 0, 152588 }, { 0, 305176 }
83 };
84
85 static const unsigned int ad7606_oversampling_avail[7] = {
86 1, 2, 4, 8, 16, 32, 64,
87 };
88
89 static const unsigned int ad7606b_oversampling_avail[9] = {
90 1, 2, 4, 8, 16, 32, 64, 128, 256,
91 };
92
93 static const unsigned int ad7616_oversampling_avail[8] = {
94 1, 2, 4, 8, 16, 32, 64, 128,
95 };
96
97 static const struct iio_chan_spec ad7605_channels[] = {
98 IIO_CHAN_SOFT_TIMESTAMP(4),
99 AD7605_CHANNEL(0),
100 AD7605_CHANNEL(1),
101 AD7605_CHANNEL(2),
102 AD7605_CHANNEL(3),
103 };
104
105 static const struct iio_chan_spec ad7606_channels_16bit[] = {
106 IIO_CHAN_SOFT_TIMESTAMP(8),
107 AD7606_CHANNEL(0, 16),
108 AD7606_CHANNEL(1, 16),
109 AD7606_CHANNEL(2, 16),
110 AD7606_CHANNEL(3, 16),
111 AD7606_CHANNEL(4, 16),
112 AD7606_CHANNEL(5, 16),
113 AD7606_CHANNEL(6, 16),
114 AD7606_CHANNEL(7, 16),
115 };
116
117 static const struct iio_chan_spec ad7606_channels_18bit[] = {
118 IIO_CHAN_SOFT_TIMESTAMP(8),
119 AD7606_CHANNEL(0, 18),
120 AD7606_CHANNEL(1, 18),
121 AD7606_CHANNEL(2, 18),
122 AD7606_CHANNEL(3, 18),
123 AD7606_CHANNEL(4, 18),
124 AD7606_CHANNEL(5, 18),
125 AD7606_CHANNEL(6, 18),
126 AD7606_CHANNEL(7, 18),
127 };
128
129 static const struct iio_chan_spec ad7607_channels[] = {
130 IIO_CHAN_SOFT_TIMESTAMP(8),
131 AD7606_CHANNEL(0, 14),
132 AD7606_CHANNEL(1, 14),
133 AD7606_CHANNEL(2, 14),
134 AD7606_CHANNEL(3, 14),
135 AD7606_CHANNEL(4, 14),
136 AD7606_CHANNEL(5, 14),
137 AD7606_CHANNEL(6, 14),
138 AD7606_CHANNEL(7, 14),
139 };
140
141 static const struct iio_chan_spec ad7608_channels[] = {
142 IIO_CHAN_SOFT_TIMESTAMP(8),
143 AD7606_CHANNEL(0, 18),
144 AD7606_CHANNEL(1, 18),
145 AD7606_CHANNEL(2, 18),
146 AD7606_CHANNEL(3, 18),
147 AD7606_CHANNEL(4, 18),
148 AD7606_CHANNEL(5, 18),
149 AD7606_CHANNEL(6, 18),
150 AD7606_CHANNEL(7, 18),
151 };
152
153 /*
154 * The current assumption that this driver makes for AD7616, is that it's
155 * working in Hardware Mode with Serial, Burst and Sequencer modes activated.
156 * To activate them, following pins must be pulled high:
157 * -SER/PAR
158 * -SEQEN
159 * And following pins must be pulled low:
160 * -WR/BURST
161 * -DB4/SER1W
162 */
163 static const struct iio_chan_spec ad7616_channels[] = {
164 IIO_CHAN_SOFT_TIMESTAMP(16),
165 AD7606_CHANNEL(0, 16),
166 AD7606_CHANNEL(1, 16),
167 AD7606_CHANNEL(2, 16),
168 AD7606_CHANNEL(3, 16),
169 AD7606_CHANNEL(4, 16),
170 AD7606_CHANNEL(5, 16),
171 AD7606_CHANNEL(6, 16),
172 AD7606_CHANNEL(7, 16),
173 AD7606_CHANNEL(8, 16),
174 AD7606_CHANNEL(9, 16),
175 AD7606_CHANNEL(10, 16),
176 AD7606_CHANNEL(11, 16),
177 AD7606_CHANNEL(12, 16),
178 AD7606_CHANNEL(13, 16),
179 AD7606_CHANNEL(14, 16),
180 AD7606_CHANNEL(15, 16),
181 };
182
183 static int ad7606c_18bit_chan_scale_setup(struct iio_dev *indio_dev,
184 struct iio_chan_spec *chan, int ch);
185 static int ad7606c_16bit_chan_scale_setup(struct iio_dev *indio_dev,
186 struct iio_chan_spec *chan, int ch);
187 static int ad7606_16bit_chan_scale_setup(struct iio_dev *indio_dev,
188 struct iio_chan_spec *chan, int ch);
189 static int ad7607_chan_scale_setup(struct iio_dev *indio_dev,
190 struct iio_chan_spec *chan, int ch);
191 static int ad7608_chan_scale_setup(struct iio_dev *indio_dev,
192 struct iio_chan_spec *chan, int ch);
193 static int ad7609_chan_scale_setup(struct iio_dev *indio_dev,
194 struct iio_chan_spec *chan, int ch);
195 static int ad7616_sw_mode_setup(struct iio_dev *indio_dev);
196 static int ad7606b_sw_mode_setup(struct iio_dev *indio_dev);
197
198 const struct ad7606_chip_info ad7605_4_info = {
199 .channels = ad7605_channels,
200 .name = "ad7605-4",
201 .num_adc_channels = 4,
202 .num_channels = 5,
203 .scale_setup_cb = ad7606_16bit_chan_scale_setup,
204 };
205 EXPORT_SYMBOL_NS_GPL(ad7605_4_info, "IIO_AD7606");
206
207 const struct ad7606_chip_info ad7606_8_info = {
208 .channels = ad7606_channels_16bit,
209 .name = "ad7606-8",
210 .num_adc_channels = 8,
211 .num_channels = 9,
212 .oversampling_avail = ad7606_oversampling_avail,
213 .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
214 .scale_setup_cb = ad7606_16bit_chan_scale_setup,
215 };
216 EXPORT_SYMBOL_NS_GPL(ad7606_8_info, "IIO_AD7606");
217
218 const struct ad7606_chip_info ad7606_6_info = {
219 .channels = ad7606_channels_16bit,
220 .name = "ad7606-6",
221 .num_adc_channels = 6,
222 .num_channels = 7,
223 .oversampling_avail = ad7606_oversampling_avail,
224 .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
225 .scale_setup_cb = ad7606_16bit_chan_scale_setup,
226 };
227 EXPORT_SYMBOL_NS_GPL(ad7606_6_info, "IIO_AD7606");
228
229 const struct ad7606_chip_info ad7606_4_info = {
230 .channels = ad7606_channels_16bit,
231 .name = "ad7606-4",
232 .num_adc_channels = 4,
233 .num_channels = 5,
234 .oversampling_avail = ad7606_oversampling_avail,
235 .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
236 .scale_setup_cb = ad7606_16bit_chan_scale_setup,
237 };
238 EXPORT_SYMBOL_NS_GPL(ad7606_4_info, "IIO_AD7606");
239
240 const struct ad7606_chip_info ad7606b_info = {
241 .channels = ad7606_channels_16bit,
242 .max_samplerate = 800 * KILO,
243 .name = "ad7606b",
244 .num_adc_channels = 8,
245 .num_channels = 9,
246 .oversampling_avail = ad7606_oversampling_avail,
247 .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
248 .scale_setup_cb = ad7606_16bit_chan_scale_setup,
249 .sw_setup_cb = ad7606b_sw_mode_setup,
250 };
251 EXPORT_SYMBOL_NS_GPL(ad7606b_info, "IIO_AD7606");
252
253 const struct ad7606_chip_info ad7606c_16_info = {
254 .channels = ad7606_channels_16bit,
255 .name = "ad7606c16",
256 .num_adc_channels = 8,
257 .num_channels = 9,
258 .oversampling_avail = ad7606_oversampling_avail,
259 .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
260 .scale_setup_cb = ad7606c_16bit_chan_scale_setup,
261 .sw_setup_cb = ad7606b_sw_mode_setup,
262 };
263 EXPORT_SYMBOL_NS_GPL(ad7606c_16_info, "IIO_AD7606");
264
265 const struct ad7606_chip_info ad7607_info = {
266 .channels = ad7607_channels,
267 .name = "ad7607",
268 .num_adc_channels = 8,
269 .num_channels = 9,
270 .oversampling_avail = ad7606_oversampling_avail,
271 .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
272 .scale_setup_cb = ad7607_chan_scale_setup,
273 };
274 EXPORT_SYMBOL_NS_GPL(ad7607_info, "IIO_AD7606");
275
276 const struct ad7606_chip_info ad7608_info = {
277 .channels = ad7608_channels,
278 .name = "ad7608",
279 .num_adc_channels = 8,
280 .num_channels = 9,
281 .oversampling_avail = ad7606_oversampling_avail,
282 .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
283 .scale_setup_cb = ad7608_chan_scale_setup,
284 };
285 EXPORT_SYMBOL_NS_GPL(ad7608_info, "IIO_AD7606");
286
287 const struct ad7606_chip_info ad7609_info = {
288 .channels = ad7608_channels,
289 .name = "ad7609",
290 .num_adc_channels = 8,
291 .num_channels = 9,
292 .oversampling_avail = ad7606_oversampling_avail,
293 .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
294 .scale_setup_cb = ad7609_chan_scale_setup,
295 };
296 EXPORT_SYMBOL_NS_GPL(ad7609_info, "IIO_AD7606");
297
298 const struct ad7606_chip_info ad7606c_18_info = {
299 .channels = ad7606_channels_18bit,
300 .name = "ad7606c18",
301 .num_adc_channels = 8,
302 .num_channels = 9,
303 .oversampling_avail = ad7606_oversampling_avail,
304 .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
305 .scale_setup_cb = ad7606c_18bit_chan_scale_setup,
306 .sw_setup_cb = ad7606b_sw_mode_setup,
307 };
308 EXPORT_SYMBOL_NS_GPL(ad7606c_18_info, "IIO_AD7606");
309
310 const struct ad7606_chip_info ad7616_info = {
311 .channels = ad7616_channels,
312 .init_delay_ms = 15,
313 .name = "ad7616",
314 .num_adc_channels = 16,
315 .num_channels = 17,
316 .oversampling_avail = ad7616_oversampling_avail,
317 .oversampling_num = ARRAY_SIZE(ad7616_oversampling_avail),
318 .os_req_reset = true,
319 .scale_setup_cb = ad7606_16bit_chan_scale_setup,
320 .sw_setup_cb = ad7616_sw_mode_setup,
321 };
322 EXPORT_SYMBOL_NS_GPL(ad7616_info, "IIO_AD7606");
323
ad7606_reset(struct ad7606_state * st)324 int ad7606_reset(struct ad7606_state *st)
325 {
326 if (st->gpio_reset) {
327 gpiod_set_value(st->gpio_reset, 1);
328 ndelay(100); /* t_reset >= 100ns */
329 gpiod_set_value(st->gpio_reset, 0);
330 return 0;
331 }
332
333 return -ENODEV;
334 }
335 EXPORT_SYMBOL_NS_GPL(ad7606_reset, "IIO_AD7606");
336
ad7606_16bit_chan_scale_setup(struct iio_dev * indio_dev,struct iio_chan_spec * chan,int ch)337 static int ad7606_16bit_chan_scale_setup(struct iio_dev *indio_dev,
338 struct iio_chan_spec *chan, int ch)
339 {
340 struct ad7606_state *st = iio_priv(indio_dev);
341 struct ad7606_chan_scale *cs = &st->chan_scales[ch];
342
343 if (!st->sw_mode_en) {
344 /* tied to logic low, analog input range is +/- 5V */
345 cs->range = 0;
346 cs->scale_avail = ad7606_16bit_hw_scale_avail;
347 cs->num_scales = ARRAY_SIZE(ad7606_16bit_hw_scale_avail);
348 return 0;
349 }
350
351 /* Scale of 0.076293 is only available in sw mode */
352 /* After reset, in software mode, ±10 V is set by default */
353 cs->range = 2;
354 cs->scale_avail = ad7606_16bit_sw_scale_avail;
355 cs->num_scales = ARRAY_SIZE(ad7606_16bit_sw_scale_avail);
356
357 return 0;
358 }
359
ad7606_get_chan_config(struct iio_dev * indio_dev,int ch,bool * bipolar,bool * differential)360 static int ad7606_get_chan_config(struct iio_dev *indio_dev, int ch,
361 bool *bipolar, bool *differential)
362 {
363 struct ad7606_state *st = iio_priv(indio_dev);
364 unsigned int num_channels = st->chip_info->num_adc_channels;
365 unsigned int offset = indio_dev->num_channels - st->chip_info->num_adc_channels;
366 struct device *dev = st->dev;
367 int ret;
368
369 *bipolar = false;
370 *differential = false;
371
372 device_for_each_child_node_scoped(dev, child) {
373 u32 pins[2];
374 int reg;
375
376 ret = fwnode_property_read_u32(child, "reg", ®);
377 if (ret)
378 continue;
379
380 /* channel number (here) is from 1 to num_channels */
381 if (reg < offset || reg > num_channels) {
382 dev_warn(dev,
383 "Invalid channel number (ignoring): %d\n", reg);
384 continue;
385 }
386
387 if (reg != (ch + 1))
388 continue;
389
390 *bipolar = fwnode_property_read_bool(child, "bipolar");
391
392 ret = fwnode_property_read_u32_array(child, "diff-channels",
393 pins, ARRAY_SIZE(pins));
394 /* Channel is differential, if pins are the same as 'reg' */
395 if (ret == 0 && (pins[0] != reg || pins[1] != reg)) {
396 dev_err(dev,
397 "Differential pins must be the same as 'reg'");
398 return -EINVAL;
399 }
400
401 *differential = (ret == 0);
402
403 if (*differential && !*bipolar) {
404 dev_err(dev,
405 "'bipolar' must be added for diff channel %d\n",
406 reg);
407 return -EINVAL;
408 }
409
410 return 0;
411 }
412
413 return 0;
414 }
415
ad7606c_18bit_chan_scale_setup(struct iio_dev * indio_dev,struct iio_chan_spec * chan,int ch)416 static int ad7606c_18bit_chan_scale_setup(struct iio_dev *indio_dev,
417 struct iio_chan_spec *chan, int ch)
418 {
419 struct ad7606_state *st = iio_priv(indio_dev);
420 struct ad7606_chan_scale *cs = &st->chan_scales[ch];
421 bool bipolar, differential;
422 int ret;
423
424 if (!st->sw_mode_en) {
425 cs->range = 0;
426 cs->scale_avail = ad7606_18bit_hw_scale_avail;
427 cs->num_scales = ARRAY_SIZE(ad7606_18bit_hw_scale_avail);
428 return 0;
429 }
430
431 ret = ad7606_get_chan_config(indio_dev, ch, &bipolar, &differential);
432 if (ret)
433 return ret;
434
435 if (differential) {
436 cs->scale_avail = ad7606c_18bit_differential_bipolar_scale_avail;
437 cs->num_scales =
438 ARRAY_SIZE(ad7606c_18bit_differential_bipolar_scale_avail);
439 /* Bipolar differential ranges start at 8 (b1000) */
440 cs->reg_offset = 8;
441 cs->range = 1;
442 chan->differential = 1;
443 chan->channel2 = chan->channel;
444
445 return 0;
446 }
447
448 chan->differential = 0;
449
450 if (bipolar) {
451 cs->scale_avail = ad7606c_18bit_single_ended_bipolar_scale_avail;
452 cs->num_scales =
453 ARRAY_SIZE(ad7606c_18bit_single_ended_bipolar_scale_avail);
454 /* Bipolar single-ended ranges start at 0 (b0000) */
455 cs->reg_offset = 0;
456 cs->range = 3;
457 chan->scan_type.sign = 's';
458
459 return 0;
460 }
461
462 cs->scale_avail = ad7606c_18bit_single_ended_unipolar_scale_avail;
463 cs->num_scales =
464 ARRAY_SIZE(ad7606c_18bit_single_ended_unipolar_scale_avail);
465 /* Unipolar single-ended ranges start at 5 (b0101) */
466 cs->reg_offset = 5;
467 cs->range = 1;
468 chan->scan_type.sign = 'u';
469
470 return 0;
471 }
472
ad7606c_16bit_chan_scale_setup(struct iio_dev * indio_dev,struct iio_chan_spec * chan,int ch)473 static int ad7606c_16bit_chan_scale_setup(struct iio_dev *indio_dev,
474 struct iio_chan_spec *chan, int ch)
475 {
476 struct ad7606_state *st = iio_priv(indio_dev);
477 struct ad7606_chan_scale *cs = &st->chan_scales[ch];
478 bool bipolar, differential;
479 int ret;
480
481 if (!st->sw_mode_en) {
482 cs->range = 0;
483 cs->scale_avail = ad7606_16bit_hw_scale_avail;
484 cs->num_scales = ARRAY_SIZE(ad7606_16bit_hw_scale_avail);
485 return 0;
486 }
487
488 ret = ad7606_get_chan_config(indio_dev, ch, &bipolar, &differential);
489 if (ret)
490 return ret;
491
492 if (differential) {
493 cs->scale_avail = ad7606c_16bit_differential_bipolar_scale_avail;
494 cs->num_scales =
495 ARRAY_SIZE(ad7606c_16bit_differential_bipolar_scale_avail);
496 /* Bipolar differential ranges start at 8 (b1000) */
497 cs->reg_offset = 8;
498 cs->range = 1;
499 chan->differential = 1;
500 chan->channel2 = chan->channel;
501 chan->scan_type.sign = 's';
502
503 return 0;
504 }
505
506 chan->differential = 0;
507
508 if (bipolar) {
509 cs->scale_avail = ad7606c_16bit_single_ended_bipolar_scale_avail;
510 cs->num_scales =
511 ARRAY_SIZE(ad7606c_16bit_single_ended_bipolar_scale_avail);
512 /* Bipolar single-ended ranges start at 0 (b0000) */
513 cs->reg_offset = 0;
514 cs->range = 3;
515 chan->scan_type.sign = 's';
516
517 return 0;
518 }
519
520 cs->scale_avail = ad7606c_16bit_single_ended_unipolar_scale_avail;
521 cs->num_scales =
522 ARRAY_SIZE(ad7606c_16bit_single_ended_unipolar_scale_avail);
523 /* Unipolar single-ended ranges start at 5 (b0101) */
524 cs->reg_offset = 5;
525 cs->range = 1;
526 chan->scan_type.sign = 'u';
527
528 return 0;
529 }
530
ad7607_chan_scale_setup(struct iio_dev * indio_dev,struct iio_chan_spec * chan,int ch)531 static int ad7607_chan_scale_setup(struct iio_dev *indio_dev,
532 struct iio_chan_spec *chan, int ch)
533 {
534 struct ad7606_state *st = iio_priv(indio_dev);
535 struct ad7606_chan_scale *cs = &st->chan_scales[ch];
536
537 cs->range = 0;
538 cs->scale_avail = ad7607_hw_scale_avail;
539 cs->num_scales = ARRAY_SIZE(ad7607_hw_scale_avail);
540 return 0;
541 }
542
ad7608_chan_scale_setup(struct iio_dev * indio_dev,struct iio_chan_spec * chan,int ch)543 static int ad7608_chan_scale_setup(struct iio_dev *indio_dev,
544 struct iio_chan_spec *chan, int ch)
545 {
546 struct ad7606_state *st = iio_priv(indio_dev);
547 struct ad7606_chan_scale *cs = &st->chan_scales[ch];
548
549 cs->range = 0;
550 cs->scale_avail = ad7606_18bit_hw_scale_avail;
551 cs->num_scales = ARRAY_SIZE(ad7606_18bit_hw_scale_avail);
552 return 0;
553 }
554
ad7609_chan_scale_setup(struct iio_dev * indio_dev,struct iio_chan_spec * chan,int ch)555 static int ad7609_chan_scale_setup(struct iio_dev *indio_dev,
556 struct iio_chan_spec *chan, int ch)
557 {
558 struct ad7606_state *st = iio_priv(indio_dev);
559 struct ad7606_chan_scale *cs = &st->chan_scales[ch];
560
561 cs->range = 0;
562 cs->scale_avail = ad7609_hw_scale_avail;
563 cs->num_scales = ARRAY_SIZE(ad7609_hw_scale_avail);
564 return 0;
565 }
566
ad7606_reg_access(struct iio_dev * indio_dev,unsigned int reg,unsigned int writeval,unsigned int * readval)567 static int ad7606_reg_access(struct iio_dev *indio_dev,
568 unsigned int reg,
569 unsigned int writeval,
570 unsigned int *readval)
571 {
572 struct ad7606_state *st = iio_priv(indio_dev);
573 int ret;
574
575 guard(mutex)(&st->lock);
576
577 if (readval) {
578 ret = st->bops->reg_read(st, reg);
579 if (ret < 0)
580 return ret;
581 *readval = ret;
582 return 0;
583 } else {
584 return st->bops->reg_write(st, reg, writeval);
585 }
586 }
587
ad7606_pwm_set_high(struct ad7606_state * st)588 static int ad7606_pwm_set_high(struct ad7606_state *st)
589 {
590 struct pwm_state cnvst_pwm_state;
591 int ret;
592
593 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state);
594 cnvst_pwm_state.enabled = true;
595 cnvst_pwm_state.duty_cycle = cnvst_pwm_state.period;
596
597 ret = pwm_apply_might_sleep(st->cnvst_pwm, &cnvst_pwm_state);
598
599 return ret;
600 }
601
ad7606_pwm_set_low(struct ad7606_state * st)602 static int ad7606_pwm_set_low(struct ad7606_state *st)
603 {
604 struct pwm_state cnvst_pwm_state;
605 int ret;
606
607 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state);
608 cnvst_pwm_state.enabled = true;
609 cnvst_pwm_state.duty_cycle = 0;
610
611 ret = pwm_apply_might_sleep(st->cnvst_pwm, &cnvst_pwm_state);
612
613 return ret;
614 }
615
ad7606_pwm_set_swing(struct ad7606_state * st)616 static int ad7606_pwm_set_swing(struct ad7606_state *st)
617 {
618 struct pwm_state cnvst_pwm_state;
619
620 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state);
621 cnvst_pwm_state.enabled = true;
622 cnvst_pwm_state.duty_cycle = cnvst_pwm_state.period / 2;
623
624 return pwm_apply_might_sleep(st->cnvst_pwm, &cnvst_pwm_state);
625 }
626
ad7606_pwm_is_swinging(struct ad7606_state * st)627 static bool ad7606_pwm_is_swinging(struct ad7606_state *st)
628 {
629 struct pwm_state cnvst_pwm_state;
630
631 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state);
632
633 return cnvst_pwm_state.duty_cycle != cnvst_pwm_state.period &&
634 cnvst_pwm_state.duty_cycle != 0;
635 }
636
ad7606_set_sampling_freq(struct ad7606_state * st,unsigned long freq)637 static int ad7606_set_sampling_freq(struct ad7606_state *st, unsigned long freq)
638 {
639 struct pwm_state cnvst_pwm_state;
640 bool is_swinging = ad7606_pwm_is_swinging(st);
641 bool is_high;
642
643 if (freq == 0)
644 return -EINVAL;
645
646 /* Retrieve the previous state. */
647 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state);
648 is_high = cnvst_pwm_state.duty_cycle == cnvst_pwm_state.period;
649
650 cnvst_pwm_state.period = DIV_ROUND_UP_ULL(NSEC_PER_SEC, freq);
651 cnvst_pwm_state.polarity = PWM_POLARITY_NORMAL;
652 if (is_high)
653 cnvst_pwm_state.duty_cycle = cnvst_pwm_state.period;
654 else if (is_swinging)
655 cnvst_pwm_state.duty_cycle = cnvst_pwm_state.period / 2;
656 else
657 cnvst_pwm_state.duty_cycle = 0;
658
659 return pwm_apply_might_sleep(st->cnvst_pwm, &cnvst_pwm_state);
660 }
661
ad7606_read_samples(struct ad7606_state * st)662 static int ad7606_read_samples(struct ad7606_state *st)
663 {
664 unsigned int num = st->chip_info->num_adc_channels;
665
666 return st->bops->read_block(st->dev, num, &st->data);
667 }
668
ad7606_trigger_handler(int irq,void * p)669 static irqreturn_t ad7606_trigger_handler(int irq, void *p)
670 {
671 struct iio_poll_func *pf = p;
672 struct iio_dev *indio_dev = pf->indio_dev;
673 struct ad7606_state *st = iio_priv(indio_dev);
674 int ret;
675
676 guard(mutex)(&st->lock);
677
678 ret = ad7606_read_samples(st);
679 if (ret)
680 goto error_ret;
681
682 iio_push_to_buffers_with_timestamp(indio_dev, &st->data,
683 iio_get_time_ns(indio_dev));
684 error_ret:
685 iio_trigger_notify_done(indio_dev->trig);
686 /* The rising edge of the CONVST signal starts a new conversion. */
687 gpiod_set_value(st->gpio_convst, 1);
688
689 return IRQ_HANDLED;
690 }
691
ad7606_scan_direct(struct iio_dev * indio_dev,unsigned int ch,int * val)692 static int ad7606_scan_direct(struct iio_dev *indio_dev, unsigned int ch,
693 int *val)
694 {
695 struct ad7606_state *st = iio_priv(indio_dev);
696 unsigned int realbits = st->chip_info->channels[1].scan_type.realbits;
697 const struct iio_chan_spec *chan;
698 int ret;
699
700 if (st->gpio_convst) {
701 gpiod_set_value(st->gpio_convst, 1);
702 } else {
703 ret = ad7606_pwm_set_high(st);
704 if (ret < 0)
705 return ret;
706 }
707
708 /*
709 * If no backend, wait for the interruption on busy pin, otherwise just add
710 * a delay to leave time for the data to be available. For now, the latter
711 * will not happen because IIO_CHAN_INFO_RAW is not supported for the backend.
712 * TODO: Add support for reading a single value when the backend is used.
713 */
714 if (!st->back) {
715 ret = wait_for_completion_timeout(&st->completion,
716 msecs_to_jiffies(1000));
717 if (!ret) {
718 ret = -ETIMEDOUT;
719 goto error_ret;
720 }
721 } else {
722 fsleep(1);
723 }
724
725 ret = ad7606_read_samples(st);
726 if (ret)
727 goto error_ret;
728
729 chan = &indio_dev->channels[ch + 1];
730 if (chan->scan_type.sign == 'u') {
731 if (realbits > 16)
732 *val = st->data.buf32[ch];
733 else
734 *val = st->data.buf16[ch];
735 } else {
736 if (realbits > 16)
737 *val = sign_extend32(st->data.buf32[ch], realbits - 1);
738 else
739 *val = sign_extend32(st->data.buf16[ch], realbits - 1);
740 }
741
742 error_ret:
743 if (!st->gpio_convst) {
744 ret = ad7606_pwm_set_low(st);
745 if (ret < 0)
746 return ret;
747 }
748 gpiod_set_value(st->gpio_convst, 0);
749
750 return ret;
751 }
752
ad7606_read_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int * val,int * val2,long m)753 static int ad7606_read_raw(struct iio_dev *indio_dev,
754 struct iio_chan_spec const *chan,
755 int *val,
756 int *val2,
757 long m)
758 {
759 int ret, ch = 0;
760 struct ad7606_state *st = iio_priv(indio_dev);
761 struct ad7606_chan_scale *cs;
762 struct pwm_state cnvst_pwm_state;
763
764 switch (m) {
765 case IIO_CHAN_INFO_RAW:
766 if (!iio_device_claim_direct(indio_dev))
767 return -EBUSY;
768 ret = ad7606_scan_direct(indio_dev, chan->address, val);
769 iio_device_release_direct(indio_dev);
770 if (ret < 0)
771 return ret;
772 return IIO_VAL_INT;
773 case IIO_CHAN_INFO_SCALE:
774 if (st->sw_mode_en)
775 ch = chan->address;
776 cs = &st->chan_scales[ch];
777 *val = cs->scale_avail[cs->range][0];
778 *val2 = cs->scale_avail[cs->range][1];
779 return IIO_VAL_INT_PLUS_MICRO;
780 case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
781 *val = st->oversampling;
782 return IIO_VAL_INT;
783 case IIO_CHAN_INFO_SAMP_FREQ:
784 /*
785 * TODO: return the real frequency intead of the requested one once
786 * pwm_get_state_hw comes upstream.
787 */
788 pwm_get_state(st->cnvst_pwm, &cnvst_pwm_state);
789 *val = DIV_ROUND_CLOSEST_ULL(NSEC_PER_SEC, cnvst_pwm_state.period);
790 return IIO_VAL_INT;
791 }
792 return -EINVAL;
793 }
794
in_voltage_scale_available_show(struct device * dev,struct device_attribute * attr,char * buf)795 static ssize_t in_voltage_scale_available_show(struct device *dev,
796 struct device_attribute *attr,
797 char *buf)
798 {
799 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
800 struct ad7606_state *st = iio_priv(indio_dev);
801 struct ad7606_chan_scale *cs = &st->chan_scales[0];
802 const unsigned int (*vals)[2] = cs->scale_avail;
803 unsigned int i;
804 size_t len = 0;
805
806 for (i = 0; i < cs->num_scales; i++)
807 len += scnprintf(buf + len, PAGE_SIZE - len, "%u.%06u ",
808 vals[i][0], vals[i][1]);
809 buf[len - 1] = '\n';
810
811 return len;
812 }
813
814 static IIO_DEVICE_ATTR_RO(in_voltage_scale_available, 0);
815
ad7606_write_scale_hw(struct iio_dev * indio_dev,int ch,int val)816 static int ad7606_write_scale_hw(struct iio_dev *indio_dev, int ch, int val)
817 {
818 struct ad7606_state *st = iio_priv(indio_dev);
819
820 gpiod_set_value(st->gpio_range, val);
821
822 return 0;
823 }
824
ad7606_write_os_hw(struct iio_dev * indio_dev,int val)825 static int ad7606_write_os_hw(struct iio_dev *indio_dev, int val)
826 {
827 struct ad7606_state *st = iio_priv(indio_dev);
828 DECLARE_BITMAP(values, 3);
829
830 values[0] = val & GENMASK(2, 0);
831
832 gpiod_multi_set_value_cansleep(st->gpio_os, values);
833
834 /* AD7616 requires a reset to update value */
835 if (st->chip_info->os_req_reset)
836 ad7606_reset(st);
837
838 return 0;
839 }
840
ad7606_write_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int val,int val2,long mask)841 static int ad7606_write_raw(struct iio_dev *indio_dev,
842 struct iio_chan_spec const *chan,
843 int val,
844 int val2,
845 long mask)
846 {
847 struct ad7606_state *st = iio_priv(indio_dev);
848 unsigned int scale_avail_uv[AD760X_MAX_SCALES];
849 struct ad7606_chan_scale *cs;
850 int i, ret, ch = 0;
851
852 guard(mutex)(&st->lock);
853
854 switch (mask) {
855 case IIO_CHAN_INFO_SCALE:
856 if (st->sw_mode_en)
857 ch = chan->address;
858 cs = &st->chan_scales[ch];
859 for (i = 0; i < cs->num_scales; i++) {
860 scale_avail_uv[i] = cs->scale_avail[i][0] * MICRO +
861 cs->scale_avail[i][1];
862 }
863 val = (val * MICRO) + val2;
864 i = find_closest(val, scale_avail_uv, cs->num_scales);
865
866 if (!iio_device_claim_direct(indio_dev))
867 return -EBUSY;
868 ret = st->write_scale(indio_dev, ch, i + cs->reg_offset);
869 iio_device_release_direct(indio_dev);
870 if (ret < 0)
871 return ret;
872 cs->range = i;
873
874 return 0;
875 case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
876 if (val2)
877 return -EINVAL;
878 i = find_closest(val, st->oversampling_avail,
879 st->num_os_ratios);
880
881 if (!iio_device_claim_direct(indio_dev))
882 return -EBUSY;
883 ret = st->write_os(indio_dev, i);
884 iio_device_release_direct(indio_dev);
885 if (ret < 0)
886 return ret;
887 st->oversampling = st->oversampling_avail[i];
888
889 return 0;
890 case IIO_CHAN_INFO_SAMP_FREQ:
891 if (val < 0 && val2 != 0)
892 return -EINVAL;
893 return ad7606_set_sampling_freq(st, val);
894 default:
895 return -EINVAL;
896 }
897 }
898
ad7606_oversampling_ratio_avail(struct device * dev,struct device_attribute * attr,char * buf)899 static ssize_t ad7606_oversampling_ratio_avail(struct device *dev,
900 struct device_attribute *attr,
901 char *buf)
902 {
903 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
904 struct ad7606_state *st = iio_priv(indio_dev);
905 const unsigned int *vals = st->oversampling_avail;
906 unsigned int i;
907 size_t len = 0;
908
909 for (i = 0; i < st->num_os_ratios; i++)
910 len += scnprintf(buf + len, PAGE_SIZE - len, "%u ", vals[i]);
911 buf[len - 1] = '\n';
912
913 return len;
914 }
915
916 static IIO_DEVICE_ATTR(oversampling_ratio_available, 0444,
917 ad7606_oversampling_ratio_avail, NULL, 0);
918
919 static struct attribute *ad7606_attributes_os_and_range[] = {
920 &iio_dev_attr_in_voltage_scale_available.dev_attr.attr,
921 &iio_dev_attr_oversampling_ratio_available.dev_attr.attr,
922 NULL,
923 };
924
925 static const struct attribute_group ad7606_attribute_group_os_and_range = {
926 .attrs = ad7606_attributes_os_and_range,
927 };
928
929 static struct attribute *ad7606_attributes_os[] = {
930 &iio_dev_attr_oversampling_ratio_available.dev_attr.attr,
931 NULL,
932 };
933
934 static const struct attribute_group ad7606_attribute_group_os = {
935 .attrs = ad7606_attributes_os,
936 };
937
938 static struct attribute *ad7606_attributes_range[] = {
939 &iio_dev_attr_in_voltage_scale_available.dev_attr.attr,
940 NULL,
941 };
942
943 static const struct attribute_group ad7606_attribute_group_range = {
944 .attrs = ad7606_attributes_range,
945 };
946
ad7606_request_gpios(struct ad7606_state * st)947 static int ad7606_request_gpios(struct ad7606_state *st)
948 {
949 struct device *dev = st->dev;
950
951 st->gpio_convst = devm_gpiod_get_optional(dev, "adi,conversion-start",
952 GPIOD_OUT_LOW);
953
954 if (IS_ERR(st->gpio_convst))
955 return PTR_ERR(st->gpio_convst);
956
957 st->gpio_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
958 if (IS_ERR(st->gpio_reset))
959 return PTR_ERR(st->gpio_reset);
960
961 st->gpio_range = devm_gpiod_get_optional(dev, "adi,range",
962 GPIOD_OUT_LOW);
963 if (IS_ERR(st->gpio_range))
964 return PTR_ERR(st->gpio_range);
965
966 st->gpio_standby = devm_gpiod_get_optional(dev, "standby",
967 GPIOD_OUT_LOW);
968 if (IS_ERR(st->gpio_standby))
969 return PTR_ERR(st->gpio_standby);
970
971 st->gpio_frstdata = devm_gpiod_get_optional(dev, "adi,first-data",
972 GPIOD_IN);
973 if (IS_ERR(st->gpio_frstdata))
974 return PTR_ERR(st->gpio_frstdata);
975
976 if (!st->chip_info->oversampling_num)
977 return 0;
978
979 st->gpio_os = devm_gpiod_get_array_optional(dev,
980 "adi,oversampling-ratio",
981 GPIOD_OUT_LOW);
982 return PTR_ERR_OR_ZERO(st->gpio_os);
983 }
984
985 /*
986 * The BUSY signal indicates when conversions are in progress, so when a rising
987 * edge of CONVST is applied, BUSY goes logic high and transitions low at the
988 * end of the entire conversion process. The falling edge of the BUSY signal
989 * triggers this interrupt.
990 */
ad7606_interrupt(int irq,void * dev_id)991 static irqreturn_t ad7606_interrupt(int irq, void *dev_id)
992 {
993 struct iio_dev *indio_dev = dev_id;
994 struct ad7606_state *st = iio_priv(indio_dev);
995 int ret;
996
997 if (iio_buffer_enabled(indio_dev)) {
998 if (st->gpio_convst) {
999 gpiod_set_value(st->gpio_convst, 0);
1000 } else {
1001 ret = ad7606_pwm_set_low(st);
1002 if (ret < 0) {
1003 dev_err(st->dev, "PWM set low failed");
1004 goto done;
1005 }
1006 }
1007 iio_trigger_poll_nested(st->trig);
1008 } else {
1009 complete(&st->completion);
1010 }
1011
1012 done:
1013 return IRQ_HANDLED;
1014 };
1015
ad7606_validate_trigger(struct iio_dev * indio_dev,struct iio_trigger * trig)1016 static int ad7606_validate_trigger(struct iio_dev *indio_dev,
1017 struct iio_trigger *trig)
1018 {
1019 struct ad7606_state *st = iio_priv(indio_dev);
1020
1021 if (st->trig != trig)
1022 return -EINVAL;
1023
1024 return 0;
1025 }
1026
ad7606_buffer_postenable(struct iio_dev * indio_dev)1027 static int ad7606_buffer_postenable(struct iio_dev *indio_dev)
1028 {
1029 struct ad7606_state *st = iio_priv(indio_dev);
1030
1031 gpiod_set_value(st->gpio_convst, 1);
1032
1033 return 0;
1034 }
1035
ad7606_buffer_predisable(struct iio_dev * indio_dev)1036 static int ad7606_buffer_predisable(struct iio_dev *indio_dev)
1037 {
1038 struct ad7606_state *st = iio_priv(indio_dev);
1039
1040 gpiod_set_value(st->gpio_convst, 0);
1041
1042 return 0;
1043 }
1044
ad7606_read_avail(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,const int ** vals,int * type,int * length,long info)1045 static int ad7606_read_avail(struct iio_dev *indio_dev,
1046 struct iio_chan_spec const *chan,
1047 const int **vals, int *type, int *length,
1048 long info)
1049 {
1050 struct ad7606_state *st = iio_priv(indio_dev);
1051 struct ad7606_chan_scale *cs;
1052 unsigned int ch = 0;
1053
1054 switch (info) {
1055 case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
1056 *vals = st->oversampling_avail;
1057 *length = st->num_os_ratios;
1058 *type = IIO_VAL_INT;
1059
1060 return IIO_AVAIL_LIST;
1061
1062 case IIO_CHAN_INFO_SCALE:
1063 if (st->sw_mode_en)
1064 ch = chan->address;
1065
1066 cs = &st->chan_scales[ch];
1067 *vals = (int *)cs->scale_avail;
1068 *length = cs->num_scales * 2;
1069 *type = IIO_VAL_INT_PLUS_MICRO;
1070
1071 return IIO_AVAIL_LIST;
1072 }
1073 return -EINVAL;
1074 }
1075
ad7606_backend_buffer_postenable(struct iio_dev * indio_dev)1076 static int ad7606_backend_buffer_postenable(struct iio_dev *indio_dev)
1077 {
1078 struct ad7606_state *st = iio_priv(indio_dev);
1079
1080 return ad7606_pwm_set_swing(st);
1081 }
1082
ad7606_backend_buffer_predisable(struct iio_dev * indio_dev)1083 static int ad7606_backend_buffer_predisable(struct iio_dev *indio_dev)
1084 {
1085 struct ad7606_state *st = iio_priv(indio_dev);
1086
1087 return ad7606_pwm_set_low(st);
1088 }
1089
ad7606_update_scan_mode(struct iio_dev * indio_dev,const unsigned long * scan_mask)1090 static int ad7606_update_scan_mode(struct iio_dev *indio_dev,
1091 const unsigned long *scan_mask)
1092 {
1093 struct ad7606_state *st = iio_priv(indio_dev);
1094
1095 /*
1096 * The update scan mode is only for iio backend compatible drivers.
1097 * If the specific update_scan_mode is not defined in the bus ops,
1098 * just do nothing and return 0.
1099 */
1100 if (!st->bops->update_scan_mode)
1101 return 0;
1102
1103 return st->bops->update_scan_mode(indio_dev, scan_mask);
1104 }
1105
1106 static const struct iio_buffer_setup_ops ad7606_buffer_ops = {
1107 .postenable = &ad7606_buffer_postenable,
1108 .predisable = &ad7606_buffer_predisable,
1109 };
1110
1111 static const struct iio_buffer_setup_ops ad7606_backend_buffer_ops = {
1112 .postenable = &ad7606_backend_buffer_postenable,
1113 .predisable = &ad7606_backend_buffer_predisable,
1114 };
1115
1116 static const struct iio_info ad7606_info_no_os_or_range = {
1117 .read_raw = &ad7606_read_raw,
1118 .validate_trigger = &ad7606_validate_trigger,
1119 .update_scan_mode = &ad7606_update_scan_mode,
1120 };
1121
1122 static const struct iio_info ad7606_info_os_and_range = {
1123 .read_raw = &ad7606_read_raw,
1124 .write_raw = &ad7606_write_raw,
1125 .attrs = &ad7606_attribute_group_os_and_range,
1126 .validate_trigger = &ad7606_validate_trigger,
1127 .update_scan_mode = &ad7606_update_scan_mode,
1128 };
1129
1130 static const struct iio_info ad7606_info_sw_mode = {
1131 .read_raw = &ad7606_read_raw,
1132 .write_raw = &ad7606_write_raw,
1133 .read_avail = &ad7606_read_avail,
1134 .debugfs_reg_access = &ad7606_reg_access,
1135 .validate_trigger = &ad7606_validate_trigger,
1136 .update_scan_mode = &ad7606_update_scan_mode,
1137 };
1138
1139 static const struct iio_info ad7606_info_os = {
1140 .read_raw = &ad7606_read_raw,
1141 .write_raw = &ad7606_write_raw,
1142 .attrs = &ad7606_attribute_group_os,
1143 .validate_trigger = &ad7606_validate_trigger,
1144 .update_scan_mode = &ad7606_update_scan_mode,
1145 };
1146
1147 static const struct iio_info ad7606_info_range = {
1148 .read_raw = &ad7606_read_raw,
1149 .write_raw = &ad7606_write_raw,
1150 .attrs = &ad7606_attribute_group_range,
1151 .validate_trigger = &ad7606_validate_trigger,
1152 .update_scan_mode = &ad7606_update_scan_mode,
1153 };
1154
1155 static const struct iio_trigger_ops ad7606_trigger_ops = {
1156 .validate_device = iio_trigger_validate_own_device,
1157 };
1158
ad7606_write_mask(struct ad7606_state * st,unsigned int addr,unsigned long mask,unsigned int val)1159 static int ad7606_write_mask(struct ad7606_state *st, unsigned int addr,
1160 unsigned long mask, unsigned int val)
1161 {
1162 int readval;
1163
1164 readval = st->bops->reg_read(st, addr);
1165 if (readval < 0)
1166 return readval;
1167
1168 readval &= ~mask;
1169 readval |= val;
1170
1171 return st->bops->reg_write(st, addr, readval);
1172 }
1173
ad7616_write_scale_sw(struct iio_dev * indio_dev,int ch,int val)1174 static int ad7616_write_scale_sw(struct iio_dev *indio_dev, int ch, int val)
1175 {
1176 struct ad7606_state *st = iio_priv(indio_dev);
1177 unsigned int ch_addr, mode, ch_index;
1178
1179 /*
1180 * Ad7616 has 16 channels divided in group A and group B.
1181 * The range of channels from A are stored in registers with address 4
1182 * while channels from B are stored in register with address 6.
1183 * The last bit from channels determines if it is from group A or B
1184 * because the order of channels in iio is 0A, 0B, 1A, 1B...
1185 */
1186 ch_index = ch >> 1;
1187
1188 ch_addr = AD7616_RANGE_CH_ADDR(ch_index);
1189
1190 if ((ch & 0x1) == 0) /* channel A */
1191 ch_addr += AD7616_RANGE_CH_A_ADDR_OFF;
1192 else /* channel B */
1193 ch_addr += AD7616_RANGE_CH_B_ADDR_OFF;
1194
1195 /* 0b01 for 2.5v, 0b10 for 5v and 0b11 for 10v */
1196 mode = AD7616_RANGE_CH_MODE(ch_index, ((val + 1) & 0b11));
1197
1198 return ad7606_write_mask(st, ch_addr, AD7616_RANGE_CH_MSK(ch_index),
1199 mode);
1200 }
1201
ad7616_write_os_sw(struct iio_dev * indio_dev,int val)1202 static int ad7616_write_os_sw(struct iio_dev *indio_dev, int val)
1203 {
1204 struct ad7606_state *st = iio_priv(indio_dev);
1205
1206 return ad7606_write_mask(st, AD7616_CONFIGURATION_REGISTER,
1207 AD7616_OS_MASK, val << 2);
1208 }
1209
ad7606_write_scale_sw(struct iio_dev * indio_dev,int ch,int val)1210 static int ad7606_write_scale_sw(struct iio_dev *indio_dev, int ch, int val)
1211 {
1212 struct ad7606_state *st = iio_priv(indio_dev);
1213
1214 return ad7606_write_mask(st, AD7606_RANGE_CH_ADDR(ch),
1215 AD7606_RANGE_CH_MSK(ch),
1216 AD7606_RANGE_CH_MODE(ch, val));
1217 }
1218
ad7606_write_os_sw(struct iio_dev * indio_dev,int val)1219 static int ad7606_write_os_sw(struct iio_dev *indio_dev, int val)
1220 {
1221 struct ad7606_state *st = iio_priv(indio_dev);
1222
1223 return st->bops->reg_write(st, AD7606_OS_MODE, val);
1224 }
1225
ad7616_sw_mode_setup(struct iio_dev * indio_dev)1226 static int ad7616_sw_mode_setup(struct iio_dev *indio_dev)
1227 {
1228 struct ad7606_state *st = iio_priv(indio_dev);
1229 int ret;
1230
1231 /*
1232 * Scale can be configured individually for each channel
1233 * in software mode.
1234 */
1235
1236 st->write_scale = ad7616_write_scale_sw;
1237 st->write_os = &ad7616_write_os_sw;
1238
1239 ret = st->bops->sw_mode_config(indio_dev);
1240 if (ret)
1241 return ret;
1242
1243 /* Activate Burst mode and SEQEN MODE */
1244 return ad7606_write_mask(st, AD7616_CONFIGURATION_REGISTER,
1245 AD7616_BURST_MODE | AD7616_SEQEN_MODE,
1246 AD7616_BURST_MODE | AD7616_SEQEN_MODE);
1247 }
1248
ad7606b_sw_mode_setup(struct iio_dev * indio_dev)1249 static int ad7606b_sw_mode_setup(struct iio_dev *indio_dev)
1250 {
1251 struct ad7606_state *st = iio_priv(indio_dev);
1252 DECLARE_BITMAP(os, 3);
1253
1254 bitmap_fill(os, 3);
1255 /*
1256 * Software mode is enabled when all three oversampling
1257 * pins are set to high. If oversampling gpios are defined
1258 * in the device tree, then they need to be set to high,
1259 * otherwise, they must be hardwired to VDD
1260 */
1261 if (st->gpio_os)
1262 gpiod_multi_set_value_cansleep(st->gpio_os, os);
1263
1264 /* OS of 128 and 256 are available only in software mode */
1265 st->oversampling_avail = ad7606b_oversampling_avail;
1266 st->num_os_ratios = ARRAY_SIZE(ad7606b_oversampling_avail);
1267
1268 st->write_scale = ad7606_write_scale_sw;
1269 st->write_os = &ad7606_write_os_sw;
1270
1271 return st->bops->sw_mode_config(indio_dev);
1272 }
1273
ad7606_chan_scales_setup(struct iio_dev * indio_dev)1274 static int ad7606_chan_scales_setup(struct iio_dev *indio_dev)
1275 {
1276 struct ad7606_state *st = iio_priv(indio_dev);
1277 unsigned int offset = indio_dev->num_channels - st->chip_info->num_adc_channels;
1278 struct iio_chan_spec *chans;
1279 size_t size;
1280 int ch, ret;
1281
1282 /* Clone IIO channels, since some may be differential */
1283 size = indio_dev->num_channels * sizeof(*indio_dev->channels);
1284 chans = devm_kzalloc(st->dev, size, GFP_KERNEL);
1285 if (!chans)
1286 return -ENOMEM;
1287
1288 memcpy(chans, indio_dev->channels, size);
1289 indio_dev->channels = chans;
1290
1291 for (ch = 0; ch < st->chip_info->num_adc_channels; ch++) {
1292 ret = st->chip_info->scale_setup_cb(indio_dev, &chans[ch + offset], ch);
1293 if (ret)
1294 return ret;
1295 }
1296
1297 return 0;
1298 }
1299
ad7606_pwm_disable(void * data)1300 static void ad7606_pwm_disable(void *data)
1301 {
1302 pwm_disable(data);
1303 }
1304
ad7606_probe(struct device * dev,int irq,void __iomem * base_address,const struct ad7606_chip_info * chip_info,const struct ad7606_bus_ops * bops)1305 int ad7606_probe(struct device *dev, int irq, void __iomem *base_address,
1306 const struct ad7606_chip_info *chip_info,
1307 const struct ad7606_bus_ops *bops)
1308 {
1309 struct ad7606_state *st;
1310 int ret;
1311 struct iio_dev *indio_dev;
1312
1313 indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
1314 if (!indio_dev)
1315 return -ENOMEM;
1316
1317 st = iio_priv(indio_dev);
1318 dev_set_drvdata(dev, indio_dev);
1319
1320 st->dev = dev;
1321 mutex_init(&st->lock);
1322 st->bops = bops;
1323 st->base_address = base_address;
1324 st->oversampling = 1;
1325
1326 ret = devm_regulator_get_enable(dev, "avcc");
1327 if (ret)
1328 return dev_err_probe(dev, ret,
1329 "Failed to enable specified AVcc supply\n");
1330
1331 st->chip_info = chip_info;
1332
1333 if (st->chip_info->oversampling_num) {
1334 st->oversampling_avail = st->chip_info->oversampling_avail;
1335 st->num_os_ratios = st->chip_info->oversampling_num;
1336 }
1337
1338 ret = ad7606_request_gpios(st);
1339 if (ret)
1340 return ret;
1341
1342 if (st->gpio_os) {
1343 if (st->gpio_range)
1344 indio_dev->info = &ad7606_info_os_and_range;
1345 else
1346 indio_dev->info = &ad7606_info_os;
1347 } else {
1348 if (st->gpio_range)
1349 indio_dev->info = &ad7606_info_range;
1350 else
1351 indio_dev->info = &ad7606_info_no_os_or_range;
1352 }
1353 indio_dev->modes = INDIO_DIRECT_MODE;
1354 indio_dev->name = chip_info->name;
1355 indio_dev->channels = st->chip_info->channels;
1356 indio_dev->num_channels = st->chip_info->num_channels;
1357
1358 ret = ad7606_reset(st);
1359 if (ret)
1360 dev_warn(st->dev, "failed to RESET: no RESET GPIO specified\n");
1361
1362 /* AD7616 requires al least 15ms to reconfigure after a reset */
1363 if (st->chip_info->init_delay_ms) {
1364 if (msleep_interruptible(st->chip_info->init_delay_ms))
1365 return -ERESTARTSYS;
1366 }
1367
1368 /* If convst pin is not defined, setup PWM. */
1369 if (!st->gpio_convst) {
1370 st->cnvst_pwm = devm_pwm_get(dev, NULL);
1371 if (IS_ERR(st->cnvst_pwm))
1372 return PTR_ERR(st->cnvst_pwm);
1373
1374 /* The PWM is initialized at 1MHz to have a fast enough GPIO emulation. */
1375 ret = ad7606_set_sampling_freq(st, 1 * MEGA);
1376 if (ret)
1377 return ret;
1378
1379 ret = ad7606_pwm_set_low(st);
1380 if (ret)
1381 return ret;
1382
1383 /*
1384 * PWM is not disabled when sampling stops, but instead its duty cycle is set
1385 * to 0% to be sure we have a "low" state. After we unload the driver, let's
1386 * disable the PWM.
1387 */
1388 ret = devm_add_action_or_reset(dev, ad7606_pwm_disable,
1389 st->cnvst_pwm);
1390 if (ret)
1391 return ret;
1392 }
1393
1394 if (st->bops->iio_backend_config) {
1395 /*
1396 * If there is a backend, the PWM should not overpass the maximum sampling
1397 * frequency the chip supports.
1398 */
1399 ret = ad7606_set_sampling_freq(st,
1400 chip_info->max_samplerate ? : 2 * KILO);
1401 if (ret)
1402 return ret;
1403
1404 ret = st->bops->iio_backend_config(dev, indio_dev);
1405 if (ret)
1406 return ret;
1407
1408 indio_dev->setup_ops = &ad7606_backend_buffer_ops;
1409 } else {
1410
1411 /* Reserve the PWM use only for backend (force gpio_convst definition) */
1412 if (!st->gpio_convst)
1413 return dev_err_probe(dev, -EINVAL,
1414 "No backend, connect convst to a GPIO");
1415
1416 init_completion(&st->completion);
1417 st->trig = devm_iio_trigger_alloc(dev, "%s-dev%d",
1418 indio_dev->name,
1419 iio_device_id(indio_dev));
1420 if (!st->trig)
1421 return -ENOMEM;
1422
1423 st->trig->ops = &ad7606_trigger_ops;
1424 iio_trigger_set_drvdata(st->trig, indio_dev);
1425 ret = devm_iio_trigger_register(dev, st->trig);
1426 if (ret)
1427 return ret;
1428
1429 indio_dev->trig = iio_trigger_get(st->trig);
1430
1431 ret = devm_request_threaded_irq(dev, irq, NULL, &ad7606_interrupt,
1432 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
1433 chip_info->name, indio_dev);
1434 if (ret)
1435 return ret;
1436
1437 ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
1438 &iio_pollfunc_store_time,
1439 &ad7606_trigger_handler,
1440 &ad7606_buffer_ops);
1441 if (ret)
1442 return ret;
1443 }
1444
1445 st->write_scale = ad7606_write_scale_hw;
1446 st->write_os = ad7606_write_os_hw;
1447
1448 st->sw_mode_en = st->chip_info->sw_setup_cb &&
1449 device_property_present(st->dev, "adi,sw-mode");
1450 if (st->sw_mode_en) {
1451 indio_dev->info = &ad7606_info_sw_mode;
1452 st->chip_info->sw_setup_cb(indio_dev);
1453 }
1454
1455 ret = ad7606_chan_scales_setup(indio_dev);
1456 if (ret)
1457 return ret;
1458
1459 return devm_iio_device_register(dev, indio_dev);
1460 }
1461 EXPORT_SYMBOL_NS_GPL(ad7606_probe, "IIO_AD7606");
1462
1463 #ifdef CONFIG_PM_SLEEP
1464
ad7606_suspend(struct device * dev)1465 static int ad7606_suspend(struct device *dev)
1466 {
1467 struct iio_dev *indio_dev = dev_get_drvdata(dev);
1468 struct ad7606_state *st = iio_priv(indio_dev);
1469
1470 if (st->gpio_standby) {
1471 gpiod_set_value(st->gpio_range, 1);
1472 gpiod_set_value(st->gpio_standby, 1);
1473 }
1474
1475 return 0;
1476 }
1477
ad7606_resume(struct device * dev)1478 static int ad7606_resume(struct device *dev)
1479 {
1480 struct iio_dev *indio_dev = dev_get_drvdata(dev);
1481 struct ad7606_state *st = iio_priv(indio_dev);
1482
1483 if (st->gpio_standby) {
1484 gpiod_set_value(st->gpio_range, st->chan_scales[0].range);
1485 gpiod_set_value(st->gpio_standby, 1);
1486 ad7606_reset(st);
1487 }
1488
1489 return 0;
1490 }
1491
1492 SIMPLE_DEV_PM_OPS(ad7606_pm_ops, ad7606_suspend, ad7606_resume);
1493 EXPORT_SYMBOL_NS_GPL(ad7606_pm_ops, "IIO_AD7606");
1494
1495 #endif
1496
1497 MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
1498 MODULE_DESCRIPTION("Analog Devices AD7606 ADC");
1499 MODULE_LICENSE("GPL v2");
1500