xref: /linux/drivers/iio/addac/ad74413r.c (revision be239684b18e1cdcafcf8c7face4a2f562c745ad)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2021 Analog Devices, Inc.
4  * Author: Cosmin Tanislav <cosmin.tanislav@analog.com>
5  */
6 
7 #include <asm/unaligned.h>
8 #include <linux/bitfield.h>
9 #include <linux/crc8.h>
10 #include <linux/device.h>
11 #include <linux/err.h>
12 #include <linux/gpio/driver.h>
13 #include <linux/iio/buffer.h>
14 #include <linux/iio/iio.h>
15 #include <linux/iio/sysfs.h>
16 #include <linux/iio/trigger.h>
17 #include <linux/iio/trigger_consumer.h>
18 #include <linux/iio/triggered_buffer.h>
19 #include <linux/interrupt.h>
20 #include <linux/mod_devicetable.h>
21 #include <linux/property.h>
22 #include <linux/regmap.h>
23 #include <linux/regulator/consumer.h>
24 #include <linux/spi/spi.h>
25 
26 #include <dt-bindings/iio/addac/adi,ad74413r.h>
27 
28 #define AD74413R_CRC_POLYNOMIAL	0x7
29 DECLARE_CRC8_TABLE(ad74413r_crc8_table);
30 
31 #define AD74413R_CHANNEL_MAX	4
32 
33 #define AD74413R_FRAME_SIZE	4
34 
35 struct ad74413r_chip_info {
36 	const char	*name;
37 	bool		hart_support;
38 };
39 
40 struct ad74413r_channel_config {
41 	u32		func;
42 	u32		drive_strength;
43 	bool		gpo_comparator;
44 	bool		initialized;
45 };
46 
47 struct ad74413r_channels {
48 	struct iio_chan_spec	*channels;
49 	unsigned int		num_channels;
50 };
51 
52 struct ad74413r_state {
53 	struct ad74413r_channel_config	channel_configs[AD74413R_CHANNEL_MAX];
54 	unsigned int			gpo_gpio_offsets[AD74413R_CHANNEL_MAX];
55 	unsigned int			comp_gpio_offsets[AD74413R_CHANNEL_MAX];
56 	struct gpio_chip		gpo_gpiochip;
57 	struct gpio_chip		comp_gpiochip;
58 	struct completion		adc_data_completion;
59 	unsigned int			num_gpo_gpios;
60 	unsigned int			num_comparator_gpios;
61 	u32				sense_resistor_ohms;
62 
63 	/*
64 	 * Synchronize consecutive operations when doing a one-shot
65 	 * conversion and when updating the ADC samples SPI message.
66 	 */
67 	struct mutex			lock;
68 
69 	const struct ad74413r_chip_info	*chip_info;
70 	struct spi_device		*spi;
71 	struct regulator		*refin_reg;
72 	struct regmap			*regmap;
73 	struct device			*dev;
74 	struct iio_trigger		*trig;
75 	struct gpio_desc		*reset_gpio;
76 
77 	size_t			adc_active_channels;
78 	struct spi_message	adc_samples_msg;
79 	struct spi_transfer	adc_samples_xfer[AD74413R_CHANNEL_MAX + 1];
80 
81 	/*
82 	 * DMA (thus cache coherency maintenance) may require the
83 	 * transfer buffers to live in their own cache lines.
84 	 */
85 	struct {
86 		u8 rx_buf[AD74413R_FRAME_SIZE * AD74413R_CHANNEL_MAX];
87 		s64 timestamp;
88 	} adc_samples_buf __aligned(IIO_DMA_MINALIGN);
89 
90 	u8	adc_samples_tx_buf[AD74413R_FRAME_SIZE * AD74413R_CHANNEL_MAX];
91 	u8	reg_tx_buf[AD74413R_FRAME_SIZE];
92 	u8	reg_rx_buf[AD74413R_FRAME_SIZE];
93 };
94 
95 #define AD74413R_REG_NOP		0x00
96 
97 #define AD74413R_REG_CH_FUNC_SETUP_X(x)	(0x01 + (x))
98 #define AD74413R_CH_FUNC_SETUP_MASK	GENMASK(3, 0)
99 
100 #define AD74413R_REG_ADC_CONFIG_X(x)		(0x05 + (x))
101 #define AD74413R_ADC_CONFIG_RANGE_MASK		GENMASK(7, 5)
102 #define AD74413R_ADC_CONFIG_REJECTION_MASK	GENMASK(4, 3)
103 #define AD74413R_ADC_CONFIG_CH_200K_TO_GND	BIT(2)
104 #define AD74413R_ADC_RANGE_10V			0b000
105 #define AD74413R_ADC_RANGE_2P5V_EXT_POW		0b001
106 #define AD74413R_ADC_RANGE_2P5V_INT_POW		0b010
107 #define AD74413R_ADC_RANGE_5V_BI_DIR		0b011
108 #define AD74413R_ADC_REJECTION_50_60		0b00
109 #define AD74413R_ADC_REJECTION_NONE		0b01
110 #define AD74413R_ADC_REJECTION_50_60_HART	0b10
111 #define AD74413R_ADC_REJECTION_HART		0b11
112 
113 #define AD74413R_REG_DIN_CONFIG_X(x)	(0x09 + (x))
114 #define AD74413R_DIN_DEBOUNCE_MASK	GENMASK(4, 0)
115 #define AD74413R_DIN_DEBOUNCE_LEN	BIT(5)
116 #define AD74413R_DIN_SINK_MASK		GENMASK(9, 6)
117 
118 #define AD74413R_REG_DAC_CODE_X(x)	(0x16 + (x))
119 #define AD74413R_DAC_CODE_MAX		GENMASK(12, 0)
120 #define AD74413R_DAC_VOLTAGE_MAX	11000
121 
122 #define AD74413R_REG_GPO_PAR_DATA		0x0d
123 #define AD74413R_REG_GPO_CONFIG_X(x)		(0x0e + (x))
124 #define AD74413R_GPO_CONFIG_DATA_MASK	BIT(3)
125 #define AD74413R_GPO_CONFIG_SELECT_MASK		GENMASK(2, 0)
126 #define AD74413R_GPO_CONFIG_100K_PULL_DOWN	0b000
127 #define AD74413R_GPO_CONFIG_LOGIC		0b001
128 #define AD74413R_GPO_CONFIG_LOGIC_PARALLEL	0b010
129 #define AD74413R_GPO_CONFIG_COMPARATOR		0b011
130 #define AD74413R_GPO_CONFIG_HIGH_IMPEDANCE	0b100
131 
132 #define AD74413R_REG_ADC_CONV_CTRL	0x23
133 #define AD74413R_CONV_SEQ_MASK		GENMASK(9, 8)
134 #define AD74413R_CONV_SEQ_ON		0b00
135 #define AD74413R_CONV_SEQ_SINGLE	0b01
136 #define AD74413R_CONV_SEQ_CONTINUOUS	0b10
137 #define AD74413R_CONV_SEQ_OFF		0b11
138 #define AD74413R_CH_EN_MASK(x)		BIT(x)
139 
140 #define AD74413R_REG_DIN_COMP_OUT		0x25
141 
142 #define AD74413R_REG_ADC_RESULT_X(x)	(0x26 + (x))
143 #define AD74413R_ADC_RESULT_MAX		GENMASK(15, 0)
144 
145 #define AD74413R_REG_READ_SELECT	0x41
146 
147 #define AD74413R_REG_CMD_KEY		0x44
148 #define AD74413R_CMD_KEY_LDAC		0x953a
149 #define AD74413R_CMD_KEY_RESET1		0x15fa
150 #define AD74413R_CMD_KEY_RESET2		0xaf51
151 
152 static const int ad74413r_adc_sampling_rates[] = {
153 	20, 4800,
154 };
155 
156 static const int ad74413r_adc_sampling_rates_hart[] = {
157 	10, 20, 1200, 4800,
158 };
159 
160 static int ad74413r_crc(u8 *buf)
161 {
162 	return crc8(ad74413r_crc8_table, buf, 3, 0);
163 }
164 
165 static void ad74413r_format_reg_write(u8 reg, u16 val, u8 *buf)
166 {
167 	buf[0] = reg;
168 	put_unaligned_be16(val, &buf[1]);
169 	buf[3] = ad74413r_crc(buf);
170 }
171 
172 static int ad74413r_reg_write(void *context, unsigned int reg, unsigned int val)
173 {
174 	struct ad74413r_state *st = context;
175 
176 	ad74413r_format_reg_write(reg, val, st->reg_tx_buf);
177 
178 	return spi_write(st->spi, st->reg_tx_buf, AD74413R_FRAME_SIZE);
179 }
180 
181 static int ad74413r_crc_check(struct ad74413r_state *st, u8 *buf)
182 {
183 	u8 expected_crc = ad74413r_crc(buf);
184 
185 	if (buf[3] != expected_crc) {
186 		dev_err(st->dev, "Bad CRC %02x for %02x%02x%02x\n",
187 			buf[3], buf[0], buf[1], buf[2]);
188 		return -EINVAL;
189 	}
190 
191 	return 0;
192 }
193 
194 static int ad74413r_reg_read(void *context, unsigned int reg, unsigned int *val)
195 {
196 	struct ad74413r_state *st = context;
197 	struct spi_transfer reg_read_xfer[] = {
198 		{
199 			.tx_buf = st->reg_tx_buf,
200 			.len = AD74413R_FRAME_SIZE,
201 			.cs_change = 1,
202 		},
203 		{
204 			.rx_buf = st->reg_rx_buf,
205 			.len = AD74413R_FRAME_SIZE,
206 		},
207 	};
208 	int ret;
209 
210 	ad74413r_format_reg_write(AD74413R_REG_READ_SELECT, reg,
211 				  st->reg_tx_buf);
212 
213 	ret = spi_sync_transfer(st->spi, reg_read_xfer,
214 				ARRAY_SIZE(reg_read_xfer));
215 	if (ret)
216 		return ret;
217 
218 	ret = ad74413r_crc_check(st, st->reg_rx_buf);
219 	if (ret)
220 		return ret;
221 
222 	*val = get_unaligned_be16(&st->reg_rx_buf[1]);
223 
224 	return 0;
225 }
226 
227 static const struct regmap_config ad74413r_regmap_config = {
228 	.reg_bits = 8,
229 	.val_bits = 16,
230 	.reg_read = ad74413r_reg_read,
231 	.reg_write = ad74413r_reg_write,
232 };
233 
234 static int ad74413r_set_gpo_config(struct ad74413r_state *st,
235 				   unsigned int offset, u8 mode)
236 {
237 	return regmap_update_bits(st->regmap, AD74413R_REG_GPO_CONFIG_X(offset),
238 				  AD74413R_GPO_CONFIG_SELECT_MASK, mode);
239 }
240 
241 static const unsigned int ad74413r_debounce_map[AD74413R_DIN_DEBOUNCE_LEN] = {
242 	0,     13,    18,    24,    32,    42,    56,    75,
243 	100,   130,   180,   240,   320,   420,   560,   750,
244 	1000,  1300,  1800,  2400,  3200,  4200,  5600,  7500,
245 	10000, 13000, 18000, 24000, 32000, 42000, 56000, 75000,
246 };
247 
248 static int ad74413r_set_comp_debounce(struct ad74413r_state *st,
249 				      unsigned int offset,
250 				      unsigned int debounce)
251 {
252 	unsigned int val = AD74413R_DIN_DEBOUNCE_LEN - 1;
253 	unsigned int i;
254 
255 	for (i = 0; i < AD74413R_DIN_DEBOUNCE_LEN; i++)
256 		if (debounce <= ad74413r_debounce_map[i]) {
257 			val = i;
258 			break;
259 		}
260 
261 	return regmap_update_bits(st->regmap,
262 				  AD74413R_REG_DIN_CONFIG_X(offset),
263 				  AD74413R_DIN_DEBOUNCE_MASK,
264 				  val);
265 }
266 
267 static int ad74413r_set_comp_drive_strength(struct ad74413r_state *st,
268 					    unsigned int offset,
269 					    unsigned int strength)
270 {
271 	strength = min(strength, 1800U);
272 
273 	return regmap_update_bits(st->regmap, AD74413R_REG_DIN_CONFIG_X(offset),
274 				  AD74413R_DIN_SINK_MASK,
275 				  FIELD_PREP(AD74413R_DIN_SINK_MASK, strength / 120));
276 }
277 
278 
279 static void ad74413r_gpio_set(struct gpio_chip *chip,
280 			      unsigned int offset, int val)
281 {
282 	struct ad74413r_state *st = gpiochip_get_data(chip);
283 	unsigned int real_offset = st->gpo_gpio_offsets[offset];
284 	int ret;
285 
286 	ret = ad74413r_set_gpo_config(st, real_offset,
287 				      AD74413R_GPO_CONFIG_LOGIC);
288 	if (ret)
289 		return;
290 
291 	regmap_update_bits(st->regmap, AD74413R_REG_GPO_CONFIG_X(real_offset),
292 			   AD74413R_GPO_CONFIG_DATA_MASK,
293 			   val ? AD74413R_GPO_CONFIG_DATA_MASK : 0);
294 }
295 
296 static void ad74413r_gpio_set_multiple(struct gpio_chip *chip,
297 				       unsigned long *mask,
298 				       unsigned long *bits)
299 {
300 	struct ad74413r_state *st = gpiochip_get_data(chip);
301 	unsigned long real_mask = 0;
302 	unsigned long real_bits = 0;
303 	unsigned int offset;
304 	int ret;
305 
306 	for_each_set_bit(offset, mask, chip->ngpio) {
307 		unsigned int real_offset = st->gpo_gpio_offsets[offset];
308 
309 		ret = ad74413r_set_gpo_config(st, real_offset,
310 			AD74413R_GPO_CONFIG_LOGIC_PARALLEL);
311 		if (ret)
312 			return;
313 
314 		real_mask |= BIT(real_offset);
315 		if (*bits & offset)
316 			real_bits |= BIT(real_offset);
317 	}
318 
319 	regmap_update_bits(st->regmap, AD74413R_REG_GPO_PAR_DATA,
320 			   real_mask, real_bits);
321 }
322 
323 static int ad74413r_gpio_get(struct gpio_chip *chip, unsigned int offset)
324 {
325 	struct ad74413r_state *st = gpiochip_get_data(chip);
326 	unsigned int real_offset = st->comp_gpio_offsets[offset];
327 	unsigned int status;
328 	int ret;
329 
330 	ret = regmap_read(st->regmap, AD74413R_REG_DIN_COMP_OUT, &status);
331 	if (ret)
332 		return ret;
333 
334 	status &= BIT(real_offset);
335 
336 	return status ? 1 : 0;
337 }
338 
339 static int ad74413r_gpio_get_multiple(struct gpio_chip *chip,
340 				      unsigned long *mask,
341 				      unsigned long *bits)
342 {
343 	struct ad74413r_state *st = gpiochip_get_data(chip);
344 	unsigned int offset;
345 	unsigned int val;
346 	int ret;
347 
348 	ret = regmap_read(st->regmap, AD74413R_REG_DIN_COMP_OUT, &val);
349 	if (ret)
350 		return ret;
351 
352 	for_each_set_bit(offset, mask, chip->ngpio) {
353 		unsigned int real_offset = st->comp_gpio_offsets[offset];
354 
355 		__assign_bit(offset, bits, val & BIT(real_offset));
356 	}
357 
358 	return ret;
359 }
360 
361 static int ad74413r_gpio_get_gpo_direction(struct gpio_chip *chip,
362 					   unsigned int offset)
363 {
364 	return GPIO_LINE_DIRECTION_OUT;
365 }
366 
367 static int ad74413r_gpio_get_comp_direction(struct gpio_chip *chip,
368 					    unsigned int offset)
369 {
370 	return GPIO_LINE_DIRECTION_IN;
371 }
372 
373 static int ad74413r_gpio_set_gpo_config(struct gpio_chip *chip,
374 					unsigned int offset,
375 					unsigned long config)
376 {
377 	struct ad74413r_state *st = gpiochip_get_data(chip);
378 	unsigned int real_offset = st->gpo_gpio_offsets[offset];
379 
380 	switch (pinconf_to_config_param(config)) {
381 	case PIN_CONFIG_BIAS_PULL_DOWN:
382 		return ad74413r_set_gpo_config(st, real_offset,
383 			AD74413R_GPO_CONFIG_100K_PULL_DOWN);
384 	case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
385 		return ad74413r_set_gpo_config(st, real_offset,
386 			AD74413R_GPO_CONFIG_HIGH_IMPEDANCE);
387 	default:
388 		return -ENOTSUPP;
389 	}
390 }
391 
392 static int ad74413r_gpio_set_comp_config(struct gpio_chip *chip,
393 					 unsigned int offset,
394 					 unsigned long config)
395 {
396 	struct ad74413r_state *st = gpiochip_get_data(chip);
397 	unsigned int real_offset = st->comp_gpio_offsets[offset];
398 
399 	switch (pinconf_to_config_param(config)) {
400 	case PIN_CONFIG_INPUT_DEBOUNCE:
401 		return ad74413r_set_comp_debounce(st, real_offset,
402 			pinconf_to_config_argument(config));
403 	default:
404 		return -ENOTSUPP;
405 	}
406 }
407 
408 static int ad74413r_reset(struct ad74413r_state *st)
409 {
410 	int ret;
411 
412 	if (st->reset_gpio) {
413 		gpiod_set_value_cansleep(st->reset_gpio, 1);
414 		fsleep(50);
415 		gpiod_set_value_cansleep(st->reset_gpio, 0);
416 		return 0;
417 	}
418 
419 	ret = regmap_write(st->regmap, AD74413R_REG_CMD_KEY,
420 			   AD74413R_CMD_KEY_RESET1);
421 	if (ret)
422 		return ret;
423 
424 	return regmap_write(st->regmap, AD74413R_REG_CMD_KEY,
425 			    AD74413R_CMD_KEY_RESET2);
426 }
427 
428 static int ad74413r_set_channel_dac_code(struct ad74413r_state *st,
429 					 unsigned int channel, int dac_code)
430 {
431 	struct reg_sequence reg_seq[2] = {
432 		{ AD74413R_REG_DAC_CODE_X(channel), dac_code },
433 		{ AD74413R_REG_CMD_KEY, AD74413R_CMD_KEY_LDAC },
434 	};
435 
436 	return regmap_multi_reg_write(st->regmap, reg_seq, 2);
437 }
438 
439 static int ad74413r_set_channel_function(struct ad74413r_state *st,
440 					 unsigned int channel, u8 func)
441 {
442 	int ret;
443 
444 	ret = regmap_update_bits(st->regmap,
445 				 AD74413R_REG_CH_FUNC_SETUP_X(channel),
446 				 AD74413R_CH_FUNC_SETUP_MASK,
447 				 CH_FUNC_HIGH_IMPEDANCE);
448 	if (ret)
449 		return ret;
450 
451 	/* Set DAC code to 0 prior to changing channel function */
452 	ret = ad74413r_set_channel_dac_code(st, channel, 0);
453 	if (ret)
454 		return ret;
455 
456 	/* Delay required before transition to new desired mode */
457 	usleep_range(130, 150);
458 
459 	ret = regmap_update_bits(st->regmap,
460 				  AD74413R_REG_CH_FUNC_SETUP_X(channel),
461 				  AD74413R_CH_FUNC_SETUP_MASK, func);
462 	if (ret)
463 		return ret;
464 
465 	/* Delay required before updating the new DAC code */
466 	usleep_range(150, 170);
467 
468 	if (func == CH_FUNC_CURRENT_INPUT_LOOP_POWER)
469 		ret = regmap_set_bits(st->regmap,
470 				      AD74413R_REG_ADC_CONFIG_X(channel),
471 				      AD74413R_ADC_CONFIG_CH_200K_TO_GND);
472 
473 	return ret;
474 }
475 
476 static int ad74413r_set_adc_conv_seq(struct ad74413r_state *st,
477 				     unsigned int status)
478 {
479 	int ret;
480 
481 	/*
482 	 * These bits do not clear when a conversion completes.
483 	 * To enable a subsequent conversion, repeat the write.
484 	 */
485 	ret = regmap_write_bits(st->regmap, AD74413R_REG_ADC_CONV_CTRL,
486 				AD74413R_CONV_SEQ_MASK,
487 				FIELD_PREP(AD74413R_CONV_SEQ_MASK, status));
488 	if (ret)
489 		return ret;
490 
491 	/*
492 	 * Wait 100us before starting conversions.
493 	 */
494 	usleep_range(100, 120);
495 
496 	return 0;
497 }
498 
499 static int ad74413r_set_adc_channel_enable(struct ad74413r_state *st,
500 					   unsigned int channel,
501 					   bool status)
502 {
503 	return regmap_update_bits(st->regmap, AD74413R_REG_ADC_CONV_CTRL,
504 				  AD74413R_CH_EN_MASK(channel),
505 				  status ? AD74413R_CH_EN_MASK(channel) : 0);
506 }
507 
508 static int ad74413r_get_adc_range(struct ad74413r_state *st,
509 				  unsigned int channel,
510 				  unsigned int *val)
511 {
512 	int ret;
513 
514 	ret = regmap_read(st->regmap, AD74413R_REG_ADC_CONFIG_X(channel), val);
515 	if (ret)
516 		return ret;
517 
518 	*val = FIELD_GET(AD74413R_ADC_CONFIG_RANGE_MASK, *val);
519 
520 	return 0;
521 }
522 
523 static int ad74413r_get_adc_rejection(struct ad74413r_state *st,
524 				      unsigned int channel,
525 				      unsigned int *val)
526 {
527 	int ret;
528 
529 	ret = regmap_read(st->regmap, AD74413R_REG_ADC_CONFIG_X(channel), val);
530 	if (ret)
531 		return ret;
532 
533 	*val = FIELD_GET(AD74413R_ADC_CONFIG_REJECTION_MASK, *val);
534 
535 	return 0;
536 }
537 
538 static int ad74413r_set_adc_rejection(struct ad74413r_state *st,
539 				      unsigned int channel,
540 				      unsigned int val)
541 {
542 	return regmap_update_bits(st->regmap,
543 				  AD74413R_REG_ADC_CONFIG_X(channel),
544 				  AD74413R_ADC_CONFIG_REJECTION_MASK,
545 				  FIELD_PREP(AD74413R_ADC_CONFIG_REJECTION_MASK,
546 					     val));
547 }
548 
549 static int ad74413r_rejection_to_rate(struct ad74413r_state *st,
550 				      unsigned int rej, int *val)
551 {
552 	switch (rej) {
553 	case AD74413R_ADC_REJECTION_50_60:
554 		*val = 20;
555 		return 0;
556 	case AD74413R_ADC_REJECTION_NONE:
557 		*val = 4800;
558 		return 0;
559 	case AD74413R_ADC_REJECTION_50_60_HART:
560 		*val = 10;
561 		return 0;
562 	case AD74413R_ADC_REJECTION_HART:
563 		*val = 1200;
564 		return 0;
565 	default:
566 		dev_err(st->dev, "ADC rejection invalid\n");
567 		return -EINVAL;
568 	}
569 }
570 
571 static int ad74413r_rate_to_rejection(struct ad74413r_state *st,
572 				      int rate, unsigned int *val)
573 {
574 	switch (rate) {
575 	case 20:
576 		*val = AD74413R_ADC_REJECTION_50_60;
577 		return 0;
578 	case 4800:
579 		*val = AD74413R_ADC_REJECTION_NONE;
580 		return 0;
581 	case 10:
582 		*val = AD74413R_ADC_REJECTION_50_60_HART;
583 		return 0;
584 	case 1200:
585 		*val = AD74413R_ADC_REJECTION_HART;
586 		return 0;
587 	default:
588 		dev_err(st->dev, "ADC rate invalid\n");
589 		return -EINVAL;
590 	}
591 }
592 
593 static int ad74413r_range_to_voltage_range(struct ad74413r_state *st,
594 					   unsigned int range, int *val)
595 {
596 	switch (range) {
597 	case AD74413R_ADC_RANGE_10V:
598 		*val = 10000;
599 		return 0;
600 	case AD74413R_ADC_RANGE_2P5V_EXT_POW:
601 	case AD74413R_ADC_RANGE_2P5V_INT_POW:
602 		*val = 2500;
603 		return 0;
604 	case AD74413R_ADC_RANGE_5V_BI_DIR:
605 		*val = 5000;
606 		return 0;
607 	default:
608 		dev_err(st->dev, "ADC range invalid\n");
609 		return -EINVAL;
610 	}
611 }
612 
613 static int ad74413r_range_to_voltage_offset(struct ad74413r_state *st,
614 					    unsigned int range, int *val)
615 {
616 	switch (range) {
617 	case AD74413R_ADC_RANGE_10V:
618 	case AD74413R_ADC_RANGE_2P5V_EXT_POW:
619 		*val = 0;
620 		return 0;
621 	case AD74413R_ADC_RANGE_2P5V_INT_POW:
622 	case AD74413R_ADC_RANGE_5V_BI_DIR:
623 		*val = -2500;
624 		return 0;
625 	default:
626 		dev_err(st->dev, "ADC range invalid\n");
627 		return -EINVAL;
628 	}
629 }
630 
631 static int ad74413r_range_to_voltage_offset_raw(struct ad74413r_state *st,
632 						unsigned int range, int *val)
633 {
634 	switch (range) {
635 	case AD74413R_ADC_RANGE_10V:
636 	case AD74413R_ADC_RANGE_2P5V_EXT_POW:
637 		*val = 0;
638 		return 0;
639 	case AD74413R_ADC_RANGE_2P5V_INT_POW:
640 		*val = -((int)AD74413R_ADC_RESULT_MAX);
641 		return 0;
642 	case AD74413R_ADC_RANGE_5V_BI_DIR:
643 		*val = -((int)AD74413R_ADC_RESULT_MAX / 2);
644 		return 0;
645 	default:
646 		dev_err(st->dev, "ADC range invalid\n");
647 		return -EINVAL;
648 	}
649 }
650 
651 static int ad74413r_get_output_voltage_scale(struct ad74413r_state *st,
652 					     int *val, int *val2)
653 {
654 	*val = AD74413R_DAC_VOLTAGE_MAX;
655 	*val2 = AD74413R_DAC_CODE_MAX;
656 
657 	return IIO_VAL_FRACTIONAL;
658 }
659 
660 static int ad74413r_get_output_current_scale(struct ad74413r_state *st,
661 					     int *val, int *val2)
662 {
663 	*val = regulator_get_voltage(st->refin_reg);
664 	*val2 = st->sense_resistor_ohms * AD74413R_DAC_CODE_MAX * 1000;
665 
666 	return IIO_VAL_FRACTIONAL;
667 }
668 
669 static int ad74413r_get_input_voltage_scale(struct ad74413r_state *st,
670 					    unsigned int channel,
671 					    int *val, int *val2)
672 {
673 	unsigned int range;
674 	int ret;
675 
676 	ret = ad74413r_get_adc_range(st, channel, &range);
677 	if (ret)
678 		return ret;
679 
680 	ret = ad74413r_range_to_voltage_range(st, range, val);
681 	if (ret)
682 		return ret;
683 
684 	*val2 = AD74413R_ADC_RESULT_MAX;
685 
686 	return IIO_VAL_FRACTIONAL;
687 }
688 
689 static int ad74413r_get_input_voltage_offset(struct ad74413r_state *st,
690 					     unsigned int channel, int *val)
691 {
692 	unsigned int range;
693 	int ret;
694 
695 	ret = ad74413r_get_adc_range(st, channel, &range);
696 	if (ret)
697 		return ret;
698 
699 	ret = ad74413r_range_to_voltage_offset_raw(st, range, val);
700 	if (ret)
701 		return ret;
702 
703 	return IIO_VAL_INT;
704 }
705 
706 static int ad74413r_get_input_current_scale(struct ad74413r_state *st,
707 					    unsigned int channel, int *val,
708 					    int *val2)
709 {
710 	unsigned int range;
711 	int ret;
712 
713 	ret = ad74413r_get_adc_range(st, channel, &range);
714 	if (ret)
715 		return ret;
716 
717 	ret = ad74413r_range_to_voltage_range(st, range, val);
718 	if (ret)
719 		return ret;
720 
721 	*val2 = AD74413R_ADC_RESULT_MAX * st->sense_resistor_ohms;
722 
723 	return IIO_VAL_FRACTIONAL;
724 }
725 
726 static int ad74413r_get_input_current_offset(struct ad74413r_state *st,
727 					     unsigned int channel, int *val)
728 {
729 	unsigned int range;
730 	int voltage_range;
731 	int voltage_offset;
732 	int ret;
733 
734 	ret = ad74413r_get_adc_range(st, channel, &range);
735 	if (ret)
736 		return ret;
737 
738 	ret = ad74413r_range_to_voltage_range(st, range, &voltage_range);
739 	if (ret)
740 		return ret;
741 
742 	ret = ad74413r_range_to_voltage_offset(st, range, &voltage_offset);
743 	if (ret)
744 		return ret;
745 
746 	*val = voltage_offset * (int)AD74413R_ADC_RESULT_MAX / voltage_range;
747 
748 	return IIO_VAL_INT;
749 }
750 
751 static int ad74413r_get_adc_rate(struct ad74413r_state *st,
752 				 unsigned int channel, int *val)
753 {
754 	unsigned int rejection;
755 	int ret;
756 
757 	ret = ad74413r_get_adc_rejection(st, channel, &rejection);
758 	if (ret)
759 		return ret;
760 
761 	ret = ad74413r_rejection_to_rate(st, rejection, val);
762 	if (ret)
763 		return ret;
764 
765 	return IIO_VAL_INT;
766 }
767 
768 static int ad74413r_set_adc_rate(struct ad74413r_state *st,
769 				 unsigned int channel, int val)
770 {
771 	unsigned int rejection;
772 	int ret;
773 
774 	ret = ad74413r_rate_to_rejection(st, val, &rejection);
775 	if (ret)
776 		return ret;
777 
778 	return ad74413r_set_adc_rejection(st, channel, rejection);
779 }
780 
781 static irqreturn_t ad74413r_trigger_handler(int irq, void *p)
782 {
783 	struct iio_poll_func *pf = p;
784 	struct iio_dev *indio_dev = pf->indio_dev;
785 	struct ad74413r_state *st = iio_priv(indio_dev);
786 	u8 *rx_buf = st->adc_samples_buf.rx_buf;
787 	unsigned int i;
788 	int ret;
789 
790 	ret = spi_sync(st->spi, &st->adc_samples_msg);
791 	if (ret)
792 		goto out;
793 
794 	for (i = 0; i < st->adc_active_channels; i++)
795 		ad74413r_crc_check(st, &rx_buf[i * AD74413R_FRAME_SIZE]);
796 
797 	iio_push_to_buffers_with_timestamp(indio_dev, &st->adc_samples_buf,
798 					   iio_get_time_ns(indio_dev));
799 
800 out:
801 	iio_trigger_notify_done(indio_dev->trig);
802 
803 	return IRQ_HANDLED;
804 }
805 
806 static irqreturn_t ad74413r_adc_data_interrupt(int irq, void *data)
807 {
808 	struct iio_dev *indio_dev = data;
809 	struct ad74413r_state *st = iio_priv(indio_dev);
810 
811 	if (iio_buffer_enabled(indio_dev))
812 		iio_trigger_poll(st->trig);
813 	else
814 		complete(&st->adc_data_completion);
815 
816 	return IRQ_HANDLED;
817 }
818 
819 static int _ad74413r_get_single_adc_result(struct ad74413r_state *st,
820 					   unsigned int channel, int *val)
821 {
822 	unsigned int uval;
823 	int ret;
824 
825 	reinit_completion(&st->adc_data_completion);
826 
827 	ret = ad74413r_set_adc_channel_enable(st, channel, true);
828 	if (ret)
829 		return ret;
830 
831 	ret = ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_SINGLE);
832 	if (ret)
833 		return ret;
834 
835 	ret = wait_for_completion_timeout(&st->adc_data_completion,
836 					  msecs_to_jiffies(1000));
837 	if (!ret) {
838 		ret = -ETIMEDOUT;
839 		return ret;
840 	}
841 
842 	ret = regmap_read(st->regmap, AD74413R_REG_ADC_RESULT_X(channel),
843 			  &uval);
844 	if (ret)
845 		return ret;
846 
847 	ret = ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_OFF);
848 	if (ret)
849 		return ret;
850 
851 	ret = ad74413r_set_adc_channel_enable(st, channel, false);
852 	if (ret)
853 		return ret;
854 
855 	*val = uval;
856 
857 	return IIO_VAL_INT;
858 }
859 
860 static int ad74413r_get_single_adc_result(struct iio_dev *indio_dev,
861 					  unsigned int channel, int *val)
862 {
863 	struct ad74413r_state *st = iio_priv(indio_dev);
864 	int ret;
865 
866 	ret = iio_device_claim_direct_mode(indio_dev);
867 	if (ret)
868 		return ret;
869 
870 	mutex_lock(&st->lock);
871 	ret = _ad74413r_get_single_adc_result(st, channel, val);
872 	mutex_unlock(&st->lock);
873 
874 	iio_device_release_direct_mode(indio_dev);
875 
876 	return ret;
877 }
878 
879 static void ad74413r_adc_to_resistance_result(int adc_result, int *val)
880 {
881 	if (adc_result == AD74413R_ADC_RESULT_MAX)
882 		adc_result = AD74413R_ADC_RESULT_MAX - 1;
883 
884 	*val = DIV_ROUND_CLOSEST(adc_result * 2100,
885 				 AD74413R_ADC_RESULT_MAX - adc_result);
886 }
887 
888 static int ad74413r_update_scan_mode(struct iio_dev *indio_dev,
889 				     const unsigned long *active_scan_mask)
890 {
891 	struct ad74413r_state *st = iio_priv(indio_dev);
892 	struct spi_transfer *xfer = st->adc_samples_xfer;
893 	u8 *rx_buf = st->adc_samples_buf.rx_buf;
894 	u8 *tx_buf = st->adc_samples_tx_buf;
895 	unsigned int channel;
896 	int ret = -EINVAL;
897 
898 	mutex_lock(&st->lock);
899 
900 	spi_message_init(&st->adc_samples_msg);
901 	st->adc_active_channels = 0;
902 
903 	for_each_clear_bit(channel, active_scan_mask, AD74413R_CHANNEL_MAX) {
904 		ret = ad74413r_set_adc_channel_enable(st, channel, false);
905 		if (ret)
906 			goto out;
907 	}
908 
909 	if (*active_scan_mask == 0)
910 		goto out;
911 
912 	/*
913 	 * The read select register is used to select which register's value
914 	 * will be sent by the slave on the next SPI frame.
915 	 *
916 	 * Create an SPI message that, on each step, writes to the read select
917 	 * register to select the ADC result of the next enabled channel, and
918 	 * reads the ADC result of the previous enabled channel.
919 	 *
920 	 * Example:
921 	 * W: [WCH1] [WCH2] [WCH2] [WCH3] [    ]
922 	 * R: [    ] [RCH1] [RCH2] [RCH3] [RCH4]
923 	 */
924 
925 	for_each_set_bit(channel, active_scan_mask, AD74413R_CHANNEL_MAX) {
926 		ret = ad74413r_set_adc_channel_enable(st, channel, true);
927 		if (ret)
928 			goto out;
929 
930 		st->adc_active_channels++;
931 
932 		if (xfer == st->adc_samples_xfer)
933 			xfer->rx_buf = NULL;
934 		else
935 			xfer->rx_buf = rx_buf;
936 
937 		xfer->tx_buf = tx_buf;
938 		xfer->len = AD74413R_FRAME_SIZE;
939 		xfer->cs_change = 1;
940 
941 		ad74413r_format_reg_write(AD74413R_REG_READ_SELECT,
942 					  AD74413R_REG_ADC_RESULT_X(channel),
943 					  tx_buf);
944 
945 		spi_message_add_tail(xfer, &st->adc_samples_msg);
946 
947 		tx_buf += AD74413R_FRAME_SIZE;
948 		if (xfer != st->adc_samples_xfer)
949 			rx_buf += AD74413R_FRAME_SIZE;
950 		xfer++;
951 	}
952 
953 	xfer->rx_buf = rx_buf;
954 	xfer->tx_buf = NULL;
955 	xfer->len = AD74413R_FRAME_SIZE;
956 	xfer->cs_change = 0;
957 
958 	spi_message_add_tail(xfer, &st->adc_samples_msg);
959 
960 out:
961 	mutex_unlock(&st->lock);
962 
963 	return ret;
964 }
965 
966 static int ad74413r_buffer_postenable(struct iio_dev *indio_dev)
967 {
968 	struct ad74413r_state *st = iio_priv(indio_dev);
969 
970 	return ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_CONTINUOUS);
971 }
972 
973 static int ad74413r_buffer_predisable(struct iio_dev *indio_dev)
974 {
975 	struct ad74413r_state *st = iio_priv(indio_dev);
976 
977 	return ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_OFF);
978 }
979 
980 static int ad74413r_read_raw(struct iio_dev *indio_dev,
981 			     struct iio_chan_spec const *chan,
982 			     int *val, int *val2, long info)
983 {
984 	struct ad74413r_state *st = iio_priv(indio_dev);
985 
986 	switch (info) {
987 	case IIO_CHAN_INFO_SCALE:
988 		switch (chan->type) {
989 		case IIO_VOLTAGE:
990 			if (chan->output)
991 				return ad74413r_get_output_voltage_scale(st,
992 					val, val2);
993 			else
994 				return ad74413r_get_input_voltage_scale(st,
995 					chan->channel, val, val2);
996 		case IIO_CURRENT:
997 			if (chan->output)
998 				return ad74413r_get_output_current_scale(st,
999 					val, val2);
1000 			else
1001 				return ad74413r_get_input_current_scale(st,
1002 					chan->channel, val, val2);
1003 		default:
1004 			return -EINVAL;
1005 		}
1006 	case IIO_CHAN_INFO_OFFSET:
1007 		switch (chan->type) {
1008 		case IIO_VOLTAGE:
1009 			return ad74413r_get_input_voltage_offset(st,
1010 				chan->channel, val);
1011 		case IIO_CURRENT:
1012 			return ad74413r_get_input_current_offset(st,
1013 				chan->channel, val);
1014 		default:
1015 			return -EINVAL;
1016 		}
1017 	case IIO_CHAN_INFO_RAW:
1018 		if (chan->output)
1019 			return -EINVAL;
1020 
1021 		return ad74413r_get_single_adc_result(indio_dev, chan->channel,
1022 						      val);
1023 	case IIO_CHAN_INFO_PROCESSED: {
1024 		int ret;
1025 
1026 		ret = ad74413r_get_single_adc_result(indio_dev, chan->channel,
1027 						     val);
1028 		if (ret < 0)
1029 			return ret;
1030 
1031 		ad74413r_adc_to_resistance_result(*val, val);
1032 
1033 		return ret;
1034 	}
1035 	case IIO_CHAN_INFO_SAMP_FREQ:
1036 		return ad74413r_get_adc_rate(st, chan->channel, val);
1037 	default:
1038 		return -EINVAL;
1039 	}
1040 }
1041 
1042 static int ad74413r_write_raw(struct iio_dev *indio_dev,
1043 			      struct iio_chan_spec const *chan,
1044 			      int val, int val2, long info)
1045 {
1046 	struct ad74413r_state *st = iio_priv(indio_dev);
1047 
1048 	switch (info) {
1049 	case IIO_CHAN_INFO_RAW:
1050 		if (!chan->output)
1051 			return -EINVAL;
1052 
1053 		if (val < 0 || val > AD74413R_DAC_CODE_MAX) {
1054 			dev_err(st->dev, "Invalid DAC code\n");
1055 			return -EINVAL;
1056 		}
1057 
1058 		return ad74413r_set_channel_dac_code(st, chan->channel, val);
1059 	case IIO_CHAN_INFO_SAMP_FREQ:
1060 		return ad74413r_set_adc_rate(st, chan->channel, val);
1061 	default:
1062 		return -EINVAL;
1063 	}
1064 }
1065 
1066 static int ad74413r_read_avail(struct iio_dev *indio_dev,
1067 			       struct iio_chan_spec const *chan,
1068 			       const int **vals, int *type, int *length,
1069 			       long info)
1070 {
1071 	struct ad74413r_state *st = iio_priv(indio_dev);
1072 
1073 	switch (info) {
1074 	case IIO_CHAN_INFO_SAMP_FREQ:
1075 		if (st->chip_info->hart_support) {
1076 			*vals = ad74413r_adc_sampling_rates_hart;
1077 			*length = ARRAY_SIZE(ad74413r_adc_sampling_rates_hart);
1078 		} else {
1079 			*vals = ad74413r_adc_sampling_rates;
1080 			*length = ARRAY_SIZE(ad74413r_adc_sampling_rates);
1081 		}
1082 		*type = IIO_VAL_INT;
1083 		return IIO_AVAIL_LIST;
1084 	default:
1085 		return -EINVAL;
1086 	}
1087 }
1088 
1089 static const struct iio_buffer_setup_ops ad74413r_buffer_ops = {
1090 	.postenable = &ad74413r_buffer_postenable,
1091 	.predisable = &ad74413r_buffer_predisable,
1092 };
1093 
1094 static const struct iio_trigger_ops ad74413r_trigger_ops = {
1095 	.validate_device = iio_trigger_validate_own_device,
1096 };
1097 
1098 static const struct iio_info ad74413r_info = {
1099 	.read_raw = &ad74413r_read_raw,
1100 	.write_raw = &ad74413r_write_raw,
1101 	.read_avail = &ad74413r_read_avail,
1102 	.update_scan_mode = &ad74413r_update_scan_mode,
1103 };
1104 
1105 #define AD74413R_DAC_CHANNEL(_type, extra_mask_separate)		\
1106 	{								\
1107 		.type = (_type),					\
1108 		.indexed = 1,						\
1109 		.output = 1,						\
1110 		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)		\
1111 				      | (extra_mask_separate),		\
1112 	}
1113 
1114 #define AD74413R_ADC_CHANNEL(_type, extra_mask_separate)		\
1115 	{								\
1116 		.type = (_type),					\
1117 		.indexed = 1,						\
1118 		.output = 0,						\
1119 		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW)		\
1120 				      | BIT(IIO_CHAN_INFO_SAMP_FREQ)	\
1121 				      | (extra_mask_separate),		\
1122 		.info_mask_separate_available =				\
1123 					BIT(IIO_CHAN_INFO_SAMP_FREQ),	\
1124 		.scan_type = {						\
1125 			.sign = 'u',					\
1126 			.realbits = 16,					\
1127 			.storagebits = 32,				\
1128 			.shift = 8,					\
1129 			.endianness = IIO_BE,				\
1130 		},							\
1131 	}
1132 
1133 #define AD74413R_ADC_VOLTAGE_CHANNEL					\
1134 	AD74413R_ADC_CHANNEL(IIO_VOLTAGE, BIT(IIO_CHAN_INFO_SCALE)	\
1135 			     | BIT(IIO_CHAN_INFO_OFFSET))
1136 
1137 #define AD74413R_ADC_CURRENT_CHANNEL					\
1138 	AD74413R_ADC_CHANNEL(IIO_CURRENT,  BIT(IIO_CHAN_INFO_SCALE)	\
1139 			     | BIT(IIO_CHAN_INFO_OFFSET))
1140 
1141 static struct iio_chan_spec ad74413r_voltage_output_channels[] = {
1142 	AD74413R_DAC_CHANNEL(IIO_VOLTAGE, BIT(IIO_CHAN_INFO_SCALE)),
1143 	AD74413R_ADC_CURRENT_CHANNEL,
1144 };
1145 
1146 static struct iio_chan_spec ad74413r_current_output_channels[] = {
1147 	AD74413R_DAC_CHANNEL(IIO_CURRENT, BIT(IIO_CHAN_INFO_SCALE)),
1148 	AD74413R_ADC_VOLTAGE_CHANNEL,
1149 };
1150 
1151 static struct iio_chan_spec ad74413r_voltage_input_channels[] = {
1152 	AD74413R_ADC_VOLTAGE_CHANNEL,
1153 };
1154 
1155 static struct iio_chan_spec ad74413r_current_input_channels[] = {
1156 	AD74413R_ADC_CURRENT_CHANNEL,
1157 };
1158 
1159 static struct iio_chan_spec ad74413r_current_input_loop_channels[] = {
1160 	AD74413R_DAC_CHANNEL(IIO_CURRENT, BIT(IIO_CHAN_INFO_SCALE)),
1161 	AD74413R_ADC_CURRENT_CHANNEL,
1162 };
1163 
1164 static struct iio_chan_spec ad74413r_resistance_input_channels[] = {
1165 	AD74413R_ADC_CHANNEL(IIO_RESISTANCE, BIT(IIO_CHAN_INFO_PROCESSED)),
1166 };
1167 
1168 static struct iio_chan_spec ad74413r_digital_input_channels[] = {
1169 	AD74413R_ADC_VOLTAGE_CHANNEL,
1170 };
1171 
1172 #define _AD74413R_CHANNELS(_channels)			\
1173 	{						\
1174 		.channels = _channels,			\
1175 		.num_channels = ARRAY_SIZE(_channels),	\
1176 	}
1177 
1178 #define AD74413R_CHANNELS(name) \
1179 	_AD74413R_CHANNELS(ad74413r_ ## name ## _channels)
1180 
1181 static const struct ad74413r_channels ad74413r_channels_map[] = {
1182 	[CH_FUNC_HIGH_IMPEDANCE] = AD74413R_CHANNELS(voltage_input),
1183 	[CH_FUNC_VOLTAGE_OUTPUT] = AD74413R_CHANNELS(voltage_output),
1184 	[CH_FUNC_CURRENT_OUTPUT] = AD74413R_CHANNELS(current_output),
1185 	[CH_FUNC_VOLTAGE_INPUT] = AD74413R_CHANNELS(voltage_input),
1186 	[CH_FUNC_CURRENT_INPUT_EXT_POWER] = AD74413R_CHANNELS(current_input),
1187 	[CH_FUNC_CURRENT_INPUT_LOOP_POWER] = AD74413R_CHANNELS(current_input_loop),
1188 	[CH_FUNC_RESISTANCE_INPUT] = AD74413R_CHANNELS(resistance_input),
1189 	[CH_FUNC_DIGITAL_INPUT_LOGIC] = AD74413R_CHANNELS(digital_input),
1190 	[CH_FUNC_DIGITAL_INPUT_LOOP_POWER] = AD74413R_CHANNELS(digital_input),
1191 	[CH_FUNC_CURRENT_INPUT_EXT_POWER_HART] = AD74413R_CHANNELS(current_input),
1192 	[CH_FUNC_CURRENT_INPUT_LOOP_POWER_HART] = AD74413R_CHANNELS(current_input),
1193 };
1194 
1195 static int ad74413r_parse_channel_config(struct iio_dev *indio_dev,
1196 					 struct fwnode_handle *channel_node)
1197 {
1198 	struct ad74413r_state *st = iio_priv(indio_dev);
1199 	struct ad74413r_channel_config *config;
1200 	u32 index;
1201 	int ret;
1202 
1203 	ret = fwnode_property_read_u32(channel_node, "reg", &index);
1204 	if (ret) {
1205 		dev_err(st->dev, "Failed to read channel reg: %d\n", ret);
1206 		return ret;
1207 	}
1208 
1209 	if (index >= AD74413R_CHANNEL_MAX) {
1210 		dev_err(st->dev, "Channel index %u is too large\n", index);
1211 		return -EINVAL;
1212 	}
1213 
1214 	config = &st->channel_configs[index];
1215 	if (config->initialized) {
1216 		dev_err(st->dev, "Channel %u already initialized\n", index);
1217 		return -EINVAL;
1218 	}
1219 
1220 	config->func = CH_FUNC_HIGH_IMPEDANCE;
1221 	fwnode_property_read_u32(channel_node, "adi,ch-func", &config->func);
1222 
1223 	if (config->func < CH_FUNC_MIN || config->func > CH_FUNC_MAX) {
1224 		dev_err(st->dev, "Invalid channel function %u\n", config->func);
1225 		return -EINVAL;
1226 	}
1227 
1228 	if (!st->chip_info->hart_support &&
1229 	    (config->func == CH_FUNC_CURRENT_INPUT_EXT_POWER_HART ||
1230 	     config->func == CH_FUNC_CURRENT_INPUT_LOOP_POWER_HART)) {
1231 		dev_err(st->dev, "Unsupported HART function %u\n", config->func);
1232 		return -EINVAL;
1233 	}
1234 
1235 	if (config->func == CH_FUNC_DIGITAL_INPUT_LOGIC ||
1236 	    config->func == CH_FUNC_DIGITAL_INPUT_LOOP_POWER)
1237 		st->num_comparator_gpios++;
1238 
1239 	config->gpo_comparator = fwnode_property_read_bool(channel_node,
1240 		"adi,gpo-comparator");
1241 
1242 	fwnode_property_read_u32(channel_node, "drive-strength-microamp",
1243 				 &config->drive_strength);
1244 
1245 	if (!config->gpo_comparator)
1246 		st->num_gpo_gpios++;
1247 
1248 	indio_dev->num_channels += ad74413r_channels_map[config->func].num_channels;
1249 
1250 	config->initialized = true;
1251 
1252 	return 0;
1253 }
1254 
1255 static int ad74413r_parse_channel_configs(struct iio_dev *indio_dev)
1256 {
1257 	struct ad74413r_state *st = iio_priv(indio_dev);
1258 	struct fwnode_handle *channel_node = NULL;
1259 	int ret;
1260 
1261 	fwnode_for_each_available_child_node(dev_fwnode(st->dev), channel_node) {
1262 		ret = ad74413r_parse_channel_config(indio_dev, channel_node);
1263 		if (ret)
1264 			goto put_channel_node;
1265 	}
1266 
1267 	return 0;
1268 
1269 put_channel_node:
1270 	fwnode_handle_put(channel_node);
1271 
1272 	return ret;
1273 }
1274 
1275 static int ad74413r_setup_channels(struct iio_dev *indio_dev)
1276 {
1277 	struct ad74413r_state *st = iio_priv(indio_dev);
1278 	struct ad74413r_channel_config *config;
1279 	struct iio_chan_spec *channels, *chans;
1280 	unsigned int i, num_chans, chan_i;
1281 	int ret;
1282 
1283 	channels = devm_kcalloc(st->dev, sizeof(*channels),
1284 				indio_dev->num_channels, GFP_KERNEL);
1285 	if (!channels)
1286 		return -ENOMEM;
1287 
1288 	indio_dev->channels = channels;
1289 
1290 	for (i = 0; i < AD74413R_CHANNEL_MAX; i++) {
1291 		config = &st->channel_configs[i];
1292 		chans = ad74413r_channels_map[config->func].channels;
1293 		num_chans = ad74413r_channels_map[config->func].num_channels;
1294 
1295 		memcpy(channels, chans, num_chans * sizeof(*chans));
1296 
1297 		for (chan_i = 0; chan_i < num_chans; chan_i++) {
1298 			struct iio_chan_spec *chan = &channels[chan_i];
1299 
1300 			chan->channel = i;
1301 			if (chan->output)
1302 				chan->scan_index = -1;
1303 			else
1304 				chan->scan_index = i;
1305 		}
1306 
1307 		ret = ad74413r_set_channel_function(st, i, config->func);
1308 		if (ret)
1309 			return ret;
1310 
1311 		channels += num_chans;
1312 	}
1313 
1314 	return 0;
1315 }
1316 
1317 static int ad74413r_setup_gpios(struct ad74413r_state *st)
1318 {
1319 	struct ad74413r_channel_config *config;
1320 	unsigned int comp_gpio_i = 0;
1321 	unsigned int gpo_gpio_i = 0;
1322 	unsigned int i;
1323 	u8 gpo_config;
1324 	u32 strength;
1325 	int ret;
1326 
1327 	for (i = 0; i < AD74413R_CHANNEL_MAX; i++) {
1328 		config = &st->channel_configs[i];
1329 
1330 		if (config->gpo_comparator) {
1331 			gpo_config = AD74413R_GPO_CONFIG_COMPARATOR;
1332 		} else {
1333 			gpo_config = AD74413R_GPO_CONFIG_LOGIC;
1334 			st->gpo_gpio_offsets[gpo_gpio_i++] = i;
1335 		}
1336 
1337 		if (config->func == CH_FUNC_DIGITAL_INPUT_LOGIC ||
1338 		    config->func == CH_FUNC_DIGITAL_INPUT_LOOP_POWER) {
1339 			st->comp_gpio_offsets[comp_gpio_i++] = i;
1340 
1341 			strength = config->drive_strength;
1342 			ret = ad74413r_set_comp_drive_strength(st, i, strength);
1343 			if (ret)
1344 				return ret;
1345 		}
1346 
1347 		ret = ad74413r_set_gpo_config(st, i, gpo_config);
1348 		if (ret)
1349 			return ret;
1350 	}
1351 
1352 	return 0;
1353 }
1354 
1355 static void ad74413r_regulator_disable(void *regulator)
1356 {
1357 	regulator_disable(regulator);
1358 }
1359 
1360 static int ad74413r_probe(struct spi_device *spi)
1361 {
1362 	struct ad74413r_state *st;
1363 	struct iio_dev *indio_dev;
1364 	int ret;
1365 
1366 	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
1367 	if (!indio_dev)
1368 		return -ENOMEM;
1369 
1370 	st = iio_priv(indio_dev);
1371 
1372 	st->spi = spi;
1373 	st->dev = &spi->dev;
1374 	st->chip_info = device_get_match_data(&spi->dev);
1375 	if (!st->chip_info) {
1376 		const struct spi_device_id *id = spi_get_device_id(spi);
1377 
1378 		if (id)
1379 			st->chip_info =
1380 				(struct ad74413r_chip_info *)id->driver_data;
1381 		if (!st->chip_info)
1382 			return -EINVAL;
1383 	}
1384 
1385 	mutex_init(&st->lock);
1386 	init_completion(&st->adc_data_completion);
1387 
1388 	st->regmap = devm_regmap_init(st->dev, NULL, st,
1389 				      &ad74413r_regmap_config);
1390 	if (IS_ERR(st->regmap))
1391 		return PTR_ERR(st->regmap);
1392 
1393 	st->reset_gpio = devm_gpiod_get_optional(st->dev, "reset", GPIOD_OUT_LOW);
1394 	if (IS_ERR(st->reset_gpio))
1395 		return PTR_ERR(st->reset_gpio);
1396 
1397 	st->refin_reg = devm_regulator_get(st->dev, "refin");
1398 	if (IS_ERR(st->refin_reg))
1399 		return dev_err_probe(st->dev, PTR_ERR(st->refin_reg),
1400 				     "Failed to get refin regulator\n");
1401 
1402 	ret = regulator_enable(st->refin_reg);
1403 	if (ret)
1404 		return ret;
1405 
1406 	ret = devm_add_action_or_reset(st->dev, ad74413r_regulator_disable,
1407 				       st->refin_reg);
1408 	if (ret)
1409 		return ret;
1410 
1411 	st->sense_resistor_ohms = 100000000;
1412 	device_property_read_u32(st->dev, "shunt-resistor-micro-ohms",
1413 				 &st->sense_resistor_ohms);
1414 	st->sense_resistor_ohms /= 1000000;
1415 
1416 	st->trig = devm_iio_trigger_alloc(st->dev, "%s-dev%d",
1417 					  st->chip_info->name, iio_device_id(indio_dev));
1418 	if (!st->trig)
1419 		return -ENOMEM;
1420 
1421 	st->trig->ops = &ad74413r_trigger_ops;
1422 	iio_trigger_set_drvdata(st->trig, st);
1423 
1424 	ret = devm_iio_trigger_register(st->dev, st->trig);
1425 	if (ret)
1426 		return ret;
1427 
1428 	indio_dev->name = st->chip_info->name;
1429 	indio_dev->modes = INDIO_DIRECT_MODE;
1430 	indio_dev->info = &ad74413r_info;
1431 	indio_dev->trig = iio_trigger_get(st->trig);
1432 
1433 	ret = ad74413r_reset(st);
1434 	if (ret)
1435 		return ret;
1436 
1437 	ret = ad74413r_parse_channel_configs(indio_dev);
1438 	if (ret)
1439 		return ret;
1440 
1441 	ret = ad74413r_setup_channels(indio_dev);
1442 	if (ret)
1443 		return ret;
1444 
1445 	ret = ad74413r_setup_gpios(st);
1446 	if (ret)
1447 		return ret;
1448 
1449 	if (st->num_gpo_gpios) {
1450 		st->gpo_gpiochip.owner = THIS_MODULE;
1451 		st->gpo_gpiochip.label = st->chip_info->name;
1452 		st->gpo_gpiochip.base = -1;
1453 		st->gpo_gpiochip.ngpio = st->num_gpo_gpios;
1454 		st->gpo_gpiochip.parent = st->dev;
1455 		st->gpo_gpiochip.can_sleep = true;
1456 		st->gpo_gpiochip.set = ad74413r_gpio_set;
1457 		st->gpo_gpiochip.set_multiple = ad74413r_gpio_set_multiple;
1458 		st->gpo_gpiochip.set_config = ad74413r_gpio_set_gpo_config;
1459 		st->gpo_gpiochip.get_direction =
1460 			ad74413r_gpio_get_gpo_direction;
1461 
1462 		ret = devm_gpiochip_add_data(st->dev, &st->gpo_gpiochip, st);
1463 		if (ret)
1464 			return ret;
1465 	}
1466 
1467 	if (st->num_comparator_gpios) {
1468 		st->comp_gpiochip.owner = THIS_MODULE;
1469 		st->comp_gpiochip.label = st->chip_info->name;
1470 		st->comp_gpiochip.base = -1;
1471 		st->comp_gpiochip.ngpio = st->num_comparator_gpios;
1472 		st->comp_gpiochip.parent = st->dev;
1473 		st->comp_gpiochip.can_sleep = true;
1474 		st->comp_gpiochip.get = ad74413r_gpio_get;
1475 		st->comp_gpiochip.get_multiple = ad74413r_gpio_get_multiple;
1476 		st->comp_gpiochip.set_config = ad74413r_gpio_set_comp_config;
1477 		st->comp_gpiochip.get_direction =
1478 			ad74413r_gpio_get_comp_direction;
1479 
1480 		ret = devm_gpiochip_add_data(st->dev, &st->comp_gpiochip, st);
1481 		if (ret)
1482 			return ret;
1483 	}
1484 
1485 	ret = ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_OFF);
1486 	if (ret)
1487 		return ret;
1488 
1489 	ret = devm_request_irq(st->dev, spi->irq, ad74413r_adc_data_interrupt,
1490 			       0, st->chip_info->name, indio_dev);
1491 	if (ret)
1492 		return dev_err_probe(st->dev, ret, "Failed to request irq\n");
1493 
1494 	ret = devm_iio_triggered_buffer_setup(st->dev, indio_dev,
1495 					      &iio_pollfunc_store_time,
1496 					      &ad74413r_trigger_handler,
1497 					      &ad74413r_buffer_ops);
1498 	if (ret)
1499 		return ret;
1500 
1501 	return devm_iio_device_register(st->dev, indio_dev);
1502 }
1503 
1504 static int ad74413r_unregister_driver(struct spi_driver *spi)
1505 {
1506 	spi_unregister_driver(spi);
1507 
1508 	return 0;
1509 }
1510 
1511 static int __init ad74413r_register_driver(struct spi_driver *spi)
1512 {
1513 	crc8_populate_msb(ad74413r_crc8_table, AD74413R_CRC_POLYNOMIAL);
1514 
1515 	return spi_register_driver(spi);
1516 }
1517 
1518 static const struct ad74413r_chip_info ad74412r_chip_info_data = {
1519 	.hart_support = false,
1520 	.name = "ad74412r",
1521 };
1522 
1523 static const struct ad74413r_chip_info ad74413r_chip_info_data = {
1524 	.hart_support = true,
1525 	.name = "ad74413r",
1526 };
1527 
1528 static const struct of_device_id ad74413r_dt_id[] = {
1529 	{
1530 		.compatible = "adi,ad74412r",
1531 		.data = &ad74412r_chip_info_data,
1532 	},
1533 	{
1534 		.compatible = "adi,ad74413r",
1535 		.data = &ad74413r_chip_info_data,
1536 	},
1537 	{},
1538 };
1539 MODULE_DEVICE_TABLE(of, ad74413r_dt_id);
1540 
1541 static const struct spi_device_id ad74413r_spi_id[] = {
1542 	{ .name = "ad74412r", .driver_data = (kernel_ulong_t)&ad74412r_chip_info_data },
1543 	{ .name = "ad74413r", .driver_data = (kernel_ulong_t)&ad74413r_chip_info_data },
1544 	{}
1545 };
1546 MODULE_DEVICE_TABLE(spi, ad74413r_spi_id);
1547 
1548 static struct spi_driver ad74413r_driver = {
1549 	.driver = {
1550 		   .name = "ad74413r",
1551 		   .of_match_table = ad74413r_dt_id,
1552 	},
1553 	.probe = ad74413r_probe,
1554 	.id_table = ad74413r_spi_id,
1555 };
1556 
1557 module_driver(ad74413r_driver,
1558 	      ad74413r_register_driver,
1559 	      ad74413r_unregister_driver);
1560 
1561 MODULE_AUTHOR("Cosmin Tanislav <cosmin.tanislav@analog.com>");
1562 MODULE_DESCRIPTION("Analog Devices AD74413R ADDAC");
1563 MODULE_LICENSE("GPL v2");
1564