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) requires the
167 * transfer buffers to live in their own cache lines.
172 } data ____cacheline_aligned
;
175 static int ad7768_spi_reg_read(struct ad7768_state
*st
, unsigned int addr
,
181 shift
= 32 - (8 * len
);
182 st
->data
.d8
[0] = AD7768_RD_FLAG_MSK(addr
);
184 ret
= spi_write_then_read(st
->spi
, st
->data
.d8
, 1,
189 return (be32_to_cpu(st
->data
.d32
) >> shift
);
192 static int ad7768_spi_reg_write(struct ad7768_state
*st
,
196 st
->data
.d8
[0] = AD7768_WR_FLAG_MSK(addr
);
197 st
->data
.d8
[1] = val
& 0xFF;
199 return spi_write(st
->spi
, st
->data
.d8
, 2);
202 static int ad7768_set_mode(struct ad7768_state
*st
,
203 enum ad7768_conv_mode mode
)
207 regval
= ad7768_spi_reg_read(st
, AD7768_REG_CONVERSION
, 1);
211 regval
&= ~AD7768_CONV_MODE_MSK
;
212 regval
|= AD7768_CONV_MODE(mode
);
214 return ad7768_spi_reg_write(st
, AD7768_REG_CONVERSION
, regval
);
217 static int ad7768_scan_direct(struct iio_dev
*indio_dev
)
219 struct ad7768_state
*st
= iio_priv(indio_dev
);
222 reinit_completion(&st
->completion
);
224 ret
= ad7768_set_mode(st
, AD7768_ONE_SHOT
);
228 ret
= wait_for_completion_timeout(&st
->completion
,
229 msecs_to_jiffies(1000));
233 readval
= ad7768_spi_reg_read(st
, AD7768_REG_ADC_DATA
, 3);
237 * Any SPI configuration of the AD7768-1 can only be
238 * performed in continuous conversion mode.
240 ret
= ad7768_set_mode(st
, AD7768_CONTINUOUS
);
247 static int ad7768_reg_access(struct iio_dev
*indio_dev
,
249 unsigned int writeval
,
250 unsigned int *readval
)
252 struct ad7768_state
*st
= iio_priv(indio_dev
);
255 mutex_lock(&st
->lock
);
257 ret
= ad7768_spi_reg_read(st
, reg
, 1);
263 ret
= ad7768_spi_reg_write(st
, reg
, writeval
);
266 mutex_unlock(&st
->lock
);
271 static int ad7768_set_dig_fil(struct ad7768_state
*st
,
272 enum ad7768_dec_rate dec_rate
)
277 if (dec_rate
== AD7768_DEC_RATE_8
|| dec_rate
== AD7768_DEC_RATE_16
)
278 mode
= AD7768_DIG_FIL_FIL(dec_rate
);
280 mode
= AD7768_DIG_FIL_DEC_RATE(dec_rate
);
282 ret
= ad7768_spi_reg_write(st
, AD7768_REG_DIGITAL_FILTER
, mode
);
286 /* A sync-in pulse is required every time the filter dec rate changes */
287 gpiod_set_value(st
->gpio_sync_in
, 1);
288 gpiod_set_value(st
->gpio_sync_in
, 0);
293 static int ad7768_set_freq(struct ad7768_state
*st
,
296 unsigned int diff_new
, diff_old
, pwr_mode
, i
, idx
;
302 res
= DIV_ROUND_CLOSEST(st
->mclk_freq
, freq
);
304 /* Find the closest match for the desired sampling frequency */
305 for (i
= 0; i
< ARRAY_SIZE(ad7768_clk_config
); i
++) {
306 diff_new
= abs(res
- ad7768_clk_config
[i
].clk_div
);
307 if (diff_new
< diff_old
) {
314 * Set both the mclk_div and pwrmode with a single write to the
315 * POWER_CLOCK register
317 pwr_mode
= AD7768_PWR_MCLK_DIV(ad7768_clk_config
[idx
].mclk_div
) |
318 AD7768_PWR_PWRMODE(ad7768_clk_config
[idx
].pwrmode
);
319 ret
= ad7768_spi_reg_write(st
, AD7768_REG_POWER_CLOCK
, pwr_mode
);
323 ret
= ad7768_set_dig_fil(st
, ad7768_clk_config
[idx
].dec_rate
);
327 st
->samp_freq
= DIV_ROUND_CLOSEST(st
->mclk_freq
,
328 ad7768_clk_config
[idx
].clk_div
);
333 static ssize_t
ad7768_sampling_freq_avail(struct device
*dev
,
334 struct device_attribute
*attr
,
337 struct iio_dev
*indio_dev
= dev_to_iio_dev(dev
);
338 struct ad7768_state
*st
= iio_priv(indio_dev
);
342 for (i
= 0; i
< ARRAY_SIZE(ad7768_clk_config
); i
++) {
343 freq
= DIV_ROUND_CLOSEST(st
->mclk_freq
,
344 ad7768_clk_config
[i
].clk_div
);
345 len
+= scnprintf(buf
+ len
, PAGE_SIZE
- len
, "%d ", freq
);
353 static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(ad7768_sampling_freq_avail
);
355 static int ad7768_read_raw(struct iio_dev
*indio_dev
,
356 struct iio_chan_spec
const *chan
,
357 int *val
, int *val2
, long info
)
359 struct ad7768_state
*st
= iio_priv(indio_dev
);
363 case IIO_CHAN_INFO_RAW
:
364 ret
= iio_device_claim_direct_mode(indio_dev
);
368 ret
= ad7768_scan_direct(indio_dev
);
372 iio_device_release_direct_mode(indio_dev
);
378 case IIO_CHAN_INFO_SCALE
:
379 scale_uv
= regulator_get_voltage(st
->vref
);
383 *val
= (scale_uv
* 2) / 1000;
384 *val2
= chan
->scan_type
.realbits
;
386 return IIO_VAL_FRACTIONAL_LOG2
;
388 case IIO_CHAN_INFO_SAMP_FREQ
:
389 *val
= st
->samp_freq
;
397 static int ad7768_write_raw(struct iio_dev
*indio_dev
,
398 struct iio_chan_spec
const *chan
,
399 int val
, int val2
, long info
)
401 struct ad7768_state
*st
= iio_priv(indio_dev
);
404 case IIO_CHAN_INFO_SAMP_FREQ
:
405 return ad7768_set_freq(st
, val
);
411 static int ad7768_read_label(struct iio_dev
*indio_dev
,
412 const struct iio_chan_spec
*chan
, char *label
)
414 struct ad7768_state
*st
= iio_priv(indio_dev
);
416 return sprintf(label
, "%s\n", st
->labels
[chan
->channel
]);
419 static struct attribute
*ad7768_attributes
[] = {
420 &iio_dev_attr_sampling_frequency_available
.dev_attr
.attr
,
424 static const struct attribute_group ad7768_group
= {
425 .attrs
= ad7768_attributes
,
428 static const struct iio_info ad7768_info
= {
429 .attrs
= &ad7768_group
,
430 .read_raw
= &ad7768_read_raw
,
431 .write_raw
= &ad7768_write_raw
,
432 .read_label
= ad7768_read_label
,
433 .debugfs_reg_access
= &ad7768_reg_access
,
436 static int ad7768_setup(struct ad7768_state
*st
)
441 * Two writes to the SPI_RESET[1:0] bits are required to initiate
442 * a software reset. The bits must first be set to 11, and then
443 * to 10. When the sequence is detected, the reset occurs.
444 * See the datasheet, page 70.
446 ret
= ad7768_spi_reg_write(st
, AD7768_REG_SYNC_RESET
, 0x3);
450 ret
= ad7768_spi_reg_write(st
, AD7768_REG_SYNC_RESET
, 0x2);
454 st
->gpio_sync_in
= devm_gpiod_get(&st
->spi
->dev
, "adi,sync-in",
456 if (IS_ERR(st
->gpio_sync_in
))
457 return PTR_ERR(st
->gpio_sync_in
);
459 /* Set the default sampling frequency to 32000 kSPS */
460 return ad7768_set_freq(st
, 32000);
463 static irqreturn_t
ad7768_trigger_handler(int irq
, void *p
)
465 struct iio_poll_func
*pf
= p
;
466 struct iio_dev
*indio_dev
= pf
->indio_dev
;
467 struct ad7768_state
*st
= iio_priv(indio_dev
);
470 mutex_lock(&st
->lock
);
472 ret
= spi_read(st
->spi
, &st
->data
.d32
, 3);
476 iio_push_to_buffers_with_timestamp(indio_dev
, &st
->data
.d32
,
477 iio_get_time_ns(indio_dev
));
479 iio_trigger_notify_done(indio_dev
->trig
);
481 mutex_unlock(&st
->lock
);
486 static irqreturn_t
ad7768_interrupt(int irq
, void *dev_id
)
488 struct iio_dev
*indio_dev
= dev_id
;
489 struct ad7768_state
*st
= iio_priv(indio_dev
);
491 if (iio_buffer_enabled(indio_dev
))
492 iio_trigger_poll(st
->trig
);
494 complete(&st
->completion
);
499 static int ad7768_buffer_postenable(struct iio_dev
*indio_dev
)
501 struct ad7768_state
*st
= iio_priv(indio_dev
);
504 * Write a 1 to the LSB of the INTERFACE_FORMAT register to enter
505 * continuous read mode. Subsequent data reads do not require an
506 * initial 8-bit write to query the ADC_DATA register.
508 return ad7768_spi_reg_write(st
, AD7768_REG_INTERFACE_FORMAT
, 0x01);
511 static int ad7768_buffer_predisable(struct iio_dev
*indio_dev
)
513 struct ad7768_state
*st
= iio_priv(indio_dev
);
516 * To exit continuous read mode, perform a single read of the ADC_DATA
517 * reg (0x2C), which allows further configuration of the device.
519 return ad7768_spi_reg_read(st
, AD7768_REG_ADC_DATA
, 3);
522 static const struct iio_buffer_setup_ops ad7768_buffer_ops
= {
523 .postenable
= &ad7768_buffer_postenable
,
524 .predisable
= &ad7768_buffer_predisable
,
527 static const struct iio_trigger_ops ad7768_trigger_ops
= {
528 .validate_device
= iio_trigger_validate_own_device
,
531 static void ad7768_regulator_disable(void *data
)
533 struct ad7768_state
*st
= data
;
535 regulator_disable(st
->vref
);
538 static void ad7768_clk_disable(void *data
)
540 struct ad7768_state
*st
= data
;
542 clk_disable_unprepare(st
->mclk
);
545 static int ad7768_set_channel_label(struct iio_dev
*indio_dev
,
548 struct ad7768_state
*st
= iio_priv(indio_dev
);
549 struct device
*device
= indio_dev
->dev
.parent
;
550 struct fwnode_handle
*fwnode
;
551 struct fwnode_handle
*child
;
555 fwnode
= dev_fwnode(device
);
556 fwnode_for_each_child_node(fwnode
, child
) {
557 if (fwnode_property_read_u32(child
, "reg", &crt_ch
))
560 if (crt_ch
>= num_channels
)
563 if (fwnode_property_read_string(child
, "label", &label
))
566 st
->labels
[crt_ch
] = label
;
572 static int ad7768_probe(struct spi_device
*spi
)
574 struct ad7768_state
*st
;
575 struct iio_dev
*indio_dev
;
578 indio_dev
= devm_iio_device_alloc(&spi
->dev
, sizeof(*st
));
582 st
= iio_priv(indio_dev
);
585 st
->vref
= devm_regulator_get(&spi
->dev
, "vref");
586 if (IS_ERR(st
->vref
))
587 return PTR_ERR(st
->vref
);
589 ret
= regulator_enable(st
->vref
);
591 dev_err(&spi
->dev
, "Failed to enable specified vref supply\n");
595 ret
= devm_add_action_or_reset(&spi
->dev
, ad7768_regulator_disable
, st
);
599 st
->mclk
= devm_clk_get(&spi
->dev
, "mclk");
600 if (IS_ERR(st
->mclk
))
601 return PTR_ERR(st
->mclk
);
603 ret
= clk_prepare_enable(st
->mclk
);
607 ret
= devm_add_action_or_reset(&spi
->dev
, ad7768_clk_disable
, st
);
611 st
->mclk_freq
= clk_get_rate(st
->mclk
);
613 spi_set_drvdata(spi
, indio_dev
);
614 mutex_init(&st
->lock
);
616 indio_dev
->channels
= ad7768_channels
;
617 indio_dev
->num_channels
= ARRAY_SIZE(ad7768_channels
);
618 indio_dev
->name
= spi_get_device_id(spi
)->name
;
619 indio_dev
->info
= &ad7768_info
;
620 indio_dev
->modes
= INDIO_DIRECT_MODE
| INDIO_BUFFER_TRIGGERED
;
622 ret
= ad7768_setup(st
);
624 dev_err(&spi
->dev
, "AD7768 setup failed\n");
628 st
->trig
= devm_iio_trigger_alloc(&spi
->dev
, "%s-dev%d",
629 indio_dev
->name
, indio_dev
->id
);
633 st
->trig
->ops
= &ad7768_trigger_ops
;
634 st
->trig
->dev
.parent
= &spi
->dev
;
635 iio_trigger_set_drvdata(st
->trig
, indio_dev
);
636 ret
= devm_iio_trigger_register(&spi
->dev
, st
->trig
);
640 indio_dev
->trig
= iio_trigger_get(st
->trig
);
642 init_completion(&st
->completion
);
644 ret
= ad7768_set_channel_label(indio_dev
, ARRAY_SIZE(ad7768_channels
));
648 ret
= devm_request_irq(&spi
->dev
, spi
->irq
,
650 IRQF_TRIGGER_RISING
| IRQF_ONESHOT
,
651 indio_dev
->name
, indio_dev
);
655 ret
= devm_iio_triggered_buffer_setup(&spi
->dev
, indio_dev
,
656 &iio_pollfunc_store_time
,
657 &ad7768_trigger_handler
,
662 return devm_iio_device_register(&spi
->dev
, indio_dev
);
665 static const struct spi_device_id ad7768_id_table
[] = {
669 MODULE_DEVICE_TABLE(spi
, ad7768_id_table
);
671 static const struct of_device_id ad7768_of_match
[] = {
672 { .compatible
= "adi,ad7768-1" },
675 MODULE_DEVICE_TABLE(of
, ad7768_of_match
);
677 static struct spi_driver ad7768_driver
= {
680 .of_match_table
= ad7768_of_match
,
682 .probe
= ad7768_probe
,
683 .id_table
= ad7768_id_table
,
685 module_spi_driver(ad7768_driver
);
687 MODULE_AUTHOR("Stefan Popa <stefan.popa@analog.com>");
688 MODULE_DESCRIPTION("Analog Devices AD7768-1 ADC driver");
689 MODULE_LICENSE("GPL v2");