1 // SPDX-License-Identifier: GPL-2.0-only
3 * Analog Devices AD3552R
4 * Digital to Analog converter driver
6 * Copyright 2021 Analog Devices Inc.
8 #include <linux/unaligned.h>
9 #include <linux/bitfield.h>
10 #include <linux/device.h>
11 #include <linux/iio/triggered_buffer.h>
12 #include <linux/iio/trigger_consumer.h>
13 #include <linux/iopoll.h>
14 #include <linux/kernel.h>
15 #include <linux/spi/spi.h>
20 const struct ad3552r_model_data
*model_data
;
21 /* Used to look the spi bus for atomic operations where needed */
23 struct gpio_desc
*gpio_reset
;
24 struct gpio_desc
*gpio_ldac
;
25 struct spi_device
*spi
;
26 struct ad3552r_ch_data ch_data
[AD3552R_MAX_CH
];
27 struct iio_chan_spec channels
[AD3552R_MAX_CH
+ 1];
28 unsigned long enabled_ch
;
32 static u8
_ad3552r_reg_len(u8 addr
)
35 case AD3552R_REG_ADDR_HW_LDAC_16B
:
36 case AD3552R_REG_ADDR_CH_SELECT_16B
:
37 case AD3552R_REG_ADDR_SW_LDAC_16B
:
38 case AD3552R_REG_ADDR_HW_LDAC_24B
:
39 case AD3552R_REG_ADDR_CH_SELECT_24B
:
40 case AD3552R_REG_ADDR_SW_LDAC_24B
:
46 if (addr
> AD3552R_REG_ADDR_HW_LDAC_24B
)
48 if (addr
> AD3552R_REG_ADDR_HW_LDAC_16B
)
54 /* SPI transfer to device */
55 static int ad3552r_transfer(struct ad3552r_desc
*dac
, u8 addr
, u32 len
,
56 u8
*data
, bool is_read
)
58 /* Maximum transfer: Addr (1B) + 2 * (Data Reg (3B)) + SW LDAC(1B) */
61 buf
[0] = addr
& AD3552R_ADDR_MASK
;
62 buf
[0] |= is_read
? AD3552R_READ_BIT
: 0;
64 return spi_write_then_read(dac
->spi
, buf
, 1, data
, len
);
66 memcpy(buf
+ 1, data
, len
);
67 return spi_write_then_read(dac
->spi
, buf
, len
+ 1, NULL
, 0);
70 static int ad3552r_write_reg(struct ad3552r_desc
*dac
, u8 addr
, u16 val
)
73 u8 buf
[AD3552R_MAX_REG_SIZE
] = { 0 };
75 reg_len
= _ad3552r_reg_len(addr
);
77 /* Only DAC register are 2 bytes wide */
78 val
&= AD3552R_MASK_DAC_12B
;
82 /* reg_len can be 2 or 3, but 3rd bytes needs to be set to 0 */
83 put_unaligned_be16(val
, buf
);
85 return ad3552r_transfer(dac
, addr
, reg_len
, buf
, false);
88 static int ad3552r_read_reg(struct ad3552r_desc
*dac
, u8 addr
, u16
*val
)
91 u8 reg_len
, buf
[AD3552R_MAX_REG_SIZE
] = { 0 };
93 reg_len
= _ad3552r_reg_len(addr
);
94 err
= ad3552r_transfer(dac
, addr
, reg_len
, buf
, true);
101 /* reg_len can be 2 or 3, but only first 2 bytes are relevant */
102 *val
= get_unaligned_be16(buf
);
107 /* Update field of a register, shift val if needed */
108 static int ad3552r_update_reg_field(struct ad3552r_desc
*dac
, u8 addr
, u16 mask
,
114 ret
= ad3552r_read_reg(dac
, addr
, ®
);
121 return ad3552r_write_reg(dac
, addr
, reg
);
124 #define AD3552R_CH_DAC(_idx) ((struct iio_chan_spec) { \
125 .type = IIO_VOLTAGE, \
129 .scan_index = _idx, \
134 .endianness = IIO_BE, \
136 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
137 BIT(IIO_CHAN_INFO_SCALE) | \
138 BIT(IIO_CHAN_INFO_ENABLE) | \
139 BIT(IIO_CHAN_INFO_OFFSET), \
142 static int ad3552r_read_raw(struct iio_dev
*indio_dev
,
143 struct iio_chan_spec
const *chan
,
148 struct ad3552r_desc
*dac
= iio_priv(indio_dev
);
151 u8 ch
= chan
->channel
;
154 case IIO_CHAN_INFO_RAW
:
155 mutex_lock(&dac
->lock
);
156 err
= ad3552r_read_reg(dac
, AD3552R_REG_ADDR_CH_DAC_24B(ch
),
158 mutex_unlock(&dac
->lock
);
163 case IIO_CHAN_INFO_ENABLE
:
164 mutex_lock(&dac
->lock
);
165 err
= ad3552r_read_reg(dac
, AD3552R_REG_ADDR_POWERDOWN_CONFIG
,
167 mutex_unlock(&dac
->lock
);
170 *val
= !((tmp_val
& AD3552R_MASK_CH_DAC_POWERDOWN(ch
)) >>
171 __ffs(AD3552R_MASK_CH_DAC_POWERDOWN(ch
)));
173 case IIO_CHAN_INFO_SCALE
:
174 *val
= dac
->ch_data
[ch
].scale_int
;
175 *val2
= dac
->ch_data
[ch
].scale_dec
;
176 return IIO_VAL_INT_PLUS_MICRO
;
177 case IIO_CHAN_INFO_OFFSET
:
178 *val
= dac
->ch_data
[ch
].offset_int
;
179 *val2
= dac
->ch_data
[ch
].offset_dec
;
180 return IIO_VAL_INT_PLUS_MICRO
;
186 static int ad3552r_write_raw(struct iio_dev
*indio_dev
,
187 struct iio_chan_spec
const *chan
,
192 struct ad3552r_desc
*dac
= iio_priv(indio_dev
);
195 mutex_lock(&dac
->lock
);
197 case IIO_CHAN_INFO_RAW
:
198 err
= ad3552r_write_reg(dac
,
199 AD3552R_REG_ADDR_CH_DAC_24B(chan
->channel
),
202 case IIO_CHAN_INFO_ENABLE
:
203 if (chan
->channel
== 0)
204 val
= FIELD_PREP(AD3552R_MASK_CH_DAC_POWERDOWN(0), !val
);
206 val
= FIELD_PREP(AD3552R_MASK_CH_DAC_POWERDOWN(1), !val
);
208 err
= ad3552r_update_reg_field(dac
, AD3552R_REG_ADDR_POWERDOWN_CONFIG
,
209 AD3552R_MASK_CH_DAC_POWERDOWN(chan
->channel
),
216 mutex_unlock(&dac
->lock
);
221 static const struct iio_info ad3552r_iio_info
= {
222 .read_raw
= ad3552r_read_raw
,
223 .write_raw
= ad3552r_write_raw
226 static int32_t ad3552r_trigger_hw_ldac(struct gpio_desc
*ldac
)
228 gpiod_set_value_cansleep(ldac
, 0);
229 usleep_range(AD3552R_LDAC_PULSE_US
, AD3552R_LDAC_PULSE_US
+ 10);
230 gpiod_set_value_cansleep(ldac
, 1);
235 static int ad3552r_write_all_channels(struct ad3552r_desc
*dac
, u8
*data
)
238 u8 addr
, buff
[AD3552R_MAX_CH
* AD3552R_MAX_REG_SIZE
+ 1];
240 addr
= AD3552R_REG_ADDR_CH_INPUT_24B(1);
242 memcpy(buff
, data
+ 2, 2);
245 memcpy(buff
+ 3, data
, 2);
248 if (!dac
->gpio_ldac
) {
250 buff
[6] = AD3552R_MASK_ALL_CH
;
253 err
= ad3552r_transfer(dac
, addr
, len
, buff
, false);
258 return ad3552r_trigger_hw_ldac(dac
->gpio_ldac
);
263 static int ad3552r_write_codes(struct ad3552r_desc
*dac
, u32 mask
, u8
*data
)
266 u8 addr
, buff
[AD3552R_MAX_REG_SIZE
];
268 if (mask
== AD3552R_MASK_ALL_CH
) {
269 if (memcmp(data
, data
+ 2, 2) != 0)
270 return ad3552r_write_all_channels(dac
, data
);
272 addr
= AD3552R_REG_ADDR_INPUT_PAGE_MASK_24B
;
274 addr
= AD3552R_REG_ADDR_CH_INPUT_24B(__ffs(mask
));
277 memcpy(buff
, data
, 2);
279 err
= ad3552r_transfer(dac
, addr
, 3, data
, false);
284 return ad3552r_trigger_hw_ldac(dac
->gpio_ldac
);
286 return ad3552r_write_reg(dac
, AD3552R_REG_ADDR_SW_LDAC_24B
, mask
);
289 static irqreturn_t
ad3552r_trigger_handler(int irq
, void *p
)
291 struct iio_poll_func
*pf
= p
;
292 struct iio_dev
*indio_dev
= pf
->indio_dev
;
293 struct iio_buffer
*buf
= indio_dev
->buffer
;
294 struct ad3552r_desc
*dac
= iio_priv(indio_dev
);
295 /* Maximum size of a scan */
296 u8 buff
[AD3552R_MAX_CH
* AD3552R_MAX_REG_SIZE
];
299 memset(buff
, 0, sizeof(buff
));
300 err
= iio_pop_from_buffer(buf
, buff
);
304 mutex_lock(&dac
->lock
);
305 ad3552r_write_codes(dac
, *indio_dev
->active_scan_mask
, buff
);
306 mutex_unlock(&dac
->lock
);
308 iio_trigger_notify_done(indio_dev
->trig
);
313 static int ad3552r_check_scratch_pad(struct ad3552r_desc
*dac
)
315 const u16 val1
= AD3552R_SCRATCH_PAD_TEST_VAL1
;
316 const u16 val2
= AD3552R_SCRATCH_PAD_TEST_VAL2
;
320 err
= ad3552r_write_reg(dac
, AD3552R_REG_ADDR_SCRATCH_PAD
, val1
);
324 err
= ad3552r_read_reg(dac
, AD3552R_REG_ADDR_SCRATCH_PAD
, &val
);
331 err
= ad3552r_write_reg(dac
, AD3552R_REG_ADDR_SCRATCH_PAD
, val2
);
335 err
= ad3552r_read_reg(dac
, AD3552R_REG_ADDR_SCRATCH_PAD
, &val
);
345 struct reg_addr_pool
{
346 struct ad3552r_desc
*dac
;
350 static int ad3552r_read_reg_wrapper(struct reg_addr_pool
*addr
)
355 err
= ad3552r_read_reg(addr
->dac
, addr
->addr
, &val
);
362 static int ad3552r_reset(struct ad3552r_desc
*dac
)
364 struct reg_addr_pool addr
;
368 dac
->gpio_reset
= devm_gpiod_get_optional(&dac
->spi
->dev
, "reset",
370 if (IS_ERR(dac
->gpio_reset
))
371 return dev_err_probe(&dac
->spi
->dev
, PTR_ERR(dac
->gpio_reset
),
372 "Error while getting gpio reset");
374 if (dac
->gpio_reset
) {
375 /* Perform hardware reset */
376 usleep_range(10, 20);
377 gpiod_set_value_cansleep(dac
->gpio_reset
, 1);
379 /* Perform software reset if no GPIO provided */
380 ret
= ad3552r_update_reg_field(dac
,
381 AD3552R_REG_ADDR_INTERFACE_CONFIG_A
,
382 AD3552R_MASK_SOFTWARE_RESET
,
383 AD3552R_MASK_SOFTWARE_RESET
);
390 addr
.addr
= AD3552R_REG_ADDR_INTERFACE_CONFIG_B
;
391 ret
= readx_poll_timeout(ad3552r_read_reg_wrapper
, &addr
, val
,
392 val
== AD3552R_DEFAULT_CONFIG_B_VALUE
||
398 dev_err(&dac
->spi
->dev
, "Error while resetting");
402 ret
= readx_poll_timeout(ad3552r_read_reg_wrapper
, &addr
, val
,
403 !(val
& AD3552R_MASK_INTERFACE_NOT_READY
) ||
409 dev_err(&dac
->spi
->dev
, "Error while resetting");
413 return ad3552r_update_reg_field(dac
,
414 AD3552R_REG_ADDR_INTERFACE_CONFIG_A
,
415 AD3552R_MASK_ADDR_ASCENSION
,
416 FIELD_PREP(AD3552R_MASK_ADDR_ASCENSION
, val
));
419 static int ad3552r_configure_custom_gain(struct ad3552r_desc
*dac
,
420 struct fwnode_handle
*child
,
423 struct device
*dev
= &dac
->spi
->dev
;
428 err
= ad3552r_get_custom_gain(dev
, child
,
431 &dac
->ch_data
[ch
].rfb
,
432 &dac
->ch_data
[ch
].gain_offset
);
436 dac
->ch_data
[ch
].range_override
= 1;
438 addr
= AD3552R_REG_ADDR_CH_GAIN(ch
);
439 err
= ad3552r_write_reg(dac
, addr
,
440 abs((s32
)dac
->ch_data
[ch
].gain_offset
) &
441 AD3552R_MASK_CH_OFFSET_BITS_0_7
);
443 return dev_err_probe(dev
, err
, "Error writing register\n");
445 reg
= ad3552r_calc_custom_gain(dac
->ch_data
[ch
].p
, dac
->ch_data
[ch
].n
,
446 dac
->ch_data
[ch
].gain_offset
);
448 err
= ad3552r_write_reg(dac
, addr
, reg
);
450 return dev_err_probe(dev
, err
, "Error writing register\n");
455 static int ad3552r_configure_device(struct ad3552r_desc
*dac
)
457 struct device
*dev
= &dac
->spi
->dev
;
461 dac
->gpio_ldac
= devm_gpiod_get_optional(dev
, "ldac", GPIOD_OUT_HIGH
);
462 if (IS_ERR(dac
->gpio_ldac
))
463 return dev_err_probe(dev
, PTR_ERR(dac
->gpio_ldac
),
464 "Error getting gpio ldac");
466 err
= ad3552r_get_ref_voltage(dev
, &val
);
470 err
= ad3552r_update_reg_field(dac
,
471 AD3552R_REG_ADDR_SH_REFERENCE_CONFIG
,
472 AD3552R_MASK_REFERENCE_VOLTAGE_SEL
,
473 FIELD_PREP(AD3552R_MASK_REFERENCE_VOLTAGE_SEL
, val
));
477 err
= ad3552r_get_drive_strength(dev
, &val
);
479 err
= ad3552r_update_reg_field(dac
,
480 AD3552R_REG_ADDR_INTERFACE_CONFIG_D
,
481 AD3552R_MASK_SDO_DRIVE_STRENGTH
,
482 FIELD_PREP(AD3552R_MASK_SDO_DRIVE_STRENGTH
, val
));
487 dac
->num_ch
= device_get_child_node_count(dev
);
489 dev_err(dev
, "No channels defined\n");
493 device_for_each_child_node_scoped(dev
, child
) {
494 err
= fwnode_property_read_u32(child
, "reg", &ch
);
496 return dev_err_probe(dev
, err
,
497 "mandatory reg property missing\n");
498 if (ch
>= dac
->model_data
->num_hw_channels
)
499 return dev_err_probe(dev
, -EINVAL
,
500 "reg must be less than %d\n",
501 dac
->model_data
->num_hw_channels
);
503 err
= ad3552r_get_output_range(dev
, dac
->model_data
,
505 if (err
&& err
!= -ENOENT
)
510 val
= FIELD_PREP(AD3552R_MASK_CH_OUTPUT_RANGE_SEL(0), val
);
512 val
= FIELD_PREP(AD3552R_MASK_CH_OUTPUT_RANGE_SEL(1), val
);
514 err
= ad3552r_update_reg_field(dac
,
515 AD3552R_REG_ADDR_CH0_CH1_OUTPUT_RANGE
,
516 AD3552R_MASK_CH_OUTPUT_RANGE_SEL(ch
),
521 dac
->ch_data
[ch
].range
= val
;
522 } else if (dac
->model_data
->requires_output_range
) {
523 return dev_err_probe(dev
, -EINVAL
,
524 "adi,output-range-microvolt is required for %s\n",
525 dac
->model_data
->model_name
);
527 err
= ad3552r_configure_custom_gain(dac
, child
, ch
);
532 ad3552r_calc_gain_and_offset(&dac
->ch_data
[ch
], dac
->model_data
);
533 dac
->enabled_ch
|= BIT(ch
);
536 val
= FIELD_PREP(AD3552R_MASK_CH(0), 1);
538 val
= FIELD_PREP(AD3552R_MASK_CH(1), 1);
540 err
= ad3552r_update_reg_field(dac
,
541 AD3552R_REG_ADDR_CH_SELECT_16B
,
542 AD3552R_MASK_CH(ch
), val
);
546 dac
->channels
[cnt
] = AD3552R_CH_DAC(ch
);
551 /* Disable unused channels */
552 for_each_clear_bit(ch
, &dac
->enabled_ch
,
553 dac
->model_data
->num_hw_channels
) {
555 val
= FIELD_PREP(AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(0), 1);
557 val
= FIELD_PREP(AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(1), 1);
559 err
= ad3552r_update_reg_field(dac
,
560 AD3552R_REG_ADDR_POWERDOWN_CONFIG
,
561 AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(ch
),
572 static int ad3552r_init(struct ad3552r_desc
*dac
)
577 err
= ad3552r_reset(dac
);
579 dev_err(&dac
->spi
->dev
, "Reset failed\n");
583 err
= ad3552r_check_scratch_pad(dac
);
585 dev_err(&dac
->spi
->dev
, "Scratch pad test failed\n");
589 err
= ad3552r_read_reg(dac
, AD3552R_REG_ADDR_PRODUCT_ID_L
, &val
);
591 dev_err(&dac
->spi
->dev
, "Fail read PRODUCT_ID_L\n");
596 err
= ad3552r_read_reg(dac
, AD3552R_REG_ADDR_PRODUCT_ID_H
, &val
);
598 dev_err(&dac
->spi
->dev
, "Fail read PRODUCT_ID_H\n");
603 if (id
!= dac
->model_data
->chip_id
) {
604 dev_err(&dac
->spi
->dev
, "Product id not matching\n");
608 return ad3552r_configure_device(dac
);
611 static int ad3552r_probe(struct spi_device
*spi
)
613 struct ad3552r_desc
*dac
;
614 struct iio_dev
*indio_dev
;
617 indio_dev
= devm_iio_device_alloc(&spi
->dev
, sizeof(*dac
));
621 dac
= iio_priv(indio_dev
);
623 dac
->model_data
= spi_get_device_match_data(spi
);
624 if (!dac
->model_data
)
627 mutex_init(&dac
->lock
);
629 err
= ad3552r_init(dac
);
633 /* Config triggered buffer device */
634 indio_dev
->name
= dac
->model_data
->model_name
;
635 indio_dev
->dev
.parent
= &spi
->dev
;
636 indio_dev
->info
= &ad3552r_iio_info
;
637 indio_dev
->num_channels
= dac
->num_ch
;
638 indio_dev
->channels
= dac
->channels
;
639 indio_dev
->modes
= INDIO_DIRECT_MODE
;
641 err
= devm_iio_triggered_buffer_setup_ext(&indio_dev
->dev
, indio_dev
, NULL
,
642 &ad3552r_trigger_handler
,
643 IIO_BUFFER_DIRECTION_OUT
,
649 return devm_iio_device_register(&spi
->dev
, indio_dev
);
652 static const struct ad3552r_model_data ad3541r_model_data
= {
653 .model_name
= "ad3541r",
654 .chip_id
= AD3541R_ID
,
655 .num_hw_channels
= 1,
656 .ranges_table
= ad3542r_ch_ranges
,
657 .num_ranges
= ARRAY_SIZE(ad3542r_ch_ranges
),
658 .requires_output_range
= true,
661 static const struct ad3552r_model_data ad3542r_model_data
= {
662 .model_name
= "ad3542r",
663 .chip_id
= AD3542R_ID
,
664 .num_hw_channels
= 2,
665 .ranges_table
= ad3542r_ch_ranges
,
666 .num_ranges
= ARRAY_SIZE(ad3542r_ch_ranges
),
667 .requires_output_range
= true,
670 static const struct ad3552r_model_data ad3551r_model_data
= {
671 .model_name
= "ad3551r",
672 .chip_id
= AD3551R_ID
,
673 .num_hw_channels
= 1,
674 .ranges_table
= ad3552r_ch_ranges
,
675 .num_ranges
= ARRAY_SIZE(ad3552r_ch_ranges
),
676 .requires_output_range
= false,
679 static const struct ad3552r_model_data ad3552r_model_data
= {
680 .model_name
= "ad3552r",
681 .chip_id
= AD3552R_ID
,
682 .num_hw_channels
= 2,
683 .ranges_table
= ad3552r_ch_ranges
,
684 .num_ranges
= ARRAY_SIZE(ad3552r_ch_ranges
),
685 .requires_output_range
= false,
688 static const struct spi_device_id ad3552r_id
[] = {
691 .driver_data
= (kernel_ulong_t
)&ad3541r_model_data
695 .driver_data
= (kernel_ulong_t
)&ad3542r_model_data
699 .driver_data
= (kernel_ulong_t
)&ad3551r_model_data
703 .driver_data
= (kernel_ulong_t
)&ad3552r_model_data
707 MODULE_DEVICE_TABLE(spi
, ad3552r_id
);
709 static const struct of_device_id ad3552r_of_match
[] = {
710 { .compatible
= "adi,ad3541r", .data
= &ad3541r_model_data
},
711 { .compatible
= "adi,ad3542r", .data
= &ad3542r_model_data
},
712 { .compatible
= "adi,ad3551r", .data
= &ad3551r_model_data
},
713 { .compatible
= "adi,ad3552r", .data
= &ad3552r_model_data
},
716 MODULE_DEVICE_TABLE(of
, ad3552r_of_match
);
718 static struct spi_driver ad3552r_driver
= {
721 .of_match_table
= ad3552r_of_match
,
723 .probe
= ad3552r_probe
,
724 .id_table
= ad3552r_id
726 module_spi_driver(ad3552r_driver
);
728 MODULE_AUTHOR("Mihail Chindris <mihail.chindris@analog.com>");
729 MODULE_DESCRIPTION("Analog Device AD3552R DAC");
730 MODULE_LICENSE("GPL v2");
731 MODULE_IMPORT_NS(IIO_AD3552R
);