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