1 // SPDX-License-Identifier: GPL-2.0+
3 * AD7124 SPI ADC driver
5 * Copyright 2018 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/interrupt.h>
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/regulator/consumer.h>
16 #include <linux/spi/spi.h>
18 #include <linux/iio/iio.h>
19 #include <linux/iio/adc/ad_sigma_delta.h>
20 #include <linux/iio/sysfs.h>
22 /* AD7124 registers */
23 #define AD7124_COMMS 0x00
24 #define AD7124_STATUS 0x00
25 #define AD7124_ADC_CONTROL 0x01
26 #define AD7124_DATA 0x02
27 #define AD7124_IO_CONTROL_1 0x03
28 #define AD7124_IO_CONTROL_2 0x04
29 #define AD7124_ID 0x05
30 #define AD7124_ERROR 0x06
31 #define AD7124_ERROR_EN 0x07
32 #define AD7124_MCLK_COUNT 0x08
33 #define AD7124_CHANNEL(x) (0x09 + (x))
34 #define AD7124_CONFIG(x) (0x19 + (x))
35 #define AD7124_FILTER(x) (0x21 + (x))
36 #define AD7124_OFFSET(x) (0x29 + (x))
37 #define AD7124_GAIN(x) (0x31 + (x))
40 #define AD7124_STATUS_POR_FLAG_MSK BIT(4)
42 /* AD7124_ADC_CONTROL */
43 #define AD7124_ADC_CTRL_REF_EN_MSK BIT(8)
44 #define AD7124_ADC_CTRL_REF_EN(x) FIELD_PREP(AD7124_ADC_CTRL_REF_EN_MSK, x)
45 #define AD7124_ADC_CTRL_PWR_MSK GENMASK(7, 6)
46 #define AD7124_ADC_CTRL_PWR(x) FIELD_PREP(AD7124_ADC_CTRL_PWR_MSK, x)
47 #define AD7124_ADC_CTRL_MODE_MSK GENMASK(5, 2)
48 #define AD7124_ADC_CTRL_MODE(x) FIELD_PREP(AD7124_ADC_CTRL_MODE_MSK, x)
50 /* AD7124_CHANNEL_X */
51 #define AD7124_CHANNEL_EN_MSK BIT(15)
52 #define AD7124_CHANNEL_EN(x) FIELD_PREP(AD7124_CHANNEL_EN_MSK, x)
53 #define AD7124_CHANNEL_SETUP_MSK GENMASK(14, 12)
54 #define AD7124_CHANNEL_SETUP(x) FIELD_PREP(AD7124_CHANNEL_SETUP_MSK, x)
55 #define AD7124_CHANNEL_AINP_MSK GENMASK(9, 5)
56 #define AD7124_CHANNEL_AINP(x) FIELD_PREP(AD7124_CHANNEL_AINP_MSK, x)
57 #define AD7124_CHANNEL_AINM_MSK GENMASK(4, 0)
58 #define AD7124_CHANNEL_AINM(x) FIELD_PREP(AD7124_CHANNEL_AINM_MSK, x)
61 #define AD7124_CONFIG_BIPOLAR_MSK BIT(11)
62 #define AD7124_CONFIG_BIPOLAR(x) FIELD_PREP(AD7124_CONFIG_BIPOLAR_MSK, x)
63 #define AD7124_CONFIG_REF_SEL_MSK GENMASK(4, 3)
64 #define AD7124_CONFIG_REF_SEL(x) FIELD_PREP(AD7124_CONFIG_REF_SEL_MSK, x)
65 #define AD7124_CONFIG_PGA_MSK GENMASK(2, 0)
66 #define AD7124_CONFIG_PGA(x) FIELD_PREP(AD7124_CONFIG_PGA_MSK, x)
67 #define AD7124_CONFIG_IN_BUFF_MSK GENMASK(7, 6)
68 #define AD7124_CONFIG_IN_BUFF(x) FIELD_PREP(AD7124_CONFIG_IN_BUFF_MSK, x)
71 #define AD7124_FILTER_FS_MSK GENMASK(10, 0)
72 #define AD7124_FILTER_FS(x) FIELD_PREP(AD7124_FILTER_FS_MSK, x)
73 #define AD7124_FILTER_TYPE_MSK GENMASK(23, 21)
74 #define AD7124_FILTER_TYPE_SEL(x) FIELD_PREP(AD7124_FILTER_TYPE_MSK, x)
76 #define AD7124_SINC3_FILTER 2
77 #define AD7124_SINC4_FILTER 0
91 enum ad7124_power_mode
{
97 static const unsigned int ad7124_gain
[8] = {
98 1, 2, 4, 8, 16, 32, 64, 128
101 static const unsigned int ad7124_reg_size
[] = {
102 1, 2, 3, 3, 2, 1, 3, 3, 1, 2, 2, 2, 2,
103 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
104 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
105 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
109 static const int ad7124_master_clk_freq_hz
[3] = {
110 [AD7124_LOW_POWER
] = 76800,
111 [AD7124_MID_POWER
] = 153600,
112 [AD7124_FULL_POWER
] = 614400,
115 static const char * const ad7124_ref_names
[] = {
116 [AD7124_REFIN1
] = "refin1",
117 [AD7124_REFIN2
] = "refin2",
118 [AD7124_INT_REF
] = "int",
119 [AD7124_AVDD_REF
] = "avdd",
122 struct ad7124_chip_info
{
123 unsigned int num_inputs
;
126 struct ad7124_channel_config
{
127 enum ad7124_ref_sel refsel
;
132 unsigned int vref_mv
;
133 unsigned int pga_bits
;
135 unsigned int filter_type
;
138 struct ad7124_state
{
139 const struct ad7124_chip_info
*chip_info
;
140 struct ad_sigma_delta sd
;
141 struct ad7124_channel_config
*channel_config
;
142 struct regulator
*vref
[4];
144 unsigned int adc_control
;
145 unsigned int num_channels
;
148 static const struct iio_chan_spec ad7124_channel_template
= {
152 .info_mask_separate
= BIT(IIO_CHAN_INFO_RAW
) |
153 BIT(IIO_CHAN_INFO_SCALE
) |
154 BIT(IIO_CHAN_INFO_OFFSET
) |
155 BIT(IIO_CHAN_INFO_SAMP_FREQ
) |
156 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
),
162 .endianness
= IIO_BE
,
166 static struct ad7124_chip_info ad7124_chip_info_tbl
[] = {
175 static int ad7124_find_closest_match(const int *array
,
176 unsigned int size
, int val
)
179 unsigned int diff_new
, diff_old
;
184 for (i
= 0; i
< size
; i
++) {
185 diff_new
= abs(val
- array
[i
]);
186 if (diff_new
< diff_old
) {
195 static int ad7124_spi_write_mask(struct ad7124_state
*st
,
201 unsigned int readval
;
204 ret
= ad_sd_read_reg(&st
->sd
, addr
, bytes
, &readval
);
211 return ad_sd_write_reg(&st
->sd
, addr
, bytes
, readval
);
214 static int ad7124_set_mode(struct ad_sigma_delta
*sd
,
215 enum ad_sigma_delta_mode mode
)
217 struct ad7124_state
*st
= container_of(sd
, struct ad7124_state
, sd
);
219 st
->adc_control
&= ~AD7124_ADC_CTRL_MODE_MSK
;
220 st
->adc_control
|= AD7124_ADC_CTRL_MODE(mode
);
222 return ad_sd_write_reg(&st
->sd
, AD7124_ADC_CONTROL
, 2, st
->adc_control
);
225 static int ad7124_set_channel(struct ad_sigma_delta
*sd
, unsigned int channel
)
227 struct ad7124_state
*st
= container_of(sd
, struct ad7124_state
, sd
);
230 val
= st
->channel_config
[channel
].ain
| AD7124_CHANNEL_EN(1) |
231 AD7124_CHANNEL_SETUP(channel
);
233 return ad_sd_write_reg(&st
->sd
, AD7124_CHANNEL(channel
), 2, val
);
236 static const struct ad_sigma_delta_info ad7124_sigma_delta_info
= {
237 .set_channel
= ad7124_set_channel
,
238 .set_mode
= ad7124_set_mode
,
239 .has_registers
= true,
242 .data_reg
= AD7124_DATA
,
243 .irq_flags
= IRQF_TRIGGER_FALLING
,
246 static int ad7124_set_channel_odr(struct ad7124_state
*st
,
247 unsigned int channel
,
250 unsigned int fclk
, odr_sel_bits
;
253 fclk
= clk_get_rate(st
->mclk
);
255 * FS[10:0] = fCLK / (fADC x 32) where:
256 * fADC is the output data rate
257 * fCLK is the master clock frequency
258 * FS[10:0] are the bits in the filter register
259 * FS[10:0] can have a value from 1 to 2047
261 odr_sel_bits
= DIV_ROUND_CLOSEST(fclk
, odr
* 32);
262 if (odr_sel_bits
< 1)
264 else if (odr_sel_bits
> 2047)
267 ret
= ad7124_spi_write_mask(st
, AD7124_FILTER(channel
),
268 AD7124_FILTER_FS_MSK
,
269 AD7124_FILTER_FS(odr_sel_bits
), 3);
272 /* fADC = fCLK / (FS[10:0] x 32) */
273 st
->channel_config
[channel
].odr
=
274 DIV_ROUND_CLOSEST(fclk
, odr_sel_bits
* 32);
279 static int ad7124_set_channel_gain(struct ad7124_state
*st
,
280 unsigned int channel
,
286 res
= ad7124_find_closest_match(ad7124_gain
,
287 ARRAY_SIZE(ad7124_gain
), gain
);
288 ret
= ad7124_spi_write_mask(st
, AD7124_CONFIG(channel
),
289 AD7124_CONFIG_PGA_MSK
,
290 AD7124_CONFIG_PGA(res
), 2);
294 st
->channel_config
[channel
].pga_bits
= res
;
299 static int ad7124_get_3db_filter_freq(struct ad7124_state
*st
,
300 unsigned int channel
)
304 fadc
= st
->channel_config
[channel
].odr
;
306 switch (st
->channel_config
[channel
].filter_type
) {
307 case AD7124_SINC3_FILTER
:
308 return DIV_ROUND_CLOSEST(fadc
* 230, 1000);
309 case AD7124_SINC4_FILTER
:
310 return DIV_ROUND_CLOSEST(fadc
* 262, 1000);
316 static int ad7124_set_3db_filter_freq(struct ad7124_state
*st
,
317 unsigned int channel
,
320 unsigned int sinc4_3db_odr
;
321 unsigned int sinc3_3db_odr
;
322 unsigned int new_filter
;
323 unsigned int new_odr
;
325 sinc4_3db_odr
= DIV_ROUND_CLOSEST(freq
* 1000, 230);
326 sinc3_3db_odr
= DIV_ROUND_CLOSEST(freq
* 1000, 262);
328 if (sinc4_3db_odr
> sinc3_3db_odr
) {
329 new_filter
= AD7124_SINC3_FILTER
;
330 new_odr
= sinc4_3db_odr
;
332 new_filter
= AD7124_SINC4_FILTER
;
333 new_odr
= sinc3_3db_odr
;
336 if (st
->channel_config
[channel
].filter_type
!= new_filter
) {
339 st
->channel_config
[channel
].filter_type
= new_filter
;
340 ret
= ad7124_spi_write_mask(st
, AD7124_FILTER(channel
),
341 AD7124_FILTER_TYPE_MSK
,
342 AD7124_FILTER_TYPE_SEL(new_filter
),
348 return ad7124_set_channel_odr(st
, channel
, new_odr
);
351 static int ad7124_read_raw(struct iio_dev
*indio_dev
,
352 struct iio_chan_spec
const *chan
,
353 int *val
, int *val2
, long info
)
355 struct ad7124_state
*st
= iio_priv(indio_dev
);
359 case IIO_CHAN_INFO_RAW
:
360 ret
= ad_sigma_delta_single_conversion(indio_dev
, chan
, val
);
364 /* After the conversion is performed, disable the channel */
365 ret
= ad_sd_write_reg(&st
->sd
,
366 AD7124_CHANNEL(chan
->address
), 2,
367 st
->channel_config
[chan
->address
].ain
|
368 AD7124_CHANNEL_EN(0));
373 case IIO_CHAN_INFO_SCALE
:
374 idx
= st
->channel_config
[chan
->address
].pga_bits
;
375 *val
= st
->channel_config
[chan
->address
].vref_mv
;
376 if (st
->channel_config
[chan
->address
].bipolar
)
377 *val2
= chan
->scan_type
.realbits
- 1 + idx
;
379 *val2
= chan
->scan_type
.realbits
+ idx
;
381 return IIO_VAL_FRACTIONAL_LOG2
;
382 case IIO_CHAN_INFO_OFFSET
:
383 if (st
->channel_config
[chan
->address
].bipolar
)
384 *val
= -(1 << (chan
->scan_type
.realbits
- 1));
389 case IIO_CHAN_INFO_SAMP_FREQ
:
390 *val
= st
->channel_config
[chan
->address
].odr
;
393 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
:
394 *val
= ad7124_get_3db_filter_freq(st
, chan
->scan_index
);
401 static int ad7124_write_raw(struct iio_dev
*indio_dev
,
402 struct iio_chan_spec
const *chan
,
403 int val
, int val2
, long info
)
405 struct ad7124_state
*st
= iio_priv(indio_dev
);
406 unsigned int res
, gain
, full_scale
, vref
;
409 case IIO_CHAN_INFO_SAMP_FREQ
:
413 return ad7124_set_channel_odr(st
, chan
->address
, val
);
414 case IIO_CHAN_INFO_SCALE
:
418 if (st
->channel_config
[chan
->address
].bipolar
)
419 full_scale
= 1 << (chan
->scan_type
.realbits
- 1);
421 full_scale
= 1 << chan
->scan_type
.realbits
;
423 vref
= st
->channel_config
[chan
->address
].vref_mv
* 1000000LL;
424 res
= DIV_ROUND_CLOSEST(vref
, full_scale
);
425 gain
= DIV_ROUND_CLOSEST(res
, val2
);
427 return ad7124_set_channel_gain(st
, chan
->address
, gain
);
428 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
:
432 return ad7124_set_3db_filter_freq(st
, chan
->address
, val
);
438 static int ad7124_reg_access(struct iio_dev
*indio_dev
,
440 unsigned int writeval
,
441 unsigned int *readval
)
443 struct ad7124_state
*st
= iio_priv(indio_dev
);
446 if (reg
>= ARRAY_SIZE(ad7124_reg_size
))
450 ret
= ad_sd_read_reg(&st
->sd
, reg
, ad7124_reg_size
[reg
],
453 ret
= ad_sd_write_reg(&st
->sd
, reg
, ad7124_reg_size
[reg
],
459 static IIO_CONST_ATTR(in_voltage_scale_available
,
460 "0.000001164 0.000002328 0.000004656 0.000009313 0.000018626 0.000037252 0.000074505 0.000149011 0.000298023");
462 static struct attribute
*ad7124_attributes
[] = {
463 &iio_const_attr_in_voltage_scale_available
.dev_attr
.attr
,
467 static const struct attribute_group ad7124_attrs_group
= {
468 .attrs
= ad7124_attributes
,
471 static const struct iio_info ad7124_info
= {
472 .read_raw
= ad7124_read_raw
,
473 .write_raw
= ad7124_write_raw
,
474 .debugfs_reg_access
= &ad7124_reg_access
,
475 .validate_trigger
= ad_sd_validate_trigger
,
476 .attrs
= &ad7124_attrs_group
,
479 static int ad7124_soft_reset(struct ad7124_state
*st
)
481 unsigned int readval
, timeout
;
484 ret
= ad_sd_reset(&st
->sd
, 64);
490 ret
= ad_sd_read_reg(&st
->sd
, AD7124_STATUS
, 1, &readval
);
494 if (!(readval
& AD7124_STATUS_POR_FLAG_MSK
))
497 /* The AD7124 requires typically 2ms to power up and settle */
498 usleep_range(100, 2000);
501 dev_err(&st
->sd
.spi
->dev
, "Soft reset failed\n");
506 static int ad7124_init_channel_vref(struct ad7124_state
*st
,
507 unsigned int channel_number
)
509 unsigned int refsel
= st
->channel_config
[channel_number
].refsel
;
514 case AD7124_AVDD_REF
:
515 if (IS_ERR(st
->vref
[refsel
])) {
516 dev_err(&st
->sd
.spi
->dev
,
517 "Error, trying to use external voltage reference without a %s regulator.\n",
518 ad7124_ref_names
[refsel
]);
519 return PTR_ERR(st
->vref
[refsel
]);
521 st
->channel_config
[channel_number
].vref_mv
=
522 regulator_get_voltage(st
->vref
[refsel
]);
523 /* Conversion from uV to mV */
524 st
->channel_config
[channel_number
].vref_mv
/= 1000;
527 st
->channel_config
[channel_number
].vref_mv
= 2500;
528 st
->adc_control
&= ~AD7124_ADC_CTRL_REF_EN_MSK
;
529 st
->adc_control
|= AD7124_ADC_CTRL_REF_EN(1);
530 return ad_sd_write_reg(&st
->sd
, AD7124_ADC_CONTROL
,
533 dev_err(&st
->sd
.spi
->dev
, "Invalid reference %d\n", refsel
);
540 static int ad7124_of_parse_channel_config(struct iio_dev
*indio_dev
,
541 struct device_node
*np
)
543 struct ad7124_state
*st
= iio_priv(indio_dev
);
544 struct device_node
*child
;
545 struct iio_chan_spec
*chan
;
546 struct ad7124_channel_config
*chan_config
;
547 unsigned int ain
[2], channel
= 0, tmp
;
550 st
->num_channels
= of_get_available_child_count(np
);
551 if (!st
->num_channels
) {
552 dev_err(indio_dev
->dev
.parent
, "no channel children\n");
556 chan
= devm_kcalloc(indio_dev
->dev
.parent
, st
->num_channels
,
557 sizeof(*chan
), GFP_KERNEL
);
561 chan_config
= devm_kcalloc(indio_dev
->dev
.parent
, st
->num_channels
,
562 sizeof(*chan_config
), GFP_KERNEL
);
566 indio_dev
->channels
= chan
;
567 indio_dev
->num_channels
= st
->num_channels
;
568 st
->channel_config
= chan_config
;
570 for_each_available_child_of_node(np
, child
) {
571 ret
= of_property_read_u32(child
, "reg", &channel
);
575 ret
= of_property_read_u32_array(child
, "diff-channels",
580 st
->channel_config
[channel
].ain
= AD7124_CHANNEL_AINP(ain
[0]) |
581 AD7124_CHANNEL_AINM(ain
[1]);
582 st
->channel_config
[channel
].bipolar
=
583 of_property_read_bool(child
, "bipolar");
585 ret
= of_property_read_u32(child
, "adi,reference-select", &tmp
);
587 st
->channel_config
[channel
].refsel
= AD7124_INT_REF
;
589 st
->channel_config
[channel
].refsel
= tmp
;
591 st
->channel_config
[channel
].buf_positive
=
592 of_property_read_bool(child
, "adi,buffered-positive");
593 st
->channel_config
[channel
].buf_negative
=
594 of_property_read_bool(child
, "adi,buffered-negative");
596 chan
[channel
] = ad7124_channel_template
;
597 chan
[channel
].address
= channel
;
598 chan
[channel
].scan_index
= channel
;
599 chan
[channel
].channel
= ain
[0];
600 chan
[channel
].channel2
= ain
[1];
610 static int ad7124_setup(struct ad7124_state
*st
)
612 unsigned int val
, fclk
, power_mode
;
615 fclk
= clk_get_rate(st
->mclk
);
619 /* The power mode changes the master clock frequency */
620 power_mode
= ad7124_find_closest_match(ad7124_master_clk_freq_hz
,
621 ARRAY_SIZE(ad7124_master_clk_freq_hz
),
623 if (fclk
!= ad7124_master_clk_freq_hz
[power_mode
]) {
624 ret
= clk_set_rate(st
->mclk
, fclk
);
629 /* Set the power mode */
630 st
->adc_control
&= ~AD7124_ADC_CTRL_PWR_MSK
;
631 st
->adc_control
|= AD7124_ADC_CTRL_PWR(power_mode
);
632 ret
= ad_sd_write_reg(&st
->sd
, AD7124_ADC_CONTROL
, 2, st
->adc_control
);
636 for (i
= 0; i
< st
->num_channels
; i
++) {
637 val
= st
->channel_config
[i
].ain
| AD7124_CHANNEL_SETUP(i
);
638 ret
= ad_sd_write_reg(&st
->sd
, AD7124_CHANNEL(i
), 2, val
);
642 ret
= ad7124_init_channel_vref(st
, i
);
646 tmp
= (st
->channel_config
[i
].buf_positive
<< 1) +
647 st
->channel_config
[i
].buf_negative
;
649 val
= AD7124_CONFIG_BIPOLAR(st
->channel_config
[i
].bipolar
) |
650 AD7124_CONFIG_REF_SEL(st
->channel_config
[i
].refsel
) |
651 AD7124_CONFIG_IN_BUFF(tmp
);
652 ret
= ad_sd_write_reg(&st
->sd
, AD7124_CONFIG(i
), 2, val
);
656 * 9.38 SPS is the minimum output data rate supported
657 * regardless of the selected power mode. Round it up to 10 and
658 * set all the enabled channels to this default value.
660 ret
= ad7124_set_channel_odr(st
, i
, 10);
666 static int ad7124_probe(struct spi_device
*spi
)
668 const struct spi_device_id
*id
;
669 struct ad7124_state
*st
;
670 struct iio_dev
*indio_dev
;
673 indio_dev
= devm_iio_device_alloc(&spi
->dev
, sizeof(*st
));
677 st
= iio_priv(indio_dev
);
679 id
= spi_get_device_id(spi
);
680 st
->chip_info
= &ad7124_chip_info_tbl
[id
->driver_data
];
682 ad_sd_init(&st
->sd
, indio_dev
, spi
, &ad7124_sigma_delta_info
);
684 spi_set_drvdata(spi
, indio_dev
);
686 indio_dev
->dev
.parent
= &spi
->dev
;
687 indio_dev
->name
= spi_get_device_id(spi
)->name
;
688 indio_dev
->modes
= INDIO_DIRECT_MODE
;
689 indio_dev
->info
= &ad7124_info
;
691 ret
= ad7124_of_parse_channel_config(indio_dev
, spi
->dev
.of_node
);
695 for (i
= 0; i
< ARRAY_SIZE(st
->vref
); i
++) {
696 if (i
== AD7124_INT_REF
)
699 st
->vref
[i
] = devm_regulator_get_optional(&spi
->dev
,
700 ad7124_ref_names
[i
]);
701 if (PTR_ERR(st
->vref
[i
]) == -ENODEV
)
703 else if (IS_ERR(st
->vref
[i
]))
704 return PTR_ERR(st
->vref
[i
]);
706 ret
= regulator_enable(st
->vref
[i
]);
711 st
->mclk
= devm_clk_get(&spi
->dev
, "mclk");
712 if (IS_ERR(st
->mclk
)) {
713 ret
= PTR_ERR(st
->mclk
);
714 goto error_regulator_disable
;
717 ret
= clk_prepare_enable(st
->mclk
);
719 goto error_regulator_disable
;
721 ret
= ad7124_soft_reset(st
);
723 goto error_clk_disable_unprepare
;
725 ret
= ad7124_setup(st
);
727 goto error_clk_disable_unprepare
;
729 ret
= ad_sd_setup_buffer_and_trigger(indio_dev
);
731 goto error_clk_disable_unprepare
;
733 ret
= iio_device_register(indio_dev
);
735 dev_err(&spi
->dev
, "Failed to register iio device\n");
736 goto error_remove_trigger
;
741 error_remove_trigger
:
742 ad_sd_cleanup_buffer_and_trigger(indio_dev
);
743 error_clk_disable_unprepare
:
744 clk_disable_unprepare(st
->mclk
);
745 error_regulator_disable
:
746 for (i
= ARRAY_SIZE(st
->vref
) - 1; i
>= 0; i
--) {
747 if (!IS_ERR_OR_NULL(st
->vref
[i
]))
748 regulator_disable(st
->vref
[i
]);
754 static int ad7124_remove(struct spi_device
*spi
)
756 struct iio_dev
*indio_dev
= spi_get_drvdata(spi
);
757 struct ad7124_state
*st
= iio_priv(indio_dev
);
760 iio_device_unregister(indio_dev
);
761 ad_sd_cleanup_buffer_and_trigger(indio_dev
);
762 clk_disable_unprepare(st
->mclk
);
764 for (i
= ARRAY_SIZE(st
->vref
) - 1; i
>= 0; i
--) {
765 if (!IS_ERR_OR_NULL(st
->vref
[i
]))
766 regulator_disable(st
->vref
[i
]);
772 static const struct spi_device_id ad7124_id_table
[] = {
773 { "ad7124-4", ID_AD7124_4
},
774 { "ad7124-8", ID_AD7124_8
},
777 MODULE_DEVICE_TABLE(spi
, ad7124_id_table
);
779 static const struct of_device_id ad7124_of_match
[] = {
780 { .compatible
= "adi,ad7124-4" },
781 { .compatible
= "adi,ad7124-8" },
784 MODULE_DEVICE_TABLE(of
, ad7124_of_match
);
786 static struct spi_driver ad71124_driver
= {
789 .of_match_table
= ad7124_of_match
,
791 .probe
= ad7124_probe
,
792 .remove
= ad7124_remove
,
793 .id_table
= ad7124_id_table
,
795 module_spi_driver(ad71124_driver
);
797 MODULE_AUTHOR("Stefan Popa <stefan.popa@analog.com>");
798 MODULE_DESCRIPTION("Analog Devices AD7124 SPI driver");
799 MODULE_LICENSE("GPL");