1 // SPDX-License-Identifier: GPL-2.0
3 * Analog Devices AD7768-1 SPI ADC driver
5 * Copyright 2017 Analog Devices Inc.
7 #include <linux/bitfield.h>
9 #include <linux/delay.h>
10 #include <linux/device.h>
11 #include <linux/err.h>
12 #include <linux/gpio/consumer.h>
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/regulator/consumer.h>
16 #include <linux/sysfs.h>
17 #include <linux/spi/spi.h>
19 #include <linux/iio/buffer.h>
20 #include <linux/iio/iio.h>
21 #include <linux/iio/sysfs.h>
22 #include <linux/iio/trigger.h>
23 #include <linux/iio/triggered_buffer.h>
24 #include <linux/iio/trigger_consumer.h>
26 /* AD7768 registers definition */
27 #define AD7768_REG_CHIP_TYPE 0x3
28 #define AD7768_REG_PROD_ID_L 0x4
29 #define AD7768_REG_PROD_ID_H 0x5
30 #define AD7768_REG_CHIP_GRADE 0x6
31 #define AD7768_REG_SCRATCH_PAD 0x0A
32 #define AD7768_REG_VENDOR_L 0x0C
33 #define AD7768_REG_VENDOR_H 0x0D
34 #define AD7768_REG_INTERFACE_FORMAT 0x14
35 #define AD7768_REG_POWER_CLOCK 0x15
36 #define AD7768_REG_ANALOG 0x16
37 #define AD7768_REG_ANALOG2 0x17
38 #define AD7768_REG_CONVERSION 0x18
39 #define AD7768_REG_DIGITAL_FILTER 0x19
40 #define AD7768_REG_SINC3_DEC_RATE_MSB 0x1A
41 #define AD7768_REG_SINC3_DEC_RATE_LSB 0x1B
42 #define AD7768_REG_DUTY_CYCLE_RATIO 0x1C
43 #define AD7768_REG_SYNC_RESET 0x1D
44 #define AD7768_REG_GPIO_CONTROL 0x1E
45 #define AD7768_REG_GPIO_WRITE 0x1F
46 #define AD7768_REG_GPIO_READ 0x20
47 #define AD7768_REG_OFFSET_HI 0x21
48 #define AD7768_REG_OFFSET_MID 0x22
49 #define AD7768_REG_OFFSET_LO 0x23
50 #define AD7768_REG_GAIN_HI 0x24
51 #define AD7768_REG_GAIN_MID 0x25
52 #define AD7768_REG_GAIN_LO 0x26
53 #define AD7768_REG_SPI_DIAG_ENABLE 0x28
54 #define AD7768_REG_ADC_DIAG_ENABLE 0x29
55 #define AD7768_REG_DIG_DIAG_ENABLE 0x2A
56 #define AD7768_REG_ADC_DATA 0x2C
57 #define AD7768_REG_MASTER_STATUS 0x2D
58 #define AD7768_REG_SPI_DIAG_STATUS 0x2E
59 #define AD7768_REG_ADC_DIAG_STATUS 0x2F
60 #define AD7768_REG_DIG_DIAG_STATUS 0x30
61 #define AD7768_REG_MCLK_COUNTER 0x31
63 /* AD7768_REG_POWER_CLOCK */
64 #define AD7768_PWR_MCLK_DIV_MSK GENMASK(5, 4)
65 #define AD7768_PWR_MCLK_DIV(x) FIELD_PREP(AD7768_PWR_MCLK_DIV_MSK, x)
66 #define AD7768_PWR_PWRMODE_MSK GENMASK(1, 0)
67 #define AD7768_PWR_PWRMODE(x) FIELD_PREP(AD7768_PWR_PWRMODE_MSK, x)
69 /* AD7768_REG_DIGITAL_FILTER */
70 #define AD7768_DIG_FIL_FIL_MSK GENMASK(6, 4)
71 #define AD7768_DIG_FIL_FIL(x) FIELD_PREP(AD7768_DIG_FIL_FIL_MSK, x)
72 #define AD7768_DIG_FIL_DEC_MSK GENMASK(2, 0)
73 #define AD7768_DIG_FIL_DEC_RATE(x) FIELD_PREP(AD7768_DIG_FIL_DEC_MSK, x)
75 /* AD7768_REG_CONVERSION */
76 #define AD7768_CONV_MODE_MSK GENMASK(2, 0)
77 #define AD7768_CONV_MODE(x) FIELD_PREP(AD7768_CONV_MODE_MSK, x)
79 #define AD7768_RD_FLAG_MSK(x) (BIT(6) | ((x) & 0x3F))
80 #define AD7768_WR_FLAG_MSK(x) ((x) & 0x3F)
82 enum ad7768_conv_mode
{
96 enum ad7768_mclk_div
{
103 enum ad7768_dec_rate
{
104 AD7768_DEC_RATE_32
= 0,
105 AD7768_DEC_RATE_64
= 1,
106 AD7768_DEC_RATE_128
= 2,
107 AD7768_DEC_RATE_256
= 3,
108 AD7768_DEC_RATE_512
= 4,
109 AD7768_DEC_RATE_1024
= 5,
110 AD7768_DEC_RATE_8
= 9,
111 AD7768_DEC_RATE_16
= 10
114 struct ad7768_clk_configuration
{
115 enum ad7768_mclk_div mclk_div
;
116 enum ad7768_dec_rate dec_rate
;
117 unsigned int clk_div
;
118 enum ad7768_pwrmode pwrmode
;
121 static const struct ad7768_clk_configuration ad7768_clk_config
[] = {
122 { AD7768_MCLK_DIV_2
, AD7768_DEC_RATE_8
, 16, AD7768_FAST_MODE
},
123 { AD7768_MCLK_DIV_2
, AD7768_DEC_RATE_16
, 32, AD7768_FAST_MODE
},
124 { AD7768_MCLK_DIV_2
, AD7768_DEC_RATE_32
, 64, AD7768_FAST_MODE
},
125 { AD7768_MCLK_DIV_2
, AD7768_DEC_RATE_64
, 128, AD7768_FAST_MODE
},
126 { AD7768_MCLK_DIV_2
, AD7768_DEC_RATE_128
, 256, AD7768_FAST_MODE
},
127 { AD7768_MCLK_DIV_4
, AD7768_DEC_RATE_128
, 512, AD7768_MED_MODE
},
128 { AD7768_MCLK_DIV_4
, AD7768_DEC_RATE_256
, 1024, AD7768_MED_MODE
},
129 { AD7768_MCLK_DIV_4
, AD7768_DEC_RATE_512
, 2048, AD7768_MED_MODE
},
130 { AD7768_MCLK_DIV_4
, AD7768_DEC_RATE_1024
, 4096, AD7768_MED_MODE
},
131 { AD7768_MCLK_DIV_8
, AD7768_DEC_RATE_1024
, 8192, AD7768_MED_MODE
},
132 { AD7768_MCLK_DIV_16
, AD7768_DEC_RATE_1024
, 16384, AD7768_ECO_MODE
},
135 static const struct iio_chan_spec ad7768_channels
[] = {
138 .info_mask_separate
= BIT(IIO_CHAN_INFO_RAW
),
139 .info_mask_shared_by_type
= BIT(IIO_CHAN_INFO_SCALE
),
140 .info_mask_shared_by_all
= BIT(IIO_CHAN_INFO_SAMP_FREQ
),
149 .endianness
= IIO_BE
,
154 struct ad7768_state
{
155 struct spi_device
*spi
;
156 struct regulator
*vref
;
159 unsigned int mclk_freq
;
160 unsigned int samp_freq
;
161 struct completion completion
;
162 struct iio_trigger
*trig
;
163 struct gpio_desc
*gpio_sync_in
;
164 const char *labels
[ARRAY_SIZE(ad7768_channels
)];
166 * DMA (thus cache coherency maintenance) may require the
167 * transfer buffers to live in their own cache lines.
176 } data
__aligned(IIO_DMA_MINALIGN
);
179 static int ad7768_spi_reg_read(struct ad7768_state
*st
, unsigned int addr
,
185 shift
= 32 - (8 * len
);
186 st
->data
.d8
[0] = AD7768_RD_FLAG_MSK(addr
);
188 ret
= spi_write_then_read(st
->spi
, st
->data
.d8
, 1,
193 return (be32_to_cpu(st
->data
.d32
) >> shift
);
196 static int ad7768_spi_reg_write(struct ad7768_state
*st
,
200 st
->data
.d8
[0] = AD7768_WR_FLAG_MSK(addr
);
201 st
->data
.d8
[1] = val
& 0xFF;
203 return spi_write(st
->spi
, st
->data
.d8
, 2);
206 static int ad7768_set_mode(struct ad7768_state
*st
,
207 enum ad7768_conv_mode mode
)
211 regval
= ad7768_spi_reg_read(st
, AD7768_REG_CONVERSION
, 1);
215 regval
&= ~AD7768_CONV_MODE_MSK
;
216 regval
|= AD7768_CONV_MODE(mode
);
218 return ad7768_spi_reg_write(st
, AD7768_REG_CONVERSION
, regval
);
221 static int ad7768_scan_direct(struct iio_dev
*indio_dev
)
223 struct ad7768_state
*st
= iio_priv(indio_dev
);
226 reinit_completion(&st
->completion
);
228 ret
= ad7768_set_mode(st
, AD7768_ONE_SHOT
);
232 ret
= wait_for_completion_timeout(&st
->completion
,
233 msecs_to_jiffies(1000));
237 readval
= ad7768_spi_reg_read(st
, AD7768_REG_ADC_DATA
, 3);
241 * Any SPI configuration of the AD7768-1 can only be
242 * performed in continuous conversion mode.
244 ret
= ad7768_set_mode(st
, AD7768_CONTINUOUS
);
251 static int ad7768_reg_access(struct iio_dev
*indio_dev
,
253 unsigned int writeval
,
254 unsigned int *readval
)
256 struct ad7768_state
*st
= iio_priv(indio_dev
);
259 mutex_lock(&st
->lock
);
261 ret
= ad7768_spi_reg_read(st
, reg
, 1);
267 ret
= ad7768_spi_reg_write(st
, reg
, writeval
);
270 mutex_unlock(&st
->lock
);
275 static int ad7768_set_dig_fil(struct ad7768_state
*st
,
276 enum ad7768_dec_rate dec_rate
)
281 if (dec_rate
== AD7768_DEC_RATE_8
|| dec_rate
== AD7768_DEC_RATE_16
)
282 mode
= AD7768_DIG_FIL_FIL(dec_rate
);
284 mode
= AD7768_DIG_FIL_DEC_RATE(dec_rate
);
286 ret
= ad7768_spi_reg_write(st
, AD7768_REG_DIGITAL_FILTER
, mode
);
290 /* A sync-in pulse is required every time the filter dec rate changes */
291 gpiod_set_value(st
->gpio_sync_in
, 1);
292 gpiod_set_value(st
->gpio_sync_in
, 0);
297 static int ad7768_set_freq(struct ad7768_state
*st
,
300 unsigned int diff_new
, diff_old
, pwr_mode
, i
, idx
;
306 res
= DIV_ROUND_CLOSEST(st
->mclk_freq
, freq
);
308 /* Find the closest match for the desired sampling frequency */
309 for (i
= 0; i
< ARRAY_SIZE(ad7768_clk_config
); i
++) {
310 diff_new
= abs(res
- ad7768_clk_config
[i
].clk_div
);
311 if (diff_new
< diff_old
) {
318 * Set both the mclk_div and pwrmode with a single write to the
319 * POWER_CLOCK register
321 pwr_mode
= AD7768_PWR_MCLK_DIV(ad7768_clk_config
[idx
].mclk_div
) |
322 AD7768_PWR_PWRMODE(ad7768_clk_config
[idx
].pwrmode
);
323 ret
= ad7768_spi_reg_write(st
, AD7768_REG_POWER_CLOCK
, pwr_mode
);
327 ret
= ad7768_set_dig_fil(st
, ad7768_clk_config
[idx
].dec_rate
);
331 st
->samp_freq
= DIV_ROUND_CLOSEST(st
->mclk_freq
,
332 ad7768_clk_config
[idx
].clk_div
);
337 static ssize_t
ad7768_sampling_freq_avail(struct device
*dev
,
338 struct device_attribute
*attr
,
341 struct iio_dev
*indio_dev
= dev_to_iio_dev(dev
);
342 struct ad7768_state
*st
= iio_priv(indio_dev
);
346 for (i
= 0; i
< ARRAY_SIZE(ad7768_clk_config
); i
++) {
347 freq
= DIV_ROUND_CLOSEST(st
->mclk_freq
,
348 ad7768_clk_config
[i
].clk_div
);
349 len
+= scnprintf(buf
+ len
, PAGE_SIZE
- len
, "%d ", freq
);
357 static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(ad7768_sampling_freq_avail
);
359 static int ad7768_read_raw(struct iio_dev
*indio_dev
,
360 struct iio_chan_spec
const *chan
,
361 int *val
, int *val2
, long info
)
363 struct ad7768_state
*st
= iio_priv(indio_dev
);
367 case IIO_CHAN_INFO_RAW
:
368 ret
= iio_device_claim_direct_mode(indio_dev
);
372 ret
= ad7768_scan_direct(indio_dev
);
376 iio_device_release_direct_mode(indio_dev
);
382 case IIO_CHAN_INFO_SCALE
:
383 scale_uv
= regulator_get_voltage(st
->vref
);
387 *val
= (scale_uv
* 2) / 1000;
388 *val2
= chan
->scan_type
.realbits
;
390 return IIO_VAL_FRACTIONAL_LOG2
;
392 case IIO_CHAN_INFO_SAMP_FREQ
:
393 *val
= st
->samp_freq
;
401 static int ad7768_write_raw(struct iio_dev
*indio_dev
,
402 struct iio_chan_spec
const *chan
,
403 int val
, int val2
, long info
)
405 struct ad7768_state
*st
= iio_priv(indio_dev
);
408 case IIO_CHAN_INFO_SAMP_FREQ
:
409 return ad7768_set_freq(st
, val
);
415 static int ad7768_read_label(struct iio_dev
*indio_dev
,
416 const struct iio_chan_spec
*chan
, char *label
)
418 struct ad7768_state
*st
= iio_priv(indio_dev
);
420 return sprintf(label
, "%s\n", st
->labels
[chan
->channel
]);
423 static struct attribute
*ad7768_attributes
[] = {
424 &iio_dev_attr_sampling_frequency_available
.dev_attr
.attr
,
428 static const struct attribute_group ad7768_group
= {
429 .attrs
= ad7768_attributes
,
432 static const struct iio_info ad7768_info
= {
433 .attrs
= &ad7768_group
,
434 .read_raw
= &ad7768_read_raw
,
435 .write_raw
= &ad7768_write_raw
,
436 .read_label
= ad7768_read_label
,
437 .debugfs_reg_access
= &ad7768_reg_access
,
440 static int ad7768_setup(struct ad7768_state
*st
)
445 * Two writes to the SPI_RESET[1:0] bits are required to initiate
446 * a software reset. The bits must first be set to 11, and then
447 * to 10. When the sequence is detected, the reset occurs.
448 * See the datasheet, page 70.
450 ret
= ad7768_spi_reg_write(st
, AD7768_REG_SYNC_RESET
, 0x3);
454 ret
= ad7768_spi_reg_write(st
, AD7768_REG_SYNC_RESET
, 0x2);
458 st
->gpio_sync_in
= devm_gpiod_get(&st
->spi
->dev
, "adi,sync-in",
460 if (IS_ERR(st
->gpio_sync_in
))
461 return PTR_ERR(st
->gpio_sync_in
);
463 /* Set the default sampling frequency to 32000 kSPS */
464 return ad7768_set_freq(st
, 32000);
467 static irqreturn_t
ad7768_trigger_handler(int irq
, void *p
)
469 struct iio_poll_func
*pf
= p
;
470 struct iio_dev
*indio_dev
= pf
->indio_dev
;
471 struct ad7768_state
*st
= iio_priv(indio_dev
);
474 mutex_lock(&st
->lock
);
476 ret
= spi_read(st
->spi
, &st
->data
.scan
.chan
, 3);
480 iio_push_to_buffers_with_timestamp(indio_dev
, &st
->data
.scan
,
481 iio_get_time_ns(indio_dev
));
484 iio_trigger_notify_done(indio_dev
->trig
);
485 mutex_unlock(&st
->lock
);
490 static irqreturn_t
ad7768_interrupt(int irq
, void *dev_id
)
492 struct iio_dev
*indio_dev
= dev_id
;
493 struct ad7768_state
*st
= iio_priv(indio_dev
);
495 if (iio_buffer_enabled(indio_dev
))
496 iio_trigger_poll(st
->trig
);
498 complete(&st
->completion
);
503 static int ad7768_buffer_postenable(struct iio_dev
*indio_dev
)
505 struct ad7768_state
*st
= iio_priv(indio_dev
);
508 * Write a 1 to the LSB of the INTERFACE_FORMAT register to enter
509 * continuous read mode. Subsequent data reads do not require an
510 * initial 8-bit write to query the ADC_DATA register.
512 return ad7768_spi_reg_write(st
, AD7768_REG_INTERFACE_FORMAT
, 0x01);
515 static int ad7768_buffer_predisable(struct iio_dev
*indio_dev
)
517 struct ad7768_state
*st
= iio_priv(indio_dev
);
520 * To exit continuous read mode, perform a single read of the ADC_DATA
521 * reg (0x2C), which allows further configuration of the device.
523 return ad7768_spi_reg_read(st
, AD7768_REG_ADC_DATA
, 3);
526 static const struct iio_buffer_setup_ops ad7768_buffer_ops
= {
527 .postenable
= &ad7768_buffer_postenable
,
528 .predisable
= &ad7768_buffer_predisable
,
531 static const struct iio_trigger_ops ad7768_trigger_ops
= {
532 .validate_device
= iio_trigger_validate_own_device
,
535 static void ad7768_regulator_disable(void *data
)
537 struct ad7768_state
*st
= data
;
539 regulator_disable(st
->vref
);
542 static int ad7768_set_channel_label(struct iio_dev
*indio_dev
,
545 struct ad7768_state
*st
= iio_priv(indio_dev
);
546 struct device
*device
= indio_dev
->dev
.parent
;
550 device_for_each_child_node_scoped(device
, child
) {
551 if (fwnode_property_read_u32(child
, "reg", &crt_ch
))
554 if (crt_ch
>= num_channels
)
557 if (fwnode_property_read_string(child
, "label", &label
))
560 st
->labels
[crt_ch
] = label
;
566 static int ad7768_probe(struct spi_device
*spi
)
568 struct ad7768_state
*st
;
569 struct iio_dev
*indio_dev
;
572 indio_dev
= devm_iio_device_alloc(&spi
->dev
, sizeof(*st
));
576 st
= iio_priv(indio_dev
);
579 st
->vref
= devm_regulator_get(&spi
->dev
, "vref");
580 if (IS_ERR(st
->vref
))
581 return PTR_ERR(st
->vref
);
583 ret
= regulator_enable(st
->vref
);
585 dev_err(&spi
->dev
, "Failed to enable specified vref supply\n");
589 ret
= devm_add_action_or_reset(&spi
->dev
, ad7768_regulator_disable
, st
);
593 st
->mclk
= devm_clk_get_enabled(&spi
->dev
, "mclk");
594 if (IS_ERR(st
->mclk
))
595 return PTR_ERR(st
->mclk
);
597 st
->mclk_freq
= clk_get_rate(st
->mclk
);
599 mutex_init(&st
->lock
);
601 indio_dev
->channels
= ad7768_channels
;
602 indio_dev
->num_channels
= ARRAY_SIZE(ad7768_channels
);
603 indio_dev
->name
= spi_get_device_id(spi
)->name
;
604 indio_dev
->info
= &ad7768_info
;
605 indio_dev
->modes
= INDIO_DIRECT_MODE
;
607 ret
= ad7768_setup(st
);
609 dev_err(&spi
->dev
, "AD7768 setup failed\n");
613 st
->trig
= devm_iio_trigger_alloc(&spi
->dev
, "%s-dev%d",
615 iio_device_id(indio_dev
));
619 st
->trig
->ops
= &ad7768_trigger_ops
;
620 iio_trigger_set_drvdata(st
->trig
, indio_dev
);
621 ret
= devm_iio_trigger_register(&spi
->dev
, st
->trig
);
625 indio_dev
->trig
= iio_trigger_get(st
->trig
);
627 init_completion(&st
->completion
);
629 ret
= ad7768_set_channel_label(indio_dev
, ARRAY_SIZE(ad7768_channels
));
633 ret
= devm_request_irq(&spi
->dev
, spi
->irq
,
635 IRQF_TRIGGER_RISING
| IRQF_ONESHOT
,
636 indio_dev
->name
, indio_dev
);
640 ret
= devm_iio_triggered_buffer_setup(&spi
->dev
, indio_dev
,
641 &iio_pollfunc_store_time
,
642 &ad7768_trigger_handler
,
647 return devm_iio_device_register(&spi
->dev
, indio_dev
);
650 static const struct spi_device_id ad7768_id_table
[] = {
654 MODULE_DEVICE_TABLE(spi
, ad7768_id_table
);
656 static const struct of_device_id ad7768_of_match
[] = {
657 { .compatible
= "adi,ad7768-1" },
660 MODULE_DEVICE_TABLE(of
, ad7768_of_match
);
662 static struct spi_driver ad7768_driver
= {
665 .of_match_table
= ad7768_of_match
,
667 .probe
= ad7768_probe
,
668 .id_table
= ad7768_id_table
,
670 module_spi_driver(ad7768_driver
);
672 MODULE_AUTHOR("Stefan Popa <stefan.popa@analog.com>");
673 MODULE_DESCRIPTION("Analog Devices AD7768-1 ADC driver");
674 MODULE_LICENSE("GPL v2");