1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * AD7124 SPI ADC driver
4 *
5 * Copyright 2018 Analog Devices Inc.
6 */
7 #include <linux/bitfield.h>
8 #include <linux/bitops.h>
9 #include <linux/clk.h>
10 #include <linux/delay.h>
11 #include <linux/device.h>
12 #include <linux/err.h>
13 #include <linux/interrupt.h>
14 #include <linux/kernel.h>
15 #include <linux/kfifo.h>
16 #include <linux/module.h>
17 #include <linux/mod_devicetable.h>
18 #include <linux/property.h>
19 #include <linux/regulator/consumer.h>
20 #include <linux/spi/spi.h>
21
22 #include <linux/iio/iio.h>
23 #include <linux/iio/adc/ad_sigma_delta.h>
24 #include <linux/iio/sysfs.h>
25
26 /* AD7124 registers */
27 #define AD7124_COMMS 0x00
28 #define AD7124_STATUS 0x00
29 #define AD7124_ADC_CONTROL 0x01
30 #define AD7124_DATA 0x02
31 #define AD7124_IO_CONTROL_1 0x03
32 #define AD7124_IO_CONTROL_2 0x04
33 #define AD7124_ID 0x05
34 #define AD7124_ERROR 0x06
35 #define AD7124_ERROR_EN 0x07
36 #define AD7124_MCLK_COUNT 0x08
37 #define AD7124_CHANNEL(x) (0x09 + (x))
38 #define AD7124_CONFIG(x) (0x19 + (x))
39 #define AD7124_FILTER(x) (0x21 + (x))
40 #define AD7124_OFFSET(x) (0x29 + (x))
41 #define AD7124_GAIN(x) (0x31 + (x))
42
43 /* AD7124_STATUS */
44 #define AD7124_STATUS_POR_FLAG_MSK BIT(4)
45
46 /* AD7124_ADC_CONTROL */
47 #define AD7124_ADC_STATUS_EN_MSK BIT(10)
48 #define AD7124_ADC_STATUS_EN(x) FIELD_PREP(AD7124_ADC_STATUS_EN_MSK, x)
49 #define AD7124_ADC_CTRL_REF_EN_MSK BIT(8)
50 #define AD7124_ADC_CTRL_REF_EN(x) FIELD_PREP(AD7124_ADC_CTRL_REF_EN_MSK, x)
51 #define AD7124_ADC_CTRL_PWR_MSK GENMASK(7, 6)
52 #define AD7124_ADC_CTRL_PWR(x) FIELD_PREP(AD7124_ADC_CTRL_PWR_MSK, x)
53 #define AD7124_ADC_CTRL_MODE_MSK GENMASK(5, 2)
54 #define AD7124_ADC_CTRL_MODE(x) FIELD_PREP(AD7124_ADC_CTRL_MODE_MSK, x)
55
56 /* AD7124 ID */
57 #define AD7124_DEVICE_ID_MSK GENMASK(7, 4)
58 #define AD7124_DEVICE_ID_GET(x) FIELD_GET(AD7124_DEVICE_ID_MSK, x)
59 #define AD7124_SILICON_REV_MSK GENMASK(3, 0)
60 #define AD7124_SILICON_REV_GET(x) FIELD_GET(AD7124_SILICON_REV_MSK, x)
61
62 #define CHIPID_AD7124_4 0x0
63 #define CHIPID_AD7124_8 0x1
64
65 /* AD7124_CHANNEL_X */
66 #define AD7124_CHANNEL_EN_MSK BIT(15)
67 #define AD7124_CHANNEL_EN(x) FIELD_PREP(AD7124_CHANNEL_EN_MSK, x)
68 #define AD7124_CHANNEL_SETUP_MSK GENMASK(14, 12)
69 #define AD7124_CHANNEL_SETUP(x) FIELD_PREP(AD7124_CHANNEL_SETUP_MSK, x)
70 #define AD7124_CHANNEL_AINP_MSK GENMASK(9, 5)
71 #define AD7124_CHANNEL_AINP(x) FIELD_PREP(AD7124_CHANNEL_AINP_MSK, x)
72 #define AD7124_CHANNEL_AINM_MSK GENMASK(4, 0)
73 #define AD7124_CHANNEL_AINM(x) FIELD_PREP(AD7124_CHANNEL_AINM_MSK, x)
74
75 /* AD7124_CONFIG_X */
76 #define AD7124_CONFIG_BIPOLAR_MSK BIT(11)
77 #define AD7124_CONFIG_BIPOLAR(x) FIELD_PREP(AD7124_CONFIG_BIPOLAR_MSK, x)
78 #define AD7124_CONFIG_REF_SEL_MSK GENMASK(4, 3)
79 #define AD7124_CONFIG_REF_SEL(x) FIELD_PREP(AD7124_CONFIG_REF_SEL_MSK, x)
80 #define AD7124_CONFIG_PGA_MSK GENMASK(2, 0)
81 #define AD7124_CONFIG_PGA(x) FIELD_PREP(AD7124_CONFIG_PGA_MSK, x)
82 #define AD7124_CONFIG_IN_BUFF_MSK GENMASK(6, 5)
83 #define AD7124_CONFIG_IN_BUFF(x) FIELD_PREP(AD7124_CONFIG_IN_BUFF_MSK, x)
84
85 /* AD7124_FILTER_X */
86 #define AD7124_FILTER_FS_MSK GENMASK(10, 0)
87 #define AD7124_FILTER_FS(x) FIELD_PREP(AD7124_FILTER_FS_MSK, x)
88 #define AD7124_FILTER_TYPE_MSK GENMASK(23, 21)
89 #define AD7124_FILTER_TYPE_SEL(x) FIELD_PREP(AD7124_FILTER_TYPE_MSK, x)
90
91 #define AD7124_SINC3_FILTER 2
92 #define AD7124_SINC4_FILTER 0
93
94 #define AD7124_CONF_ADDR_OFFSET 20
95 #define AD7124_MAX_CONFIGS 8
96 #define AD7124_MAX_CHANNELS 16
97
98 enum ad7124_ids {
99 ID_AD7124_4,
100 ID_AD7124_8,
101 };
102
103 enum ad7124_ref_sel {
104 AD7124_REFIN1,
105 AD7124_REFIN2,
106 AD7124_INT_REF,
107 AD7124_AVDD_REF,
108 };
109
110 enum ad7124_power_mode {
111 AD7124_LOW_POWER,
112 AD7124_MID_POWER,
113 AD7124_FULL_POWER,
114 };
115
116 static const unsigned int ad7124_gain[8] = {
117 1, 2, 4, 8, 16, 32, 64, 128
118 };
119
120 static const unsigned int ad7124_reg_size[] = {
121 1, 2, 3, 3, 2, 1, 3, 3, 1, 2, 2, 2, 2,
122 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
123 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
124 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
125 3, 3, 3, 3, 3
126 };
127
128 static const int ad7124_master_clk_freq_hz[3] = {
129 [AD7124_LOW_POWER] = 76800,
130 [AD7124_MID_POWER] = 153600,
131 [AD7124_FULL_POWER] = 614400,
132 };
133
134 static const char * const ad7124_ref_names[] = {
135 [AD7124_REFIN1] = "refin1",
136 [AD7124_REFIN2] = "refin2",
137 [AD7124_INT_REF] = "int",
138 [AD7124_AVDD_REF] = "avdd",
139 };
140
141 struct ad7124_chip_info {
142 const char *name;
143 unsigned int chip_id;
144 unsigned int num_inputs;
145 };
146
147 struct ad7124_channel_config {
148 bool live;
149 unsigned int cfg_slot;
150 /* Following fields are used to compare equality. */
151 struct_group(config_props,
152 enum ad7124_ref_sel refsel;
153 bool bipolar;
154 bool buf_positive;
155 bool buf_negative;
156 unsigned int vref_mv;
157 unsigned int pga_bits;
158 unsigned int odr;
159 unsigned int odr_sel_bits;
160 unsigned int filter_type;
161 );
162 };
163
164 struct ad7124_channel {
165 unsigned int nr;
166 struct ad7124_channel_config cfg;
167 unsigned int ain;
168 unsigned int slot;
169 };
170
171 struct ad7124_state {
172 const struct ad7124_chip_info *chip_info;
173 struct ad_sigma_delta sd;
174 struct ad7124_channel *channels;
175 struct regulator *vref[4];
176 struct clk *mclk;
177 unsigned int adc_control;
178 unsigned int num_channels;
179 struct mutex cfgs_lock; /* lock for configs access */
180 unsigned long cfg_slots_status; /* bitmap with slot status (1 means it is used) */
181 DECLARE_KFIFO(live_cfgs_fifo, struct ad7124_channel_config *, AD7124_MAX_CONFIGS);
182 };
183
184 static const struct iio_chan_spec ad7124_channel_template = {
185 .type = IIO_VOLTAGE,
186 .indexed = 1,
187 .differential = 1,
188 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
189 BIT(IIO_CHAN_INFO_SCALE) |
190 BIT(IIO_CHAN_INFO_OFFSET) |
191 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
192 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY),
193 .scan_type = {
194 .sign = 'u',
195 .realbits = 24,
196 .storagebits = 32,
197 .endianness = IIO_BE,
198 },
199 };
200
201 static struct ad7124_chip_info ad7124_chip_info_tbl[] = {
202 [ID_AD7124_4] = {
203 .name = "ad7124-4",
204 .chip_id = CHIPID_AD7124_4,
205 .num_inputs = 8,
206 },
207 [ID_AD7124_8] = {
208 .name = "ad7124-8",
209 .chip_id = CHIPID_AD7124_8,
210 .num_inputs = 16,
211 },
212 };
213
ad7124_find_closest_match(const int * array,unsigned int size,int val)214 static int ad7124_find_closest_match(const int *array,
215 unsigned int size, int val)
216 {
217 int i, idx;
218 unsigned int diff_new, diff_old;
219
220 diff_old = U32_MAX;
221 idx = 0;
222
223 for (i = 0; i < size; i++) {
224 diff_new = abs(val - array[i]);
225 if (diff_new < diff_old) {
226 diff_old = diff_new;
227 idx = i;
228 }
229 }
230
231 return idx;
232 }
233
ad7124_spi_write_mask(struct ad7124_state * st,unsigned int addr,unsigned long mask,unsigned int val,unsigned int bytes)234 static int ad7124_spi_write_mask(struct ad7124_state *st,
235 unsigned int addr,
236 unsigned long mask,
237 unsigned int val,
238 unsigned int bytes)
239 {
240 unsigned int readval;
241 int ret;
242
243 ret = ad_sd_read_reg(&st->sd, addr, bytes, &readval);
244 if (ret < 0)
245 return ret;
246
247 readval &= ~mask;
248 readval |= val;
249
250 return ad_sd_write_reg(&st->sd, addr, bytes, readval);
251 }
252
ad7124_set_mode(struct ad_sigma_delta * sd,enum ad_sigma_delta_mode mode)253 static int ad7124_set_mode(struct ad_sigma_delta *sd,
254 enum ad_sigma_delta_mode mode)
255 {
256 struct ad7124_state *st = container_of(sd, struct ad7124_state, sd);
257
258 st->adc_control &= ~AD7124_ADC_CTRL_MODE_MSK;
259 st->adc_control |= AD7124_ADC_CTRL_MODE(mode);
260
261 return ad_sd_write_reg(&st->sd, AD7124_ADC_CONTROL, 2, st->adc_control);
262 }
263
ad7124_set_channel_odr(struct ad7124_state * st,unsigned int channel,unsigned int odr)264 static void ad7124_set_channel_odr(struct ad7124_state *st, unsigned int channel, unsigned int odr)
265 {
266 unsigned int fclk, odr_sel_bits;
267
268 fclk = clk_get_rate(st->mclk);
269 /*
270 * FS[10:0] = fCLK / (fADC x 32) where:
271 * fADC is the output data rate
272 * fCLK is the master clock frequency
273 * FS[10:0] are the bits in the filter register
274 * FS[10:0] can have a value from 1 to 2047
275 */
276 odr_sel_bits = DIV_ROUND_CLOSEST(fclk, odr * 32);
277 if (odr_sel_bits < 1)
278 odr_sel_bits = 1;
279 else if (odr_sel_bits > 2047)
280 odr_sel_bits = 2047;
281
282 if (odr_sel_bits != st->channels[channel].cfg.odr_sel_bits)
283 st->channels[channel].cfg.live = false;
284
285 /* fADC = fCLK / (FS[10:0] x 32) */
286 st->channels[channel].cfg.odr = DIV_ROUND_CLOSEST(fclk, odr_sel_bits * 32);
287 st->channels[channel].cfg.odr_sel_bits = odr_sel_bits;
288 }
289
ad7124_get_3db_filter_freq(struct ad7124_state * st,unsigned int channel)290 static int ad7124_get_3db_filter_freq(struct ad7124_state *st,
291 unsigned int channel)
292 {
293 unsigned int fadc;
294
295 fadc = st->channels[channel].cfg.odr;
296
297 switch (st->channels[channel].cfg.filter_type) {
298 case AD7124_SINC3_FILTER:
299 return DIV_ROUND_CLOSEST(fadc * 230, 1000);
300 case AD7124_SINC4_FILTER:
301 return DIV_ROUND_CLOSEST(fadc * 262, 1000);
302 default:
303 return -EINVAL;
304 }
305 }
306
ad7124_set_3db_filter_freq(struct ad7124_state * st,unsigned int channel,unsigned int freq)307 static void ad7124_set_3db_filter_freq(struct ad7124_state *st, unsigned int channel,
308 unsigned int freq)
309 {
310 unsigned int sinc4_3db_odr;
311 unsigned int sinc3_3db_odr;
312 unsigned int new_filter;
313 unsigned int new_odr;
314
315 sinc4_3db_odr = DIV_ROUND_CLOSEST(freq * 1000, 230);
316 sinc3_3db_odr = DIV_ROUND_CLOSEST(freq * 1000, 262);
317
318 if (sinc4_3db_odr > sinc3_3db_odr) {
319 new_filter = AD7124_SINC3_FILTER;
320 new_odr = sinc4_3db_odr;
321 } else {
322 new_filter = AD7124_SINC4_FILTER;
323 new_odr = sinc3_3db_odr;
324 }
325
326 if (new_odr != st->channels[channel].cfg.odr)
327 st->channels[channel].cfg.live = false;
328
329 st->channels[channel].cfg.filter_type = new_filter;
330 st->channels[channel].cfg.odr = new_odr;
331 }
332
ad7124_find_similar_live_cfg(struct ad7124_state * st,struct ad7124_channel_config * cfg)333 static struct ad7124_channel_config *ad7124_find_similar_live_cfg(struct ad7124_state *st,
334 struct ad7124_channel_config *cfg)
335 {
336 struct ad7124_channel_config *cfg_aux;
337 ptrdiff_t cmp_size;
338 int i;
339
340 cmp_size = sizeof_field(struct ad7124_channel_config, config_props);
341 for (i = 0; i < st->num_channels; i++) {
342 cfg_aux = &st->channels[i].cfg;
343
344 if (cfg_aux->live &&
345 !memcmp(&cfg->config_props, &cfg_aux->config_props, cmp_size))
346 return cfg_aux;
347 }
348
349 return NULL;
350 }
351
ad7124_find_free_config_slot(struct ad7124_state * st)352 static int ad7124_find_free_config_slot(struct ad7124_state *st)
353 {
354 unsigned int free_cfg_slot;
355
356 free_cfg_slot = find_first_zero_bit(&st->cfg_slots_status, AD7124_MAX_CONFIGS);
357 if (free_cfg_slot == AD7124_MAX_CONFIGS)
358 return -1;
359
360 return free_cfg_slot;
361 }
362
ad7124_init_config_vref(struct ad7124_state * st,struct ad7124_channel_config * cfg)363 static int ad7124_init_config_vref(struct ad7124_state *st, struct ad7124_channel_config *cfg)
364 {
365 unsigned int refsel = cfg->refsel;
366
367 switch (refsel) {
368 case AD7124_REFIN1:
369 case AD7124_REFIN2:
370 case AD7124_AVDD_REF:
371 if (IS_ERR(st->vref[refsel])) {
372 dev_err(&st->sd.spi->dev,
373 "Error, trying to use external voltage reference without a %s regulator.\n",
374 ad7124_ref_names[refsel]);
375 return PTR_ERR(st->vref[refsel]);
376 }
377 cfg->vref_mv = regulator_get_voltage(st->vref[refsel]);
378 /* Conversion from uV to mV */
379 cfg->vref_mv /= 1000;
380 return 0;
381 case AD7124_INT_REF:
382 cfg->vref_mv = 2500;
383 st->adc_control &= ~AD7124_ADC_CTRL_REF_EN_MSK;
384 st->adc_control |= AD7124_ADC_CTRL_REF_EN(1);
385 return 0;
386 default:
387 dev_err(&st->sd.spi->dev, "Invalid reference %d\n", refsel);
388 return -EINVAL;
389 }
390 }
391
ad7124_write_config(struct ad7124_state * st,struct ad7124_channel_config * cfg,unsigned int cfg_slot)392 static int ad7124_write_config(struct ad7124_state *st, struct ad7124_channel_config *cfg,
393 unsigned int cfg_slot)
394 {
395 unsigned int tmp;
396 unsigned int val;
397 int ret;
398
399 cfg->cfg_slot = cfg_slot;
400
401 tmp = (cfg->buf_positive << 1) + cfg->buf_negative;
402 val = AD7124_CONFIG_BIPOLAR(cfg->bipolar) | AD7124_CONFIG_REF_SEL(cfg->refsel) |
403 AD7124_CONFIG_IN_BUFF(tmp) | AD7124_CONFIG_PGA(cfg->pga_bits);
404
405 ret = ad_sd_write_reg(&st->sd, AD7124_CONFIG(cfg->cfg_slot), 2, val);
406 if (ret < 0)
407 return ret;
408
409 tmp = AD7124_FILTER_TYPE_SEL(cfg->filter_type) |
410 AD7124_FILTER_FS(cfg->odr_sel_bits);
411 return ad7124_spi_write_mask(st, AD7124_FILTER(cfg->cfg_slot),
412 AD7124_FILTER_TYPE_MSK | AD7124_FILTER_FS_MSK,
413 tmp, 3);
414 }
415
ad7124_pop_config(struct ad7124_state * st)416 static struct ad7124_channel_config *ad7124_pop_config(struct ad7124_state *st)
417 {
418 struct ad7124_channel_config *lru_cfg;
419 struct ad7124_channel_config *cfg;
420 int ret;
421 int i;
422
423 /*
424 * Pop least recently used config from the fifo
425 * in order to make room for the new one
426 */
427 ret = kfifo_get(&st->live_cfgs_fifo, &lru_cfg);
428 if (ret <= 0)
429 return NULL;
430
431 lru_cfg->live = false;
432
433 /* mark slot as free */
434 assign_bit(lru_cfg->cfg_slot, &st->cfg_slots_status, 0);
435
436 /* invalidate all other configs that pointed to this one */
437 for (i = 0; i < st->num_channels; i++) {
438 cfg = &st->channels[i].cfg;
439
440 if (cfg->cfg_slot == lru_cfg->cfg_slot)
441 cfg->live = false;
442 }
443
444 return lru_cfg;
445 }
446
ad7124_push_config(struct ad7124_state * st,struct ad7124_channel_config * cfg)447 static int ad7124_push_config(struct ad7124_state *st, struct ad7124_channel_config *cfg)
448 {
449 struct ad7124_channel_config *lru_cfg;
450 int free_cfg_slot;
451
452 free_cfg_slot = ad7124_find_free_config_slot(st);
453 if (free_cfg_slot >= 0) {
454 /* push the new config in configs queue */
455 kfifo_put(&st->live_cfgs_fifo, cfg);
456 } else {
457 /* pop one config to make room for the new one */
458 lru_cfg = ad7124_pop_config(st);
459 if (!lru_cfg)
460 return -EINVAL;
461
462 /* push the new config in configs queue */
463 free_cfg_slot = lru_cfg->cfg_slot;
464 kfifo_put(&st->live_cfgs_fifo, cfg);
465 }
466
467 /* mark slot as used */
468 assign_bit(free_cfg_slot, &st->cfg_slots_status, 1);
469
470 return ad7124_write_config(st, cfg, free_cfg_slot);
471 }
472
ad7124_enable_channel(struct ad7124_state * st,struct ad7124_channel * ch)473 static int ad7124_enable_channel(struct ad7124_state *st, struct ad7124_channel *ch)
474 {
475 ch->cfg.live = true;
476 return ad_sd_write_reg(&st->sd, AD7124_CHANNEL(ch->nr), 2, ch->ain |
477 AD7124_CHANNEL_SETUP(ch->cfg.cfg_slot) | AD7124_CHANNEL_EN(1));
478 }
479
ad7124_prepare_read(struct ad7124_state * st,int address)480 static int ad7124_prepare_read(struct ad7124_state *st, int address)
481 {
482 struct ad7124_channel_config *cfg = &st->channels[address].cfg;
483 struct ad7124_channel_config *live_cfg;
484
485 /*
486 * Before doing any reads assign the channel a configuration.
487 * Check if channel's config is on the device
488 */
489 if (!cfg->live) {
490 /* check if config matches another one */
491 live_cfg = ad7124_find_similar_live_cfg(st, cfg);
492 if (!live_cfg)
493 ad7124_push_config(st, cfg);
494 else
495 cfg->cfg_slot = live_cfg->cfg_slot;
496 }
497
498 /* point channel to the config slot and enable */
499 return ad7124_enable_channel(st, &st->channels[address]);
500 }
501
__ad7124_set_channel(struct ad_sigma_delta * sd,unsigned int channel)502 static int __ad7124_set_channel(struct ad_sigma_delta *sd, unsigned int channel)
503 {
504 struct ad7124_state *st = container_of(sd, struct ad7124_state, sd);
505
506 return ad7124_prepare_read(st, channel);
507 }
508
ad7124_set_channel(struct ad_sigma_delta * sd,unsigned int channel)509 static int ad7124_set_channel(struct ad_sigma_delta *sd, unsigned int channel)
510 {
511 struct ad7124_state *st = container_of(sd, struct ad7124_state, sd);
512 int ret;
513
514 mutex_lock(&st->cfgs_lock);
515 ret = __ad7124_set_channel(sd, channel);
516 mutex_unlock(&st->cfgs_lock);
517
518 return ret;
519 }
520
ad7124_append_status(struct ad_sigma_delta * sd,bool append)521 static int ad7124_append_status(struct ad_sigma_delta *sd, bool append)
522 {
523 struct ad7124_state *st = container_of(sd, struct ad7124_state, sd);
524 unsigned int adc_control = st->adc_control;
525 int ret;
526
527 adc_control &= ~AD7124_ADC_STATUS_EN_MSK;
528 adc_control |= AD7124_ADC_STATUS_EN(append);
529
530 ret = ad_sd_write_reg(&st->sd, AD7124_ADC_CONTROL, 2, adc_control);
531 if (ret < 0)
532 return ret;
533
534 st->adc_control = adc_control;
535
536 return 0;
537 }
538
ad7124_disable_all(struct ad_sigma_delta * sd)539 static int ad7124_disable_all(struct ad_sigma_delta *sd)
540 {
541 struct ad7124_state *st = container_of(sd, struct ad7124_state, sd);
542 int ret;
543 int i;
544
545 for (i = 0; i < st->num_channels; i++) {
546 ret = ad7124_spi_write_mask(st, AD7124_CHANNEL(i), AD7124_CHANNEL_EN_MSK, 0, 2);
547 if (ret < 0)
548 return ret;
549 }
550
551 return 0;
552 }
553
ad7124_disable_one(struct ad_sigma_delta * sd,unsigned int chan)554 static int ad7124_disable_one(struct ad_sigma_delta *sd, unsigned int chan)
555 {
556 struct ad7124_state *st = container_of(sd, struct ad7124_state, sd);
557
558 return ad7124_spi_write_mask(st, AD7124_CHANNEL(chan), AD7124_CHANNEL_EN_MSK, 0, 2);
559 }
560
561 static const struct ad_sigma_delta_info ad7124_sigma_delta_info = {
562 .set_channel = ad7124_set_channel,
563 .append_status = ad7124_append_status,
564 .disable_all = ad7124_disable_all,
565 .disable_one = ad7124_disable_one,
566 .set_mode = ad7124_set_mode,
567 .has_registers = true,
568 .addr_shift = 0,
569 .read_mask = BIT(6),
570 .status_ch_mask = GENMASK(3, 0),
571 .data_reg = AD7124_DATA,
572 .num_slots = 8,
573 .irq_flags = IRQF_TRIGGER_FALLING,
574 };
575
ad7124_read_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int * val,int * val2,long info)576 static int ad7124_read_raw(struct iio_dev *indio_dev,
577 struct iio_chan_spec const *chan,
578 int *val, int *val2, long info)
579 {
580 struct ad7124_state *st = iio_priv(indio_dev);
581 int idx, ret;
582
583 switch (info) {
584 case IIO_CHAN_INFO_RAW:
585 ret = ad_sigma_delta_single_conversion(indio_dev, chan, val);
586 if (ret < 0)
587 return ret;
588
589 return IIO_VAL_INT;
590 case IIO_CHAN_INFO_SCALE:
591 mutex_lock(&st->cfgs_lock);
592
593 idx = st->channels[chan->address].cfg.pga_bits;
594 *val = st->channels[chan->address].cfg.vref_mv;
595 if (st->channels[chan->address].cfg.bipolar)
596 *val2 = chan->scan_type.realbits - 1 + idx;
597 else
598 *val2 = chan->scan_type.realbits + idx;
599
600 mutex_unlock(&st->cfgs_lock);
601 return IIO_VAL_FRACTIONAL_LOG2;
602 case IIO_CHAN_INFO_OFFSET:
603 mutex_lock(&st->cfgs_lock);
604 if (st->channels[chan->address].cfg.bipolar)
605 *val = -(1 << (chan->scan_type.realbits - 1));
606 else
607 *val = 0;
608
609 mutex_unlock(&st->cfgs_lock);
610 return IIO_VAL_INT;
611 case IIO_CHAN_INFO_SAMP_FREQ:
612 mutex_lock(&st->cfgs_lock);
613 *val = st->channels[chan->address].cfg.odr;
614 mutex_unlock(&st->cfgs_lock);
615
616 return IIO_VAL_INT;
617 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
618 mutex_lock(&st->cfgs_lock);
619 *val = ad7124_get_3db_filter_freq(st, chan->scan_index);
620 mutex_unlock(&st->cfgs_lock);
621
622 return IIO_VAL_INT;
623 default:
624 return -EINVAL;
625 }
626 }
627
ad7124_write_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int val,int val2,long info)628 static int ad7124_write_raw(struct iio_dev *indio_dev,
629 struct iio_chan_spec const *chan,
630 int val, int val2, long info)
631 {
632 struct ad7124_state *st = iio_priv(indio_dev);
633 unsigned int res, gain, full_scale, vref;
634 int ret = 0;
635
636 mutex_lock(&st->cfgs_lock);
637
638 switch (info) {
639 case IIO_CHAN_INFO_SAMP_FREQ:
640 if (val2 != 0 || val == 0) {
641 ret = -EINVAL;
642 break;
643 }
644
645 ad7124_set_channel_odr(st, chan->address, val);
646 break;
647 case IIO_CHAN_INFO_SCALE:
648 if (val != 0) {
649 ret = -EINVAL;
650 break;
651 }
652
653 if (st->channels[chan->address].cfg.bipolar)
654 full_scale = 1 << (chan->scan_type.realbits - 1);
655 else
656 full_scale = 1 << chan->scan_type.realbits;
657
658 vref = st->channels[chan->address].cfg.vref_mv * 1000000LL;
659 res = DIV_ROUND_CLOSEST(vref, full_scale);
660 gain = DIV_ROUND_CLOSEST(res, val2);
661 res = ad7124_find_closest_match(ad7124_gain, ARRAY_SIZE(ad7124_gain), gain);
662
663 if (st->channels[chan->address].cfg.pga_bits != res)
664 st->channels[chan->address].cfg.live = false;
665
666 st->channels[chan->address].cfg.pga_bits = res;
667 break;
668 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
669 if (val2 != 0) {
670 ret = -EINVAL;
671 break;
672 }
673
674 ad7124_set_3db_filter_freq(st, chan->address, val);
675 break;
676 default:
677 ret = -EINVAL;
678 }
679
680 mutex_unlock(&st->cfgs_lock);
681 return ret;
682 }
683
ad7124_reg_access(struct iio_dev * indio_dev,unsigned int reg,unsigned int writeval,unsigned int * readval)684 static int ad7124_reg_access(struct iio_dev *indio_dev,
685 unsigned int reg,
686 unsigned int writeval,
687 unsigned int *readval)
688 {
689 struct ad7124_state *st = iio_priv(indio_dev);
690 int ret;
691
692 if (reg >= ARRAY_SIZE(ad7124_reg_size))
693 return -EINVAL;
694
695 if (readval)
696 ret = ad_sd_read_reg(&st->sd, reg, ad7124_reg_size[reg],
697 readval);
698 else
699 ret = ad_sd_write_reg(&st->sd, reg, ad7124_reg_size[reg],
700 writeval);
701
702 return ret;
703 }
704
705 static IIO_CONST_ATTR(in_voltage_scale_available,
706 "0.000001164 0.000002328 0.000004656 0.000009313 0.000018626 0.000037252 0.000074505 0.000149011 0.000298023");
707
708 static struct attribute *ad7124_attributes[] = {
709 &iio_const_attr_in_voltage_scale_available.dev_attr.attr,
710 NULL,
711 };
712
713 static const struct attribute_group ad7124_attrs_group = {
714 .attrs = ad7124_attributes,
715 };
716
ad7124_update_scan_mode(struct iio_dev * indio_dev,const unsigned long * scan_mask)717 static int ad7124_update_scan_mode(struct iio_dev *indio_dev,
718 const unsigned long *scan_mask)
719 {
720 struct ad7124_state *st = iio_priv(indio_dev);
721 bool bit_set;
722 int ret;
723 int i;
724
725 mutex_lock(&st->cfgs_lock);
726 for (i = 0; i < st->num_channels; i++) {
727 bit_set = test_bit(i, scan_mask);
728 if (bit_set)
729 ret = __ad7124_set_channel(&st->sd, i);
730 else
731 ret = ad7124_spi_write_mask(st, AD7124_CHANNEL(i), AD7124_CHANNEL_EN_MSK,
732 0, 2);
733 if (ret < 0) {
734 mutex_unlock(&st->cfgs_lock);
735
736 return ret;
737 }
738 }
739
740 mutex_unlock(&st->cfgs_lock);
741
742 return 0;
743 }
744
745 static const struct iio_info ad7124_info = {
746 .read_raw = ad7124_read_raw,
747 .write_raw = ad7124_write_raw,
748 .debugfs_reg_access = &ad7124_reg_access,
749 .validate_trigger = ad_sd_validate_trigger,
750 .update_scan_mode = ad7124_update_scan_mode,
751 .attrs = &ad7124_attrs_group,
752 };
753
ad7124_soft_reset(struct ad7124_state * st)754 static int ad7124_soft_reset(struct ad7124_state *st)
755 {
756 unsigned int readval, timeout;
757 int ret;
758
759 ret = ad_sd_reset(&st->sd, 64);
760 if (ret < 0)
761 return ret;
762
763 fsleep(200);
764 timeout = 100;
765 do {
766 ret = ad_sd_read_reg(&st->sd, AD7124_STATUS, 1, &readval);
767 if (ret < 0)
768 return ret;
769
770 if (!(readval & AD7124_STATUS_POR_FLAG_MSK))
771 return 0;
772
773 /* The AD7124 requires typically 2ms to power up and settle */
774 usleep_range(100, 2000);
775 } while (--timeout);
776
777 dev_err(&st->sd.spi->dev, "Soft reset failed\n");
778
779 return -EIO;
780 }
781
ad7124_check_chip_id(struct ad7124_state * st)782 static int ad7124_check_chip_id(struct ad7124_state *st)
783 {
784 unsigned int readval, chip_id, silicon_rev;
785 int ret;
786
787 ret = ad_sd_read_reg(&st->sd, AD7124_ID, 1, &readval);
788 if (ret < 0)
789 return ret;
790
791 chip_id = AD7124_DEVICE_ID_GET(readval);
792 silicon_rev = AD7124_SILICON_REV_GET(readval);
793
794 if (chip_id != st->chip_info->chip_id) {
795 dev_err(&st->sd.spi->dev,
796 "Chip ID mismatch: expected %u, got %u\n",
797 st->chip_info->chip_id, chip_id);
798 return -ENODEV;
799 }
800
801 if (silicon_rev == 0) {
802 dev_err(&st->sd.spi->dev,
803 "Silicon revision empty. Chip may not be present\n");
804 return -ENODEV;
805 }
806
807 return 0;
808 }
809
ad7124_parse_channel_config(struct iio_dev * indio_dev,struct device * dev)810 static int ad7124_parse_channel_config(struct iio_dev *indio_dev,
811 struct device *dev)
812 {
813 struct ad7124_state *st = iio_priv(indio_dev);
814 struct ad7124_channel_config *cfg;
815 struct ad7124_channel *channels;
816 struct iio_chan_spec *chan;
817 unsigned int ain[2], channel = 0, tmp;
818 int ret;
819
820 st->num_channels = device_get_child_node_count(dev);
821 if (!st->num_channels)
822 return dev_err_probe(dev, -ENODEV, "no channel children\n");
823
824 chan = devm_kcalloc(indio_dev->dev.parent, st->num_channels,
825 sizeof(*chan), GFP_KERNEL);
826 if (!chan)
827 return -ENOMEM;
828
829 channels = devm_kcalloc(indio_dev->dev.parent, st->num_channels, sizeof(*channels),
830 GFP_KERNEL);
831 if (!channels)
832 return -ENOMEM;
833
834 indio_dev->channels = chan;
835 indio_dev->num_channels = st->num_channels;
836 st->channels = channels;
837
838 device_for_each_child_node_scoped(dev, child) {
839 ret = fwnode_property_read_u32(child, "reg", &channel);
840 if (ret)
841 return ret;
842
843 if (channel >= indio_dev->num_channels)
844 return dev_err_probe(dev, -EINVAL,
845 "Channel index >= number of channels\n");
846
847 ret = fwnode_property_read_u32_array(child, "diff-channels",
848 ain, 2);
849 if (ret)
850 return ret;
851
852 st->channels[channel].nr = channel;
853 st->channels[channel].ain = AD7124_CHANNEL_AINP(ain[0]) |
854 AD7124_CHANNEL_AINM(ain[1]);
855
856 cfg = &st->channels[channel].cfg;
857 cfg->bipolar = fwnode_property_read_bool(child, "bipolar");
858
859 ret = fwnode_property_read_u32(child, "adi,reference-select", &tmp);
860 if (ret)
861 cfg->refsel = AD7124_INT_REF;
862 else
863 cfg->refsel = tmp;
864
865 cfg->buf_positive =
866 fwnode_property_read_bool(child, "adi,buffered-positive");
867 cfg->buf_negative =
868 fwnode_property_read_bool(child, "adi,buffered-negative");
869
870 chan[channel] = ad7124_channel_template;
871 chan[channel].address = channel;
872 chan[channel].scan_index = channel;
873 chan[channel].channel = ain[0];
874 chan[channel].channel2 = ain[1];
875 }
876
877 return 0;
878 }
879
ad7124_setup(struct ad7124_state * st)880 static int ad7124_setup(struct ad7124_state *st)
881 {
882 unsigned int fclk, power_mode;
883 int i, ret;
884
885 fclk = clk_get_rate(st->mclk);
886 if (!fclk)
887 return -EINVAL;
888
889 /* The power mode changes the master clock frequency */
890 power_mode = ad7124_find_closest_match(ad7124_master_clk_freq_hz,
891 ARRAY_SIZE(ad7124_master_clk_freq_hz),
892 fclk);
893 if (fclk != ad7124_master_clk_freq_hz[power_mode]) {
894 ret = clk_set_rate(st->mclk, fclk);
895 if (ret)
896 return ret;
897 }
898
899 /* Set the power mode */
900 st->adc_control &= ~AD7124_ADC_CTRL_PWR_MSK;
901 st->adc_control |= AD7124_ADC_CTRL_PWR(power_mode);
902
903 st->adc_control &= ~AD7124_ADC_CTRL_MODE_MSK;
904 st->adc_control |= AD7124_ADC_CTRL_MODE(AD_SD_MODE_IDLE);
905
906 mutex_init(&st->cfgs_lock);
907 INIT_KFIFO(st->live_cfgs_fifo);
908 for (i = 0; i < st->num_channels; i++) {
909
910 ret = ad7124_init_config_vref(st, &st->channels[i].cfg);
911 if (ret < 0)
912 return ret;
913
914 /*
915 * 9.38 SPS is the minimum output data rate supported
916 * regardless of the selected power mode. Round it up to 10 and
917 * set all channels to this default value.
918 */
919 ad7124_set_channel_odr(st, i, 10);
920 }
921
922 ret = ad_sd_write_reg(&st->sd, AD7124_ADC_CONTROL, 2, st->adc_control);
923 if (ret < 0)
924 return ret;
925
926 return ret;
927 }
928
ad7124_reg_disable(void * r)929 static void ad7124_reg_disable(void *r)
930 {
931 regulator_disable(r);
932 }
933
ad7124_probe(struct spi_device * spi)934 static int ad7124_probe(struct spi_device *spi)
935 {
936 const struct ad7124_chip_info *info;
937 struct ad7124_state *st;
938 struct iio_dev *indio_dev;
939 int i, ret;
940
941 info = spi_get_device_match_data(spi);
942 if (!info)
943 return -ENODEV;
944
945 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
946 if (!indio_dev)
947 return -ENOMEM;
948
949 st = iio_priv(indio_dev);
950
951 st->chip_info = info;
952
953 indio_dev->name = st->chip_info->name;
954 indio_dev->modes = INDIO_DIRECT_MODE;
955 indio_dev->info = &ad7124_info;
956
957 ret = ad_sd_init(&st->sd, indio_dev, spi, &ad7124_sigma_delta_info);
958 if (ret < 0)
959 return ret;
960
961 ret = ad7124_parse_channel_config(indio_dev, &spi->dev);
962 if (ret < 0)
963 return ret;
964
965 for (i = 0; i < ARRAY_SIZE(st->vref); i++) {
966 if (i == AD7124_INT_REF)
967 continue;
968
969 st->vref[i] = devm_regulator_get_optional(&spi->dev,
970 ad7124_ref_names[i]);
971 if (PTR_ERR(st->vref[i]) == -ENODEV)
972 continue;
973 else if (IS_ERR(st->vref[i]))
974 return PTR_ERR(st->vref[i]);
975
976 ret = regulator_enable(st->vref[i]);
977 if (ret)
978 return ret;
979
980 ret = devm_add_action_or_reset(&spi->dev, ad7124_reg_disable,
981 st->vref[i]);
982 if (ret)
983 return ret;
984 }
985
986 st->mclk = devm_clk_get_enabled(&spi->dev, "mclk");
987 if (IS_ERR(st->mclk))
988 return PTR_ERR(st->mclk);
989
990 ret = ad7124_soft_reset(st);
991 if (ret < 0)
992 return ret;
993
994 ret = ad7124_check_chip_id(st);
995 if (ret)
996 return ret;
997
998 ret = ad7124_setup(st);
999 if (ret < 0)
1000 return ret;
1001
1002 ret = devm_ad_sd_setup_buffer_and_trigger(&spi->dev, indio_dev);
1003 if (ret < 0)
1004 return ret;
1005
1006 return devm_iio_device_register(&spi->dev, indio_dev);
1007
1008 }
1009
1010 static const struct of_device_id ad7124_of_match[] = {
1011 { .compatible = "adi,ad7124-4",
1012 .data = &ad7124_chip_info_tbl[ID_AD7124_4], },
1013 { .compatible = "adi,ad7124-8",
1014 .data = &ad7124_chip_info_tbl[ID_AD7124_8], },
1015 { }
1016 };
1017 MODULE_DEVICE_TABLE(of, ad7124_of_match);
1018
1019 static const struct spi_device_id ad71124_ids[] = {
1020 { "ad7124-4", (kernel_ulong_t)&ad7124_chip_info_tbl[ID_AD7124_4] },
1021 { "ad7124-8", (kernel_ulong_t)&ad7124_chip_info_tbl[ID_AD7124_8] },
1022 { }
1023 };
1024 MODULE_DEVICE_TABLE(spi, ad71124_ids);
1025
1026 static struct spi_driver ad71124_driver = {
1027 .driver = {
1028 .name = "ad7124",
1029 .of_match_table = ad7124_of_match,
1030 },
1031 .probe = ad7124_probe,
1032 .id_table = ad71124_ids,
1033 };
1034 module_spi_driver(ad71124_driver);
1035
1036 MODULE_AUTHOR("Stefan Popa <stefan.popa@analog.com>");
1037 MODULE_DESCRIPTION("Analog Devices AD7124 SPI driver");
1038 MODULE_LICENSE("GPL");
1039 MODULE_IMPORT_NS("IIO_AD_SIGMA_DELTA");
1040