1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) 2021 Analog Devices, Inc.
4 * Author: Cosmin Tanislav <cosmin.tanislav@analog.com>
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>
26 #include <dt-bindings/iio/addac/adi,ad74413r.h>
28 #define AD74413R_CRC_POLYNOMIAL 0x7
29 DECLARE_CRC8_TABLE(ad74413r_crc8_table);
31 #define AD74413R_CHANNEL_MAX 4
33 #define AD74413R_FRAME_SIZE 4
35 struct ad74413r_chip_info {
40 struct ad74413r_channel_config {
46 struct ad74413r_channels {
47 struct iio_chan_spec *channels;
48 unsigned int num_channels;
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;
63 * Synchronize consecutive operations when doing a one-shot
64 * conversion and when updating the ADC samples SPI message.
68 const struct ad74413r_chip_info *chip_info;
69 struct spi_device *spi;
70 struct regulator *refin_reg;
71 struct regmap *regmap;
73 struct iio_trigger *trig;
75 size_t adc_active_channels;
76 struct spi_message adc_samples_msg;
77 struct spi_transfer adc_samples_xfer[AD74413R_CHANNEL_MAX + 1];
80 * DMA (thus cache coherency maintenance) requires the
81 * transfer buffers to live in their own cache lines.
84 u8 rx_buf[AD74413R_FRAME_SIZE * AD74413R_CHANNEL_MAX];
86 } adc_samples_buf ____cacheline_aligned;
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];
93 #define AD74413R_REG_NOP 0x00
95 #define AD74413R_REG_CH_FUNC_SETUP_X(x) (0x01 + (x))
96 #define AD74413R_CH_FUNC_SETUP_MASK GENMASK(3, 0)
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
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)
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
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
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)
136 #define AD74413R_REG_DIN_COMP_OUT 0x25
137 #define AD74413R_DIN_COMP_OUT_SHIFT_X(x) x
139 #define AD74413R_REG_ADC_RESULT_X(x) (0x26 + (x))
140 #define AD74413R_ADC_RESULT_MAX GENMASK(15, 0)
142 #define AD74413R_REG_READ_SELECT 0x41
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
149 static const int ad74413r_adc_sampling_rates[] = {
153 static const int ad74413r_adc_sampling_rates_hart[] = {
157 static int ad74413r_crc(u8 *buf)
159 return crc8(ad74413r_crc8_table, buf, 3, 0);
162 static void ad74413r_format_reg_write(u8 reg, u16 val, u8 *buf)
165 put_unaligned_be16(val, &buf[1]);
166 buf[3] = ad74413r_crc(buf);
169 static int ad74413r_reg_write(void *context, unsigned int reg, unsigned int val)
171 struct ad74413r_state *st = context;
173 ad74413r_format_reg_write(reg, val, st->reg_tx_buf);
175 return spi_write(st->spi, st->reg_tx_buf, AD74413R_FRAME_SIZE);
178 static int ad74413r_crc_check(struct ad74413r_state *st, u8 *buf)
180 u8 expected_crc = ad74413r_crc(buf);
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]);
191 static int ad74413r_reg_read(void *context, unsigned int reg, unsigned int *val)
193 struct ad74413r_state *st = context;
194 struct spi_transfer reg_read_xfer[] = {
196 .tx_buf = st->reg_tx_buf,
197 .len = AD74413R_FRAME_SIZE,
201 .rx_buf = st->reg_rx_buf,
202 .len = AD74413R_FRAME_SIZE,
207 ad74413r_format_reg_write(AD74413R_REG_READ_SELECT, reg,
210 ret = spi_sync_transfer(st->spi, reg_read_xfer,
211 ARRAY_SIZE(reg_read_xfer));
215 ret = ad74413r_crc_check(st, st->reg_rx_buf);
219 *val = get_unaligned_be16(&st->reg_rx_buf[1]);
224 static const struct regmap_config ad74413r_regmap_config = {
227 .reg_read = ad74413r_reg_read,
228 .reg_write = ad74413r_reg_write,
231 static int ad74413r_set_gpo_config(struct ad74413r_state *st,
232 unsigned int offset, u8 mode)
234 return regmap_update_bits(st->regmap, AD74413R_REG_GPO_CONFIG_X(offset),
235 AD74413R_GPO_CONFIG_SELECT_MASK, mode);
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,
245 static int ad74413r_set_comp_debounce(struct ad74413r_state *st,
247 unsigned int debounce)
249 unsigned int val = AD74413R_DIN_DEBOUNCE_LEN - 1;
252 for (i = 0; i < AD74413R_DIN_DEBOUNCE_LEN; i++)
253 if (debounce <= ad74413r_debounce_map[i]) {
258 return regmap_update_bits(st->regmap,
259 AD74413R_REG_DIN_CONFIG_X(offset),
260 AD74413R_DIN_DEBOUNCE_MASK,
264 static void ad74413r_gpio_set(struct gpio_chip *chip,
265 unsigned int offset, int val)
267 struct ad74413r_state *st = gpiochip_get_data(chip);
268 unsigned int real_offset = st->gpo_gpio_offsets[offset];
271 ret = ad74413r_set_gpo_config(st, real_offset,
272 AD74413R_GPO_CONFIG_LOGIC);
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);
281 static void ad74413r_gpio_set_multiple(struct gpio_chip *chip,
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;
291 for_each_set_bit_from(offset, mask, AD74413R_CHANNEL_MAX) {
292 unsigned int real_offset = st->gpo_gpio_offsets[offset];
294 ret = ad74413r_set_gpo_config(st, real_offset,
295 AD74413R_GPO_CONFIG_LOGIC_PARALLEL);
299 real_mask |= BIT(real_offset);
301 real_bits |= BIT(real_offset);
304 regmap_update_bits(st->regmap, AD74413R_REG_GPO_PAR_DATA,
305 real_mask, real_bits);
308 static int ad74413r_gpio_get(struct gpio_chip *chip, unsigned int offset)
310 struct ad74413r_state *st = gpiochip_get_data(chip);
311 unsigned int real_offset = st->comp_gpio_offsets[offset];
315 ret = regmap_read(st->regmap, AD74413R_REG_DIN_COMP_OUT, &status);
319 status &= AD74413R_DIN_COMP_OUT_SHIFT_X(real_offset);
321 return status ? 1 : 0;
324 static int ad74413r_gpio_get_multiple(struct gpio_chip *chip,
328 struct ad74413r_state *st = gpiochip_get_data(chip);
329 unsigned int offset = 0;
333 ret = regmap_read(st->regmap, AD74413R_REG_DIN_COMP_OUT, &val);
337 for_each_set_bit_from(offset, mask, AD74413R_CHANNEL_MAX) {
338 unsigned int real_offset = st->comp_gpio_offsets[offset];
340 if (val & BIT(real_offset))
347 static int ad74413r_gpio_get_gpo_direction(struct gpio_chip *chip,
350 return GPIO_LINE_DIRECTION_OUT;
353 static int ad74413r_gpio_get_comp_direction(struct gpio_chip *chip,
356 return GPIO_LINE_DIRECTION_IN;
359 static int ad74413r_gpio_set_gpo_config(struct gpio_chip *chip,
361 unsigned long config)
363 struct ad74413r_state *st = gpiochip_get_data(chip);
364 unsigned int real_offset = st->gpo_gpio_offsets[offset];
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);
378 static int ad74413r_gpio_set_comp_config(struct gpio_chip *chip,
380 unsigned long config)
382 struct ad74413r_state *st = gpiochip_get_data(chip);
383 unsigned int real_offset = st->comp_gpio_offsets[offset];
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));
394 static int ad74413r_reset(struct ad74413r_state *st)
398 ret = regmap_write(st->regmap, AD74413R_REG_CMD_KEY,
399 AD74413R_CMD_KEY_RESET1);
403 return regmap_write(st->regmap, AD74413R_REG_CMD_KEY,
404 AD74413R_CMD_KEY_RESET2);
407 static int ad74413r_set_channel_dac_code(struct ad74413r_state *st,
408 unsigned int channel, int dac_code)
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 },
415 return regmap_multi_reg_write(st->regmap, reg_seq, 2);
418 static int ad74413r_set_channel_function(struct ad74413r_state *st,
419 unsigned int channel, u8 func)
421 return regmap_update_bits(st->regmap,
422 AD74413R_REG_CH_FUNC_SETUP_X(channel),
423 AD74413R_CH_FUNC_SETUP_MASK, func);
426 static int ad74413r_set_adc_conv_seq(struct ad74413r_state *st,
432 * These bits do not clear when a conversion completes.
433 * To enable a subsequent conversion, repeat the write.
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));
442 * Wait 100us before starting conversions.
444 usleep_range(100, 120);
449 static int ad74413r_set_adc_channel_enable(struct ad74413r_state *st,
450 unsigned int channel,
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);
458 static int ad74413r_get_adc_range(struct ad74413r_state *st,
459 unsigned int channel,
464 ret = regmap_read(st->regmap, AD74413R_REG_ADC_CONFIG_X(channel), val);
468 *val = FIELD_GET(AD74413R_ADC_CONFIG_RANGE_MASK, *val);
473 static int ad74413r_get_adc_rejection(struct ad74413r_state *st,
474 unsigned int channel,
479 ret = regmap_read(st->regmap, AD74413R_REG_ADC_CONFIG_X(channel), val);
483 *val = FIELD_GET(AD74413R_ADC_CONFIG_REJECTION_MASK, *val);
488 static int ad74413r_set_adc_rejection(struct ad74413r_state *st,
489 unsigned int channel,
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,
499 static int ad74413r_rejection_to_rate(struct ad74413r_state *st,
500 unsigned int rej, int *val)
503 case AD74413R_ADC_REJECTION_50_60:
506 case AD74413R_ADC_REJECTION_NONE:
509 case AD74413R_ADC_REJECTION_50_60_HART:
512 case AD74413R_ADC_REJECTION_HART:
516 dev_err(st->dev, "ADC rejection invalid\n");
521 static int ad74413r_rate_to_rejection(struct ad74413r_state *st,
522 int rate, unsigned int *val)
526 *val = AD74413R_ADC_REJECTION_50_60;
529 *val = AD74413R_ADC_REJECTION_NONE;
532 *val = AD74413R_ADC_REJECTION_50_60_HART;
535 *val = AD74413R_ADC_REJECTION_HART;
538 dev_err(st->dev, "ADC rate invalid\n");
543 static int ad74413r_range_to_voltage_range(struct ad74413r_state *st,
544 unsigned int range, int *val)
547 case AD74413R_ADC_RANGE_10V:
550 case AD74413R_ADC_RANGE_2P5V_EXT_POW:
551 case AD74413R_ADC_RANGE_2P5V_INT_POW:
554 case AD74413R_ADC_RANGE_5V_BI_DIR:
558 dev_err(st->dev, "ADC range invalid\n");
563 static int ad74413r_range_to_voltage_offset(struct ad74413r_state *st,
564 unsigned int range, int *val)
567 case AD74413R_ADC_RANGE_10V:
568 case AD74413R_ADC_RANGE_2P5V_EXT_POW:
571 case AD74413R_ADC_RANGE_2P5V_INT_POW:
572 case AD74413R_ADC_RANGE_5V_BI_DIR:
576 dev_err(st->dev, "ADC range invalid\n");
581 static int ad74413r_range_to_voltage_offset_raw(struct ad74413r_state *st,
582 unsigned int range, int *val)
585 case AD74413R_ADC_RANGE_10V:
586 case AD74413R_ADC_RANGE_2P5V_EXT_POW:
589 case AD74413R_ADC_RANGE_2P5V_INT_POW:
590 *val = -((int)AD74413R_ADC_RESULT_MAX);
592 case AD74413R_ADC_RANGE_5V_BI_DIR:
593 *val = -((int)AD74413R_ADC_RESULT_MAX / 2);
596 dev_err(st->dev, "ADC range invalid\n");
601 static int ad74413r_get_output_voltage_scale(struct ad74413r_state *st,
604 *val = AD74413R_DAC_VOLTAGE_MAX;
605 *val2 = AD74413R_DAC_CODE_MAX;
607 return IIO_VAL_FRACTIONAL;
610 static int ad74413r_get_output_current_scale(struct ad74413r_state *st,
613 *val = regulator_get_voltage(st->refin_reg);
614 *val2 = st->sense_resistor_ohms * AD74413R_DAC_CODE_MAX * 1000;
616 return IIO_VAL_FRACTIONAL;
619 static int ad74413r_get_input_voltage_scale(struct ad74413r_state *st,
620 unsigned int channel,
626 ret = ad74413r_get_adc_range(st, channel, &range);
630 ret = ad74413r_range_to_voltage_range(st, range, val);
634 *val2 = AD74413R_ADC_RESULT_MAX;
636 return IIO_VAL_FRACTIONAL;
639 static int ad74413r_get_input_voltage_offset(struct ad74413r_state *st,
640 unsigned int channel, int *val)
645 ret = ad74413r_get_adc_range(st, channel, &range);
649 ret = ad74413r_range_to_voltage_offset_raw(st, range, val);
656 static int ad74413r_get_input_current_scale(struct ad74413r_state *st,
657 unsigned int channel, int *val,
663 ret = ad74413r_get_adc_range(st, channel, &range);
667 ret = ad74413r_range_to_voltage_range(st, range, val);
671 *val2 = AD74413R_ADC_RESULT_MAX * st->sense_resistor_ohms;
673 return IIO_VAL_FRACTIONAL;
676 static int ad74413_get_input_current_offset(struct ad74413r_state *st,
677 unsigned int channel, int *val)
684 ret = ad74413r_get_adc_range(st, channel, &range);
688 ret = ad74413r_range_to_voltage_range(st, range, &voltage_range);
692 ret = ad74413r_range_to_voltage_offset(st, range, &voltage_offset);
696 *val = voltage_offset * AD74413R_ADC_RESULT_MAX / voltage_range;
701 static int ad74413r_get_adc_rate(struct ad74413r_state *st,
702 unsigned int channel, int *val)
704 unsigned int rejection;
707 ret = ad74413r_get_adc_rejection(st, channel, &rejection);
711 ret = ad74413r_rejection_to_rate(st, rejection, val);
718 static int ad74413r_set_adc_rate(struct ad74413r_state *st,
719 unsigned int channel, int val)
721 unsigned int rejection;
724 ret = ad74413r_rate_to_rejection(st, val, &rejection);
728 return ad74413r_set_adc_rejection(st, channel, rejection);
731 static irqreturn_t ad74413r_trigger_handler(int irq, void *p)
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;
740 ret = spi_sync(st->spi, &st->adc_samples_msg);
744 for (i = 0; i < st->adc_active_channels; i++)
745 ad74413r_crc_check(st, &rx_buf[i * AD74413R_FRAME_SIZE]);
747 iio_push_to_buffers_with_timestamp(indio_dev, &st->adc_samples_buf,
748 iio_get_time_ns(indio_dev));
751 iio_trigger_notify_done(indio_dev->trig);
756 static irqreturn_t ad74413r_adc_data_interrupt(int irq, void *data)
758 struct iio_dev *indio_dev = data;
759 struct ad74413r_state *st = iio_priv(indio_dev);
761 if (iio_buffer_enabled(indio_dev))
762 iio_trigger_poll(st->trig);
764 complete(&st->adc_data_completion);
769 static int _ad74413r_get_single_adc_result(struct ad74413r_state *st,
770 unsigned int channel, int *val)
775 reinit_completion(&st->adc_data_completion);
777 ret = ad74413r_set_adc_channel_enable(st, channel, true);
781 ret = ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_SINGLE);
785 ret = wait_for_completion_timeout(&st->adc_data_completion,
786 msecs_to_jiffies(1000));
792 ret = regmap_read(st->regmap, AD74413R_REG_ADC_RESULT_X(channel),
797 ret = ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_OFF);
801 ret = ad74413r_set_adc_channel_enable(st, channel, false);
810 static int ad74413r_get_single_adc_result(struct iio_dev *indio_dev,
811 unsigned int channel, int *val)
813 struct ad74413r_state *st = iio_priv(indio_dev);
816 ret = iio_device_claim_direct_mode(indio_dev);
820 mutex_lock(&st->lock);
821 ret = _ad74413r_get_single_adc_result(st, channel, val);
822 mutex_unlock(&st->lock);
824 iio_device_release_direct_mode(indio_dev);
829 static void ad74413r_adc_to_resistance_result(int adc_result, int *val)
831 if (adc_result == AD74413R_ADC_RESULT_MAX)
832 adc_result = AD74413R_ADC_RESULT_MAX - 1;
834 *val = DIV_ROUND_CLOSEST(adc_result * 2100,
835 AD74413R_ADC_RESULT_MAX - adc_result);
838 static int ad74413r_update_scan_mode(struct iio_dev *indio_dev,
839 const unsigned long *active_scan_mask)
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;
848 mutex_lock(&st->lock);
850 spi_message_init(&st->adc_samples_msg);
851 st->adc_active_channels = 0;
853 for_each_clear_bit(channel, active_scan_mask, AD74413R_CHANNEL_MAX) {
854 ret = ad74413r_set_adc_channel_enable(st, channel, false);
859 if (*active_scan_mask == 0)
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.
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.
871 * W: [WCH1] [WCH2] [WCH2] [WCH3] [ ]
872 * R: [ ] [RCH1] [RCH2] [RCH3] [RCH4]
875 for_each_set_bit(channel, active_scan_mask, AD74413R_CHANNEL_MAX) {
876 ret = ad74413r_set_adc_channel_enable(st, channel, true);
880 st->adc_active_channels++;
882 if (xfer == st->adc_samples_xfer)
885 xfer->rx_buf = rx_buf;
887 xfer->tx_buf = tx_buf;
888 xfer->len = AD74413R_FRAME_SIZE;
891 ad74413r_format_reg_write(AD74413R_REG_READ_SELECT,
892 AD74413R_REG_ADC_RESULT_X(channel),
895 spi_message_add_tail(xfer, &st->adc_samples_msg);
898 tx_buf += AD74413R_FRAME_SIZE;
899 rx_buf += AD74413R_FRAME_SIZE;
902 xfer->rx_buf = rx_buf;
904 xfer->len = AD74413R_FRAME_SIZE;
907 spi_message_add_tail(xfer, &st->adc_samples_msg);
910 mutex_unlock(&st->lock);
915 static int ad74413r_buffer_postenable(struct iio_dev *indio_dev)
917 struct ad74413r_state *st = iio_priv(indio_dev);
919 return ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_CONTINUOUS);
922 static int ad74413r_buffer_predisable(struct iio_dev *indio_dev)
924 struct ad74413r_state *st = iio_priv(indio_dev);
926 return ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_OFF);
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)
933 struct ad74413r_state *st = iio_priv(indio_dev);
936 case IIO_CHAN_INFO_SCALE:
937 switch (chan->type) {
940 return ad74413r_get_output_voltage_scale(st,
943 return ad74413r_get_input_voltage_scale(st,
944 chan->channel, val, val2);
947 return ad74413r_get_output_current_scale(st,
950 return ad74413r_get_input_current_scale(st,
951 chan->channel, val, val2);
955 case IIO_CHAN_INFO_OFFSET:
956 switch (chan->type) {
958 return ad74413r_get_input_voltage_offset(st,
961 return ad74413_get_input_current_offset(st,
966 case IIO_CHAN_INFO_RAW:
970 return ad74413r_get_single_adc_result(indio_dev, chan->channel,
972 case IIO_CHAN_INFO_PROCESSED: {
975 ret = ad74413r_get_single_adc_result(indio_dev, chan->channel,
980 ad74413r_adc_to_resistance_result(*val, val);
984 case IIO_CHAN_INFO_SAMP_FREQ:
985 return ad74413r_get_adc_rate(st, chan->channel, val);
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)
995 struct ad74413r_state *st = iio_priv(indio_dev);
998 case IIO_CHAN_INFO_RAW:
1002 if (val < 0 || val > AD74413R_DAC_CODE_MAX) {
1003 dev_err(st->dev, "Invalid DAC code\n");
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);
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,
1020 struct ad74413r_state *st = iio_priv(indio_dev);
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);
1028 *vals = ad74413r_adc_sampling_rates;
1029 *length = ARRAY_SIZE(ad74413r_adc_sampling_rates);
1031 *type = IIO_VAL_INT;
1032 return IIO_AVAIL_LIST;
1038 static const struct iio_buffer_setup_ops ad74413r_buffer_ops = {
1039 .postenable = &ad74413r_buffer_postenable,
1040 .predisable = &ad74413r_buffer_predisable,
1043 static const struct iio_trigger_ops ad74413r_trigger_ops = {
1044 .validate_device = iio_trigger_validate_own_device,
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,
1054 #define AD74413R_DAC_CHANNEL(_type, extra_mask_separate) \
1059 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) \
1060 | (extra_mask_separate), \
1063 #define AD74413R_ADC_CHANNEL(_type, extra_mask_separate) \
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), \
1076 .storagebits = 32, \
1078 .endianness = IIO_BE, \
1082 #define AD74413R_ADC_VOLTAGE_CHANNEL \
1083 AD74413R_ADC_CHANNEL(IIO_VOLTAGE, BIT(IIO_CHAN_INFO_SCALE) \
1084 | BIT(IIO_CHAN_INFO_OFFSET))
1086 #define AD74413R_ADC_CURRENT_CHANNEL \
1087 AD74413R_ADC_CHANNEL(IIO_CURRENT, BIT(IIO_CHAN_INFO_SCALE) \
1088 | BIT(IIO_CHAN_INFO_OFFSET))
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,
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,
1100 static struct iio_chan_spec ad74413r_voltage_input_channels[] = {
1101 AD74413R_ADC_VOLTAGE_CHANNEL,
1104 static struct iio_chan_spec ad74413r_current_input_channels[] = {
1105 AD74413R_ADC_CURRENT_CHANNEL,
1108 static struct iio_chan_spec ad74413r_resistance_input_channels[] = {
1109 AD74413R_ADC_CHANNEL(IIO_RESISTANCE, BIT(IIO_CHAN_INFO_PROCESSED)),
1112 static struct iio_chan_spec ad74413r_digital_input_channels[] = {
1113 AD74413R_ADC_VOLTAGE_CHANNEL,
1116 #define _AD74413R_CHANNELS(_channels) \
1118 .channels = _channels, \
1119 .num_channels = ARRAY_SIZE(_channels), \
1122 #define AD74413R_CHANNELS(name) \
1123 _AD74413R_CHANNELS(ad74413r_ ## name ## _channels)
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),
1139 static int ad74413r_parse_channel_config(struct iio_dev *indio_dev,
1140 struct fwnode_handle *channel_node)
1142 struct ad74413r_state *st = iio_priv(indio_dev);
1143 struct ad74413r_channel_config *config;
1147 ret = fwnode_property_read_u32(channel_node, "reg", &index);
1149 dev_err(st->dev, "Failed to read channel reg: %d\n", ret);
1153 if (index >= AD74413R_CHANNEL_MAX) {
1154 dev_err(st->dev, "Channel index %u is too large\n", index);
1158 config = &st->channel_configs[index];
1159 if (config->initialized) {
1160 dev_err(st->dev, "Channel %u already initialized\n", index);
1164 config->func = CH_FUNC_HIGH_IMPEDANCE;
1165 fwnode_property_read_u32(channel_node, "adi,ch-func", &config->func);
1167 if (config->func < CH_FUNC_MIN || config->func > CH_FUNC_MAX) {
1168 dev_err(st->dev, "Invalid channel function %u\n", config->func);
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);
1179 if (config->func == CH_FUNC_DIGITAL_INPUT_LOGIC ||
1180 config->func == CH_FUNC_DIGITAL_INPUT_LOOP_POWER)
1181 st->num_comparator_gpios++;
1183 config->gpo_comparator = fwnode_property_read_bool(channel_node,
1184 "adi,gpo-comparator");
1186 if (!config->gpo_comparator)
1187 st->num_gpo_gpios++;
1189 indio_dev->num_channels += ad74413r_channels_map[config->func].num_channels;
1191 config->initialized = true;
1196 static int ad74413r_parse_channel_configs(struct iio_dev *indio_dev)
1198 struct ad74413r_state *st = iio_priv(indio_dev);
1199 struct fwnode_handle *channel_node = NULL;
1202 fwnode_for_each_available_child_node(dev_fwnode(st->dev), channel_node) {
1203 ret = ad74413r_parse_channel_config(indio_dev, channel_node);
1205 goto put_channel_node;
1211 fwnode_handle_put(channel_node);
1216 static int ad74413r_setup_channels(struct iio_dev *indio_dev)
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;
1224 channels = devm_kcalloc(st->dev, sizeof(*channels),
1225 indio_dev->num_channels, GFP_KERNEL);
1229 indio_dev->channels = channels;
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;
1236 memcpy(channels, chans, num_chans * sizeof(*chans));
1238 for (chan_i = 0; chan_i < num_chans; chan_i++) {
1239 struct iio_chan_spec *chan = &channels[chan_i];
1243 chan->scan_index = -1;
1245 chan->scan_index = i;
1248 ret = ad74413r_set_channel_function(st, i, config->func);
1252 channels += num_chans;
1258 static int ad74413r_setup_gpios(struct ad74413r_state *st)
1260 struct ad74413r_channel_config *config;
1261 unsigned int comp_gpio_i = 0;
1262 unsigned int gpo_gpio_i = 0;
1267 for (i = 0; i < AD74413R_CHANNEL_MAX; i++) {
1268 config = &st->channel_configs[i];
1270 if (config->gpo_comparator) {
1271 gpo_config = AD74413R_GPO_CONFIG_COMPARATOR;
1273 gpo_config = AD74413R_GPO_CONFIG_LOGIC;
1274 st->gpo_gpio_offsets[gpo_gpio_i++] = i;
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;
1281 ret = ad74413r_set_gpo_config(st, i, gpo_config);
1289 static void ad74413r_regulator_disable(void *regulator)
1291 regulator_disable(regulator);
1294 static int ad74413r_probe(struct spi_device *spi)
1296 struct ad74413r_state *st;
1297 struct iio_dev *indio_dev;
1300 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
1304 st = iio_priv(indio_dev);
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);
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);
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");
1322 ret = regulator_enable(st->refin_reg);
1326 ret = devm_add_action_or_reset(st->dev, ad74413r_regulator_disable,
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;
1336 st->trig = devm_iio_trigger_alloc(st->dev, "%s-dev%d",
1337 st->chip_info->name, iio_device_id(indio_dev));
1341 st->trig->ops = &ad74413r_trigger_ops;
1342 iio_trigger_set_drvdata(st->trig, st);
1344 ret = devm_iio_trigger_register(st->dev, st->trig);
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);
1353 ret = ad74413r_reset(st);
1357 ret = ad74413r_parse_channel_configs(indio_dev);
1361 ret = ad74413r_setup_channels(indio_dev);
1365 ret = ad74413r_setup_gpios(st);
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;
1382 ret = devm_gpiochip_add_data(st->dev, &st->gpo_gpiochip, st);
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;
1400 ret = devm_gpiochip_add_data(st->dev, &st->comp_gpiochip, st);
1405 ret = ad74413r_set_adc_conv_seq(st, AD74413R_CONV_SEQ_OFF);
1409 ret = devm_request_irq(st->dev, spi->irq, ad74413r_adc_data_interrupt,
1410 0, st->chip_info->name, indio_dev);
1412 return dev_err_probe(st->dev, ret, "Failed to request irq\n");
1414 ret = devm_iio_triggered_buffer_setup(st->dev, indio_dev,
1415 &iio_pollfunc_store_time,
1416 &ad74413r_trigger_handler,
1417 &ad74413r_buffer_ops);
1421 return devm_iio_device_register(st->dev, indio_dev);
1424 static int ad74413r_unregister_driver(struct spi_driver *spi)
1426 spi_unregister_driver(spi);
1431 static int __init ad74413r_register_driver(struct spi_driver *spi)
1433 crc8_populate_msb(ad74413r_crc8_table, AD74413R_CRC_POLYNOMIAL);
1435 return spi_register_driver(spi);
1438 static const struct ad74413r_chip_info ad74412r_chip_info_data = {
1439 .hart_support = false,
1443 static const struct ad74413r_chip_info ad74413r_chip_info_data = {
1444 .hart_support = true,
1448 static const struct of_device_id ad74413r_dt_id[] = {
1450 .compatible = "adi,ad74412r",
1451 .data = &ad74412r_chip_info_data,
1454 .compatible = "adi,ad74413r",
1455 .data = &ad74413r_chip_info_data,
1459 MODULE_DEVICE_TABLE(of, ad74413r_dt_id);
1461 static struct spi_driver ad74413r_driver = {
1464 .of_match_table = ad74413r_dt_id,
1466 .probe = ad74413r_probe,
1469 module_driver(ad74413r_driver,
1470 ad74413r_register_driver,
1471 ad74413r_unregister_driver);
1473 MODULE_AUTHOR("Cosmin Tanislav <cosmin.tanislav@analog.com>");
1474 MODULE_DESCRIPTION("Analog Devices AD74413R ADDAC");
1475 MODULE_LICENSE("GPL v2");