Merge branch 'address-masking'
[linux-2.6-microblaze.git] / drivers / iio / dac / ad3552r.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Analog Devices AD3552R
4  * Digital to Analog converter driver
5  *
6  * Copyright 2021 Analog Devices Inc.
7  */
8 #include <asm/unaligned.h>
9 #include <linux/device.h>
10 #include <linux/iio/triggered_buffer.h>
11 #include <linux/iio/trigger_consumer.h>
12 #include <linux/iopoll.h>
13 #include <linux/kernel.h>
14 #include <linux/regulator/consumer.h>
15 #include <linux/spi/spi.h>
16
17 /* Register addresses */
18 /* Primary address space */
19 #define AD3552R_REG_ADDR_INTERFACE_CONFIG_A             0x00
20 #define   AD3552R_MASK_SOFTWARE_RESET                   (BIT(7) | BIT(0))
21 #define   AD3552R_MASK_ADDR_ASCENSION                   BIT(5)
22 #define   AD3552R_MASK_SDO_ACTIVE                       BIT(4)
23 #define AD3552R_REG_ADDR_INTERFACE_CONFIG_B             0x01
24 #define   AD3552R_MASK_SINGLE_INST                      BIT(7)
25 #define   AD3552R_MASK_SHORT_INSTRUCTION                BIT(3)
26 #define AD3552R_REG_ADDR_DEVICE_CONFIG                  0x02
27 #define   AD3552R_MASK_DEVICE_STATUS(n)                 BIT(4 + (n))
28 #define   AD3552R_MASK_CUSTOM_MODES                     GENMASK(3, 2)
29 #define   AD3552R_MASK_OPERATING_MODES                  GENMASK(1, 0)
30 #define AD3552R_REG_ADDR_CHIP_TYPE                      0x03
31 #define   AD3552R_MASK_CLASS                            GENMASK(7, 0)
32 #define AD3552R_REG_ADDR_PRODUCT_ID_L                   0x04
33 #define AD3552R_REG_ADDR_PRODUCT_ID_H                   0x05
34 #define AD3552R_REG_ADDR_CHIP_GRADE                     0x06
35 #define   AD3552R_MASK_GRADE                            GENMASK(7, 4)
36 #define   AD3552R_MASK_DEVICE_REVISION                  GENMASK(3, 0)
37 #define AD3552R_REG_ADDR_SCRATCH_PAD                    0x0A
38 #define AD3552R_REG_ADDR_SPI_REVISION                   0x0B
39 #define AD3552R_REG_ADDR_VENDOR_L                       0x0C
40 #define AD3552R_REG_ADDR_VENDOR_H                       0x0D
41 #define AD3552R_REG_ADDR_STREAM_MODE                    0x0E
42 #define   AD3552R_MASK_LENGTH                           GENMASK(7, 0)
43 #define AD3552R_REG_ADDR_TRANSFER_REGISTER              0x0F
44 #define   AD3552R_MASK_MULTI_IO_MODE                    GENMASK(7, 6)
45 #define   AD3552R_MASK_STREAM_LENGTH_KEEP_VALUE         BIT(2)
46 #define AD3552R_REG_ADDR_INTERFACE_CONFIG_C             0x10
47 #define   AD3552R_MASK_CRC_ENABLE                       (GENMASK(7, 6) |\
48                                                          GENMASK(1, 0))
49 #define   AD3552R_MASK_STRICT_REGISTER_ACCESS           BIT(5)
50 #define AD3552R_REG_ADDR_INTERFACE_STATUS_A             0x11
51 #define   AD3552R_MASK_INTERFACE_NOT_READY              BIT(7)
52 #define   AD3552R_MASK_CLOCK_COUNTING_ERROR             BIT(5)
53 #define   AD3552R_MASK_INVALID_OR_NO_CRC                BIT(3)
54 #define   AD3552R_MASK_WRITE_TO_READ_ONLY_REGISTER      BIT(2)
55 #define   AD3552R_MASK_PARTIAL_REGISTER_ACCESS          BIT(1)
56 #define   AD3552R_MASK_REGISTER_ADDRESS_INVALID         BIT(0)
57 #define AD3552R_REG_ADDR_INTERFACE_CONFIG_D             0x14
58 #define   AD3552R_MASK_ALERT_ENABLE_PULLUP              BIT(6)
59 #define   AD3552R_MASK_MEM_CRC_EN                       BIT(4)
60 #define   AD3552R_MASK_SDO_DRIVE_STRENGTH               GENMASK(3, 2)
61 #define   AD3552R_MASK_DUAL_SPI_SYNCHROUNOUS_EN         BIT(1)
62 #define   AD3552R_MASK_SPI_CONFIG_DDR                   BIT(0)
63 #define AD3552R_REG_ADDR_SH_REFERENCE_CONFIG            0x15
64 #define   AD3552R_MASK_IDUMP_FAST_MODE                  BIT(6)
65 #define   AD3552R_MASK_SAMPLE_HOLD_DIFFERENTIAL_USER_EN BIT(5)
66 #define   AD3552R_MASK_SAMPLE_HOLD_USER_TRIM            GENMASK(4, 3)
67 #define   AD3552R_MASK_SAMPLE_HOLD_USER_ENABLE          BIT(2)
68 #define   AD3552R_MASK_REFERENCE_VOLTAGE_SEL            GENMASK(1, 0)
69 #define AD3552R_REG_ADDR_ERR_ALARM_MASK                 0x16
70 #define   AD3552R_MASK_REF_RANGE_ALARM                  BIT(6)
71 #define   AD3552R_MASK_CLOCK_COUNT_ERR_ALARM            BIT(5)
72 #define   AD3552R_MASK_MEM_CRC_ERR_ALARM                BIT(4)
73 #define   AD3552R_MASK_SPI_CRC_ERR_ALARM                BIT(3)
74 #define   AD3552R_MASK_WRITE_TO_READ_ONLY_ALARM         BIT(2)
75 #define   AD3552R_MASK_PARTIAL_REGISTER_ACCESS_ALARM    BIT(1)
76 #define   AD3552R_MASK_REGISTER_ADDRESS_INVALID_ALARM   BIT(0)
77 #define AD3552R_REG_ADDR_ERR_STATUS                     0x17
78 #define   AD3552R_MASK_REF_RANGE_ERR_STATUS                     BIT(6)
79 #define   AD3552R_MASK_DUAL_SPI_STREAM_EXCEEDS_DAC_ERR_STATUS   BIT(5)
80 #define   AD3552R_MASK_MEM_CRC_ERR_STATUS                       BIT(4)
81 #define   AD3552R_MASK_RESET_STATUS                             BIT(0)
82 #define AD3552R_REG_ADDR_POWERDOWN_CONFIG               0x18
83 #define   AD3552R_MASK_CH_DAC_POWERDOWN(ch)             BIT(4 + (ch))
84 #define   AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(ch)       BIT(ch)
85 #define AD3552R_REG_ADDR_CH0_CH1_OUTPUT_RANGE           0x19
86 #define   AD3552R_MASK_CH_OUTPUT_RANGE_SEL(ch)          ((ch) ? GENMASK(7, 4) :\
87                                                          GENMASK(3, 0))
88 #define AD3552R_REG_ADDR_CH_OFFSET(ch)                  (0x1B + (ch) * 2)
89 #define   AD3552R_MASK_CH_OFFSET_BITS_0_7               GENMASK(7, 0)
90 #define AD3552R_REG_ADDR_CH_GAIN(ch)                    (0x1C + (ch) * 2)
91 #define   AD3552R_MASK_CH_RANGE_OVERRIDE                BIT(7)
92 #define   AD3552R_MASK_CH_GAIN_SCALING_N                GENMASK(6, 5)
93 #define   AD3552R_MASK_CH_GAIN_SCALING_P                GENMASK(4, 3)
94 #define   AD3552R_MASK_CH_OFFSET_POLARITY               BIT(2)
95 #define   AD3552R_MASK_CH_OFFSET_BIT_8                  BIT(0)
96 /*
97  * Secondary region
98  * For multibyte registers specify the highest address because the access is
99  * done in descending order
100  */
101 #define AD3552R_SECONDARY_REGION_START                  0x28
102 #define AD3552R_REG_ADDR_HW_LDAC_16B                    0x28
103 #define AD3552R_REG_ADDR_CH_DAC_16B(ch)                 (0x2C - (1 - ch) * 2)
104 #define AD3552R_REG_ADDR_DAC_PAGE_MASK_16B              0x2E
105 #define AD3552R_REG_ADDR_CH_SELECT_16B                  0x2F
106 #define AD3552R_REG_ADDR_INPUT_PAGE_MASK_16B            0x31
107 #define AD3552R_REG_ADDR_SW_LDAC_16B                    0x32
108 #define AD3552R_REG_ADDR_CH_INPUT_16B(ch)               (0x36 - (1 - ch) * 2)
109 /* 3 bytes registers */
110 #define AD3552R_REG_START_24B                           0x37
111 #define AD3552R_REG_ADDR_HW_LDAC_24B                    0x37
112 #define AD3552R_REG_ADDR_CH_DAC_24B(ch)                 (0x3D - (1 - ch) * 3)
113 #define AD3552R_REG_ADDR_DAC_PAGE_MASK_24B              0x40
114 #define AD3552R_REG_ADDR_CH_SELECT_24B                  0x41
115 #define AD3552R_REG_ADDR_INPUT_PAGE_MASK_24B            0x44
116 #define AD3552R_REG_ADDR_SW_LDAC_24B                    0x45
117 #define AD3552R_REG_ADDR_CH_INPUT_24B(ch)               (0x4B - (1 - ch) * 3)
118
119 /* Useful defines */
120 #define AD3552R_MAX_CH                                  2
121 #define AD3552R_MASK_CH(ch)                             BIT(ch)
122 #define AD3552R_MASK_ALL_CH                             GENMASK(1, 0)
123 #define AD3552R_MAX_REG_SIZE                            3
124 #define AD3552R_READ_BIT                                BIT(7)
125 #define AD3552R_ADDR_MASK                               GENMASK(6, 0)
126 #define AD3552R_MASK_DAC_12B                            0xFFF0
127 #define AD3552R_DEFAULT_CONFIG_B_VALUE                  0x8
128 #define AD3552R_SCRATCH_PAD_TEST_VAL1                   0x34
129 #define AD3552R_SCRATCH_PAD_TEST_VAL2                   0xB2
130 #define AD3552R_GAIN_SCALE                              1000
131 #define AD3552R_LDAC_PULSE_US                           100
132
133 enum ad3552r_ch_vref_select {
134         /* Internal source with Vref I/O floating */
135         AD3552R_INTERNAL_VREF_PIN_FLOATING,
136         /* Internal source with Vref I/O at 2.5V */
137         AD3552R_INTERNAL_VREF_PIN_2P5V,
138         /* External source with Vref I/O as input */
139         AD3552R_EXTERNAL_VREF_PIN_INPUT
140 };
141
142 enum ad3552r_id {
143         AD3541R_ID = 0x400b,
144         AD3542R_ID = 0x4009,
145         AD3551R_ID = 0x400a,
146         AD3552R_ID = 0x4008,
147 };
148
149 enum ad3552r_ch_output_range {
150         /* Range from 0 V to 2.5 V. Requires Rfb1x connection */
151         AD3552R_CH_OUTPUT_RANGE_0__2P5V,
152         /* Range from 0 V to 5 V. Requires Rfb1x connection  */
153         AD3552R_CH_OUTPUT_RANGE_0__5V,
154         /* Range from 0 V to 10 V. Requires Rfb2x connection  */
155         AD3552R_CH_OUTPUT_RANGE_0__10V,
156         /* Range from -5 V to 5 V. Requires Rfb2x connection  */
157         AD3552R_CH_OUTPUT_RANGE_NEG_5__5V,
158         /* Range from -10 V to 10 V. Requires Rfb4x connection  */
159         AD3552R_CH_OUTPUT_RANGE_NEG_10__10V,
160 };
161
162 static const s32 ad3552r_ch_ranges[][2] = {
163         [AD3552R_CH_OUTPUT_RANGE_0__2P5V]       = {0, 2500},
164         [AD3552R_CH_OUTPUT_RANGE_0__5V]         = {0, 5000},
165         [AD3552R_CH_OUTPUT_RANGE_0__10V]        = {0, 10000},
166         [AD3552R_CH_OUTPUT_RANGE_NEG_5__5V]     = {-5000, 5000},
167         [AD3552R_CH_OUTPUT_RANGE_NEG_10__10V]   = {-10000, 10000}
168 };
169
170 enum ad3542r_ch_output_range {
171         /* Range from 0 V to 2.5 V. Requires Rfb1x connection */
172         AD3542R_CH_OUTPUT_RANGE_0__2P5V,
173         /* Range from 0 V to 3 V. Requires Rfb1x connection  */
174         AD3542R_CH_OUTPUT_RANGE_0__3V,
175         /* Range from 0 V to 5 V. Requires Rfb1x connection  */
176         AD3542R_CH_OUTPUT_RANGE_0__5V,
177         /* Range from 0 V to 10 V. Requires Rfb2x connection  */
178         AD3542R_CH_OUTPUT_RANGE_0__10V,
179         /* Range from -2.5 V to 7.5 V. Requires Rfb2x connection  */
180         AD3542R_CH_OUTPUT_RANGE_NEG_2P5__7P5V,
181         /* Range from -5 V to 5 V. Requires Rfb2x connection  */
182         AD3542R_CH_OUTPUT_RANGE_NEG_5__5V,
183 };
184
185 static const s32 ad3542r_ch_ranges[][2] = {
186         [AD3542R_CH_OUTPUT_RANGE_0__2P5V]       = {0, 2500},
187         [AD3542R_CH_OUTPUT_RANGE_0__3V]         = {0, 3000},
188         [AD3542R_CH_OUTPUT_RANGE_0__5V]         = {0, 5000},
189         [AD3542R_CH_OUTPUT_RANGE_0__10V]        = {0, 10000},
190         [AD3542R_CH_OUTPUT_RANGE_NEG_2P5__7P5V] = {-2500, 7500},
191         [AD3542R_CH_OUTPUT_RANGE_NEG_5__5V]     = {-5000, 5000}
192 };
193
194 enum ad3552r_ch_gain_scaling {
195         /* Gain scaling of 1 */
196         AD3552R_CH_GAIN_SCALING_1,
197         /* Gain scaling of 0.5 */
198         AD3552R_CH_GAIN_SCALING_0_5,
199         /* Gain scaling of 0.25 */
200         AD3552R_CH_GAIN_SCALING_0_25,
201         /* Gain scaling of 0.125 */
202         AD3552R_CH_GAIN_SCALING_0_125,
203 };
204
205 /* Gain * AD3552R_GAIN_SCALE */
206 static const s32 gains_scaling_table[] = {
207         [AD3552R_CH_GAIN_SCALING_1]             = 1000,
208         [AD3552R_CH_GAIN_SCALING_0_5]           = 500,
209         [AD3552R_CH_GAIN_SCALING_0_25]          = 250,
210         [AD3552R_CH_GAIN_SCALING_0_125]         = 125
211 };
212
213 enum ad3552r_dev_attributes {
214         /* - Direct register values */
215         /* From 0-3 */
216         AD3552R_SDO_DRIVE_STRENGTH,
217         /*
218          * 0 -> Internal Vref, vref_io pin floating (default)
219          * 1 -> Internal Vref, vref_io driven by internal vref
220          * 2 or 3 -> External Vref
221          */
222         AD3552R_VREF_SELECT,
223         /* Read registers in ascending order if set. Else descending */
224         AD3552R_ADDR_ASCENSION,
225 };
226
227 enum ad3552r_ch_attributes {
228         /* DAC powerdown */
229         AD3552R_CH_DAC_POWERDOWN,
230         /* DAC amplifier powerdown */
231         AD3552R_CH_AMPLIFIER_POWERDOWN,
232         /* Select the output range. Select from enum ad3552r_ch_output_range */
233         AD3552R_CH_OUTPUT_RANGE_SEL,
234         /*
235          * Over-rider the range selector in order to manually set the output
236          * voltage range
237          */
238         AD3552R_CH_RANGE_OVERRIDE,
239         /* Manually set the offset voltage */
240         AD3552R_CH_GAIN_OFFSET,
241         /* Sets the polarity of the offset. */
242         AD3552R_CH_GAIN_OFFSET_POLARITY,
243         /* PDAC gain scaling */
244         AD3552R_CH_GAIN_SCALING_P,
245         /* NDAC gain scaling */
246         AD3552R_CH_GAIN_SCALING_N,
247         /* Rfb value */
248         AD3552R_CH_RFB,
249         /* Channel select. When set allow Input -> DAC and Mask -> DAC */
250         AD3552R_CH_SELECT,
251 };
252
253 struct ad3552r_ch_data {
254         s32     scale_int;
255         s32     scale_dec;
256         s32     offset_int;
257         s32     offset_dec;
258         s16     gain_offset;
259         u16     rfb;
260         u8      n;
261         u8      p;
262         u8      range;
263         bool    range_override;
264 };
265
266 struct ad3552r_model_data {
267         const char *model_name;
268         enum ad3552r_id chip_id;
269         unsigned int num_hw_channels;
270         const s32 (*ranges_table)[2];
271         int num_ranges;
272         bool requires_output_range;
273 };
274
275 struct ad3552r_desc {
276         const struct ad3552r_model_data *model_data;
277         /* Used to look the spi bus for atomic operations where needed */
278         struct mutex            lock;
279         struct gpio_desc        *gpio_reset;
280         struct gpio_desc        *gpio_ldac;
281         struct spi_device       *spi;
282         struct ad3552r_ch_data  ch_data[AD3552R_MAX_CH];
283         struct iio_chan_spec    channels[AD3552R_MAX_CH + 1];
284         unsigned long           enabled_ch;
285         unsigned int            num_ch;
286 };
287
288 static const u16 addr_mask_map[][2] = {
289         [AD3552R_ADDR_ASCENSION] = {
290                         AD3552R_REG_ADDR_INTERFACE_CONFIG_A,
291                         AD3552R_MASK_ADDR_ASCENSION
292         },
293         [AD3552R_SDO_DRIVE_STRENGTH] = {
294                         AD3552R_REG_ADDR_INTERFACE_CONFIG_D,
295                         AD3552R_MASK_SDO_DRIVE_STRENGTH
296         },
297         [AD3552R_VREF_SELECT] = {
298                         AD3552R_REG_ADDR_SH_REFERENCE_CONFIG,
299                         AD3552R_MASK_REFERENCE_VOLTAGE_SEL
300         },
301 };
302
303 /* 0 -> reg addr, 1->ch0 mask, 2->ch1 mask */
304 static const u16 addr_mask_map_ch[][3] = {
305         [AD3552R_CH_DAC_POWERDOWN] = {
306                         AD3552R_REG_ADDR_POWERDOWN_CONFIG,
307                         AD3552R_MASK_CH_DAC_POWERDOWN(0),
308                         AD3552R_MASK_CH_DAC_POWERDOWN(1)
309         },
310         [AD3552R_CH_AMPLIFIER_POWERDOWN] = {
311                         AD3552R_REG_ADDR_POWERDOWN_CONFIG,
312                         AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(0),
313                         AD3552R_MASK_CH_AMPLIFIER_POWERDOWN(1)
314         },
315         [AD3552R_CH_OUTPUT_RANGE_SEL] = {
316                         AD3552R_REG_ADDR_CH0_CH1_OUTPUT_RANGE,
317                         AD3552R_MASK_CH_OUTPUT_RANGE_SEL(0),
318                         AD3552R_MASK_CH_OUTPUT_RANGE_SEL(1)
319         },
320         [AD3552R_CH_SELECT] = {
321                         AD3552R_REG_ADDR_CH_SELECT_16B,
322                         AD3552R_MASK_CH(0),
323                         AD3552R_MASK_CH(1)
324         }
325 };
326
327 static u8 _ad3552r_reg_len(u8 addr)
328 {
329         switch (addr) {
330         case AD3552R_REG_ADDR_HW_LDAC_16B:
331         case AD3552R_REG_ADDR_CH_SELECT_16B:
332         case AD3552R_REG_ADDR_SW_LDAC_16B:
333         case AD3552R_REG_ADDR_HW_LDAC_24B:
334         case AD3552R_REG_ADDR_CH_SELECT_24B:
335         case AD3552R_REG_ADDR_SW_LDAC_24B:
336                 return 1;
337         default:
338                 break;
339         }
340
341         if (addr > AD3552R_REG_ADDR_HW_LDAC_24B)
342                 return 3;
343         if (addr > AD3552R_REG_ADDR_HW_LDAC_16B)
344                 return 2;
345
346         return 1;
347 }
348
349 /* SPI transfer to device */
350 static int ad3552r_transfer(struct ad3552r_desc *dac, u8 addr, u32 len,
351                             u8 *data, bool is_read)
352 {
353         /* Maximum transfer: Addr (1B) + 2 * (Data Reg (3B)) + SW LDAC(1B) */
354         u8 buf[8];
355
356         buf[0] = addr & AD3552R_ADDR_MASK;
357         buf[0] |= is_read ? AD3552R_READ_BIT : 0;
358         if (is_read)
359                 return spi_write_then_read(dac->spi, buf, 1, data, len);
360
361         memcpy(buf + 1, data, len);
362         return spi_write_then_read(dac->spi, buf, len + 1, NULL, 0);
363 }
364
365 static int ad3552r_write_reg(struct ad3552r_desc *dac, u8 addr, u16 val)
366 {
367         u8 reg_len;
368         u8 buf[AD3552R_MAX_REG_SIZE] = { 0 };
369
370         reg_len = _ad3552r_reg_len(addr);
371         if (reg_len == 2)
372                 /* Only DAC register are 2 bytes wide */
373                 val &= AD3552R_MASK_DAC_12B;
374         if (reg_len == 1)
375                 buf[0] = val & 0xFF;
376         else
377                 /* reg_len can be 2 or 3, but 3rd bytes needs to be set to 0 */
378                 put_unaligned_be16(val, buf);
379
380         return ad3552r_transfer(dac, addr, reg_len, buf, false);
381 }
382
383 static int ad3552r_read_reg(struct ad3552r_desc *dac, u8 addr, u16 *val)
384 {
385         int err;
386         u8  reg_len, buf[AD3552R_MAX_REG_SIZE] = { 0 };
387
388         reg_len = _ad3552r_reg_len(addr);
389         err = ad3552r_transfer(dac, addr, reg_len, buf, true);
390         if (err)
391                 return err;
392
393         if (reg_len == 1)
394                 *val = buf[0];
395         else
396                 /* reg_len can be 2 or 3, but only first 2 bytes are relevant */
397                 *val = get_unaligned_be16(buf);
398
399         return 0;
400 }
401
402 static u16 ad3552r_field_prep(u16 val, u16 mask)
403 {
404         return (val << __ffs(mask)) & mask;
405 }
406
407 /* Update field of a register, shift val if needed */
408 static int ad3552r_update_reg_field(struct ad3552r_desc *dac, u8 addr, u16 mask,
409                                     u16 val)
410 {
411         int ret;
412         u16 reg;
413
414         ret = ad3552r_read_reg(dac, addr, &reg);
415         if (ret < 0)
416                 return ret;
417
418         reg &= ~mask;
419         reg |= ad3552r_field_prep(val, mask);
420
421         return ad3552r_write_reg(dac, addr, reg);
422 }
423
424 static int ad3552r_set_ch_value(struct ad3552r_desc *dac,
425                                 enum ad3552r_ch_attributes attr,
426                                 u8 ch,
427                                 u16 val)
428 {
429         /* Update register related to attributes in chip */
430         return ad3552r_update_reg_field(dac, addr_mask_map_ch[attr][0],
431                                        addr_mask_map_ch[attr][ch + 1], val);
432 }
433
434 #define AD3552R_CH_DAC(_idx) ((struct iio_chan_spec) {          \
435         .type = IIO_VOLTAGE,                                    \
436         .output = true,                                         \
437         .indexed = true,                                        \
438         .channel = _idx,                                        \
439         .scan_index = _idx,                                     \
440         .scan_type = {                                          \
441                 .sign = 'u',                                    \
442                 .realbits = 16,                                 \
443                 .storagebits = 16,                              \
444                 .endianness = IIO_BE,                           \
445         },                                                      \
446         .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |          \
447                                 BIT(IIO_CHAN_INFO_SCALE) |      \
448                                 BIT(IIO_CHAN_INFO_ENABLE) |     \
449                                 BIT(IIO_CHAN_INFO_OFFSET),      \
450 })
451
452 static int ad3552r_read_raw(struct iio_dev *indio_dev,
453                             struct iio_chan_spec const *chan,
454                             int *val,
455                             int *val2,
456                             long mask)
457 {
458         struct ad3552r_desc *dac = iio_priv(indio_dev);
459         u16 tmp_val;
460         int err;
461         u8 ch = chan->channel;
462
463         switch (mask) {
464         case IIO_CHAN_INFO_RAW:
465                 mutex_lock(&dac->lock);
466                 err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_CH_DAC_24B(ch),
467                                        &tmp_val);
468                 mutex_unlock(&dac->lock);
469                 if (err < 0)
470                         return err;
471                 *val = tmp_val;
472                 return IIO_VAL_INT;
473         case IIO_CHAN_INFO_ENABLE:
474                 mutex_lock(&dac->lock);
475                 err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_POWERDOWN_CONFIG,
476                                        &tmp_val);
477                 mutex_unlock(&dac->lock);
478                 if (err < 0)
479                         return err;
480                 *val = !((tmp_val & AD3552R_MASK_CH_DAC_POWERDOWN(ch)) >>
481                           __ffs(AD3552R_MASK_CH_DAC_POWERDOWN(ch)));
482                 return IIO_VAL_INT;
483         case IIO_CHAN_INFO_SCALE:
484                 *val = dac->ch_data[ch].scale_int;
485                 *val2 = dac->ch_data[ch].scale_dec;
486                 return IIO_VAL_INT_PLUS_MICRO;
487         case IIO_CHAN_INFO_OFFSET:
488                 *val = dac->ch_data[ch].offset_int;
489                 *val2 = dac->ch_data[ch].offset_dec;
490                 return IIO_VAL_INT_PLUS_MICRO;
491         default:
492                 return -EINVAL;
493         }
494 }
495
496 static int ad3552r_write_raw(struct iio_dev *indio_dev,
497                              struct iio_chan_spec const *chan,
498                              int val,
499                              int val2,
500                              long mask)
501 {
502         struct ad3552r_desc *dac = iio_priv(indio_dev);
503         int err;
504
505         mutex_lock(&dac->lock);
506         switch (mask) {
507         case IIO_CHAN_INFO_RAW:
508                 err = ad3552r_write_reg(dac,
509                                         AD3552R_REG_ADDR_CH_DAC_24B(chan->channel),
510                                         val);
511                 break;
512         case IIO_CHAN_INFO_ENABLE:
513                 err = ad3552r_set_ch_value(dac, AD3552R_CH_DAC_POWERDOWN,
514                                            chan->channel, !val);
515                 break;
516         default:
517                 err = -EINVAL;
518                 break;
519         }
520         mutex_unlock(&dac->lock);
521
522         return err;
523 }
524
525 static const struct iio_info ad3552r_iio_info = {
526         .read_raw = ad3552r_read_raw,
527         .write_raw = ad3552r_write_raw
528 };
529
530 static int32_t ad3552r_trigger_hw_ldac(struct gpio_desc *ldac)
531 {
532         gpiod_set_value_cansleep(ldac, 0);
533         usleep_range(AD3552R_LDAC_PULSE_US, AD3552R_LDAC_PULSE_US + 10);
534         gpiod_set_value_cansleep(ldac, 1);
535
536         return 0;
537 }
538
539 static int ad3552r_write_all_channels(struct ad3552r_desc *dac, u8 *data)
540 {
541         int err, len;
542         u8 addr, buff[AD3552R_MAX_CH * AD3552R_MAX_REG_SIZE + 1];
543
544         addr = AD3552R_REG_ADDR_CH_INPUT_24B(1);
545         /* CH1 */
546         memcpy(buff, data + 2, 2);
547         buff[2] = 0;
548         /* CH0 */
549         memcpy(buff + 3, data, 2);
550         buff[5] = 0;
551         len = 6;
552         if (!dac->gpio_ldac) {
553                 /* Software LDAC */
554                 buff[6] = AD3552R_MASK_ALL_CH;
555                 ++len;
556         }
557         err = ad3552r_transfer(dac, addr, len, buff, false);
558         if (err)
559                 return err;
560
561         if (dac->gpio_ldac)
562                 return ad3552r_trigger_hw_ldac(dac->gpio_ldac);
563
564         return 0;
565 }
566
567 static int ad3552r_write_codes(struct ad3552r_desc *dac, u32 mask, u8 *data)
568 {
569         int err;
570         u8 addr, buff[AD3552R_MAX_REG_SIZE];
571
572         if (mask == AD3552R_MASK_ALL_CH) {
573                 if (memcmp(data, data + 2, 2) != 0)
574                         return ad3552r_write_all_channels(dac, data);
575
576                 addr = AD3552R_REG_ADDR_INPUT_PAGE_MASK_24B;
577         } else {
578                 addr = AD3552R_REG_ADDR_CH_INPUT_24B(__ffs(mask));
579         }
580
581         memcpy(buff, data, 2);
582         buff[2] = 0;
583         err = ad3552r_transfer(dac, addr, 3, data, false);
584         if (err)
585                 return err;
586
587         if (dac->gpio_ldac)
588                 return ad3552r_trigger_hw_ldac(dac->gpio_ldac);
589
590         return ad3552r_write_reg(dac, AD3552R_REG_ADDR_SW_LDAC_24B, mask);
591 }
592
593 static irqreturn_t ad3552r_trigger_handler(int irq, void *p)
594 {
595         struct iio_poll_func *pf = p;
596         struct iio_dev *indio_dev = pf->indio_dev;
597         struct iio_buffer *buf = indio_dev->buffer;
598         struct ad3552r_desc *dac = iio_priv(indio_dev);
599         /* Maximum size of a scan */
600         u8 buff[AD3552R_MAX_CH * AD3552R_MAX_REG_SIZE];
601         int err;
602
603         memset(buff, 0, sizeof(buff));
604         err = iio_pop_from_buffer(buf, buff);
605         if (err)
606                 goto end;
607
608         mutex_lock(&dac->lock);
609         ad3552r_write_codes(dac, *indio_dev->active_scan_mask, buff);
610         mutex_unlock(&dac->lock);
611 end:
612         iio_trigger_notify_done(indio_dev->trig);
613
614         return IRQ_HANDLED;
615 }
616
617 static int ad3552r_check_scratch_pad(struct ad3552r_desc *dac)
618 {
619         const u16 val1 = AD3552R_SCRATCH_PAD_TEST_VAL1;
620         const u16 val2 = AD3552R_SCRATCH_PAD_TEST_VAL2;
621         u16 val;
622         int err;
623
624         err = ad3552r_write_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, val1);
625         if (err < 0)
626                 return err;
627
628         err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, &val);
629         if (err < 0)
630                 return err;
631
632         if (val1 != val)
633                 return -ENODEV;
634
635         err = ad3552r_write_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, val2);
636         if (err < 0)
637                 return err;
638
639         err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_SCRATCH_PAD, &val);
640         if (err < 0)
641                 return err;
642
643         if (val2 != val)
644                 return -ENODEV;
645
646         return 0;
647 }
648
649 struct reg_addr_pool {
650         struct ad3552r_desc *dac;
651         u8                  addr;
652 };
653
654 static int ad3552r_read_reg_wrapper(struct reg_addr_pool *addr)
655 {
656         int err;
657         u16 val;
658
659         err = ad3552r_read_reg(addr->dac, addr->addr, &val);
660         if (err)
661                 return err;
662
663         return val;
664 }
665
666 static int ad3552r_reset(struct ad3552r_desc *dac)
667 {
668         struct reg_addr_pool addr;
669         int ret;
670         int val;
671
672         dac->gpio_reset = devm_gpiod_get_optional(&dac->spi->dev, "reset",
673                                                   GPIOD_OUT_LOW);
674         if (IS_ERR(dac->gpio_reset))
675                 return dev_err_probe(&dac->spi->dev, PTR_ERR(dac->gpio_reset),
676                                      "Error while getting gpio reset");
677
678         if (dac->gpio_reset) {
679                 /* Perform hardware reset */
680                 usleep_range(10, 20);
681                 gpiod_set_value_cansleep(dac->gpio_reset, 1);
682         } else {
683                 /* Perform software reset if no GPIO provided */
684                 ret = ad3552r_update_reg_field(dac,
685                                                AD3552R_REG_ADDR_INTERFACE_CONFIG_A,
686                                                AD3552R_MASK_SOFTWARE_RESET,
687                                                AD3552R_MASK_SOFTWARE_RESET);
688                 if (ret < 0)
689                         return ret;
690
691         }
692
693         addr.dac = dac;
694         addr.addr = AD3552R_REG_ADDR_INTERFACE_CONFIG_B;
695         ret = readx_poll_timeout(ad3552r_read_reg_wrapper, &addr, val,
696                                  val == AD3552R_DEFAULT_CONFIG_B_VALUE ||
697                                  val < 0,
698                                  5000, 50000);
699         if (val < 0)
700                 ret = val;
701         if (ret) {
702                 dev_err(&dac->spi->dev, "Error while resetting");
703                 return ret;
704         }
705
706         ret = readx_poll_timeout(ad3552r_read_reg_wrapper, &addr, val,
707                                  !(val & AD3552R_MASK_INTERFACE_NOT_READY) ||
708                                  val < 0,
709                                  5000, 50000);
710         if (val < 0)
711                 ret = val;
712         if (ret) {
713                 dev_err(&dac->spi->dev, "Error while resetting");
714                 return ret;
715         }
716
717         return ad3552r_update_reg_field(dac,
718                                         addr_mask_map[AD3552R_ADDR_ASCENSION][0],
719                                         addr_mask_map[AD3552R_ADDR_ASCENSION][1],
720                                         val);
721 }
722
723 static void ad3552r_get_custom_range(struct ad3552r_desc *dac, s32 i, s32 *v_min,
724                                      s32 *v_max)
725 {
726         s64 vref, tmp, common, offset, gn, gp;
727         /*
728          * From datasheet formula (In Volts):
729          *      Vmin = 2.5 + [(GainN + Offset / 1024) * 2.5 * Rfb * 1.03]
730          *      Vmax = 2.5 - [(GainP + Offset / 1024) * 2.5 * Rfb * 1.03]
731          * Calculus are converted to milivolts
732          */
733         vref = 2500;
734         /* 2.5 * 1.03 * 1000 (To mV) */
735         common = 2575 * dac->ch_data[i].rfb;
736         offset = dac->ch_data[i].gain_offset;
737
738         gn = gains_scaling_table[dac->ch_data[i].n];
739         tmp = (1024 * gn + AD3552R_GAIN_SCALE * offset) * common;
740         tmp = div_s64(tmp, 1024  * AD3552R_GAIN_SCALE);
741         *v_max = vref + tmp;
742
743         gp = gains_scaling_table[dac->ch_data[i].p];
744         tmp = (1024 * gp - AD3552R_GAIN_SCALE * offset) * common;
745         tmp = div_s64(tmp, 1024 * AD3552R_GAIN_SCALE);
746         *v_min = vref - tmp;
747 }
748
749 static void ad3552r_calc_gain_and_offset(struct ad3552r_desc *dac, s32 ch)
750 {
751         s32 idx, v_max, v_min, span, rem;
752         s64 tmp;
753
754         if (dac->ch_data[ch].range_override) {
755                 ad3552r_get_custom_range(dac, ch, &v_min, &v_max);
756         } else {
757                 /* Normal range */
758                 idx = dac->ch_data[ch].range;
759                 v_min = dac->model_data->ranges_table[idx][0];
760                 v_max = dac->model_data->ranges_table[idx][1];
761         }
762
763         /*
764          * From datasheet formula:
765          *      Vout = Span * (D / 65536) + Vmin
766          * Converted to scale and offset:
767          *      Scale = Span / 65536
768          *      Offset = 65536 * Vmin / Span
769          *
770          * Reminders are in micros in order to be printed as
771          * IIO_VAL_INT_PLUS_MICRO
772          */
773         span = v_max - v_min;
774         dac->ch_data[ch].scale_int = div_s64_rem(span, 65536, &rem);
775         /* Do operations in microvolts */
776         dac->ch_data[ch].scale_dec = DIV_ROUND_CLOSEST((s64)rem * 1000000,
777                                                         65536);
778
779         dac->ch_data[ch].offset_int = div_s64_rem(v_min * 65536, span, &rem);
780         tmp = (s64)rem * 1000000;
781         dac->ch_data[ch].offset_dec = div_s64(tmp, span);
782 }
783
784 static int ad3552r_find_range(const struct ad3552r_model_data *model_data,
785                               s32 *vals)
786 {
787         int i;
788
789         for (i = 0; i < model_data->num_ranges; i++)
790                 if (vals[0] == model_data->ranges_table[i][0] * 1000 &&
791                     vals[1] == model_data->ranges_table[i][1] * 1000)
792                         return i;
793
794         return -EINVAL;
795 }
796
797 static int ad3552r_configure_custom_gain(struct ad3552r_desc *dac,
798                                          struct fwnode_handle *child,
799                                          u32 ch)
800 {
801         struct device *dev = &dac->spi->dev;
802         u32 val;
803         int err;
804         u8 addr;
805         u16 reg = 0, offset;
806
807         struct fwnode_handle *gain_child __free(fwnode_handle)
808                 = fwnode_get_named_child_node(child,
809                                               "custom-output-range-config");
810         if (!gain_child)
811                 return dev_err_probe(dev, -EINVAL,
812                                      "mandatory custom-output-range-config property missing\n");
813
814         dac->ch_data[ch].range_override = 1;
815         reg |= ad3552r_field_prep(1, AD3552R_MASK_CH_RANGE_OVERRIDE);
816
817         err = fwnode_property_read_u32(gain_child, "adi,gain-scaling-p", &val);
818         if (err)
819                 return dev_err_probe(dev, err,
820                                      "mandatory adi,gain-scaling-p property missing\n");
821         reg |= ad3552r_field_prep(val, AD3552R_MASK_CH_GAIN_SCALING_P);
822         dac->ch_data[ch].p = val;
823
824         err = fwnode_property_read_u32(gain_child, "adi,gain-scaling-n", &val);
825         if (err)
826                 return dev_err_probe(dev, err,
827                                      "mandatory adi,gain-scaling-n property missing\n");
828         reg |= ad3552r_field_prep(val, AD3552R_MASK_CH_GAIN_SCALING_N);
829         dac->ch_data[ch].n = val;
830
831         err = fwnode_property_read_u32(gain_child, "adi,rfb-ohms", &val);
832         if (err)
833                 return dev_err_probe(dev, err,
834                                      "mandatory adi,rfb-ohms property missing\n");
835         dac->ch_data[ch].rfb = val;
836
837         err = fwnode_property_read_u32(gain_child, "adi,gain-offset", &val);
838         if (err)
839                 return dev_err_probe(dev, err,
840                                      "mandatory adi,gain-offset property missing\n");
841         dac->ch_data[ch].gain_offset = val;
842
843         offset = abs((s32)val);
844         reg |= ad3552r_field_prep((offset >> 8), AD3552R_MASK_CH_OFFSET_BIT_8);
845
846         reg |= ad3552r_field_prep((s32)val < 0, AD3552R_MASK_CH_OFFSET_POLARITY);
847         addr = AD3552R_REG_ADDR_CH_GAIN(ch);
848         err = ad3552r_write_reg(dac, addr,
849                                 offset & AD3552R_MASK_CH_OFFSET_BITS_0_7);
850         if (err)
851                 return dev_err_probe(dev, err, "Error writing register\n");
852
853         err = ad3552r_write_reg(dac, addr, reg);
854         if (err)
855                 return dev_err_probe(dev, err, "Error writing register\n");
856
857         return 0;
858 }
859
860 static int ad3552r_configure_device(struct ad3552r_desc *dac)
861 {
862         struct device *dev = &dac->spi->dev;
863         int err, cnt = 0, voltage, delta = 100000;
864         u32 vals[2], val, ch;
865
866         dac->gpio_ldac = devm_gpiod_get_optional(dev, "ldac", GPIOD_OUT_HIGH);
867         if (IS_ERR(dac->gpio_ldac))
868                 return dev_err_probe(dev, PTR_ERR(dac->gpio_ldac),
869                                      "Error getting gpio ldac");
870
871         voltage = devm_regulator_get_enable_read_voltage(dev, "vref");
872         if (voltage < 0 && voltage != -ENODEV)
873                 return dev_err_probe(dev, voltage, "Error getting vref voltage\n");
874
875         if (voltage == -ENODEV) {
876                 if (device_property_read_bool(dev, "adi,vref-out-en"))
877                         val = AD3552R_INTERNAL_VREF_PIN_2P5V;
878                 else
879                         val = AD3552R_INTERNAL_VREF_PIN_FLOATING;
880         } else {
881                 if (voltage > 2500000 + delta || voltage < 2500000 - delta) {
882                         dev_warn(dev, "vref-supply must be 2.5V");
883                         return -EINVAL;
884                 }
885                 val = AD3552R_EXTERNAL_VREF_PIN_INPUT;
886         }
887
888         err = ad3552r_update_reg_field(dac,
889                                        addr_mask_map[AD3552R_VREF_SELECT][0],
890                                        addr_mask_map[AD3552R_VREF_SELECT][1],
891                                        val);
892         if (err)
893                 return err;
894
895         err = device_property_read_u32(dev, "adi,sdo-drive-strength", &val);
896         if (!err) {
897                 if (val > 3) {
898                         dev_err(dev, "adi,sdo-drive-strength must be less than 4\n");
899                         return -EINVAL;
900                 }
901
902                 err = ad3552r_update_reg_field(dac,
903                                                addr_mask_map[AD3552R_SDO_DRIVE_STRENGTH][0],
904                                                addr_mask_map[AD3552R_SDO_DRIVE_STRENGTH][1],
905                                                val);
906                 if (err)
907                         return err;
908         }
909
910         dac->num_ch = device_get_child_node_count(dev);
911         if (!dac->num_ch) {
912                 dev_err(dev, "No channels defined\n");
913                 return -ENODEV;
914         }
915
916         device_for_each_child_node_scoped(dev, child) {
917                 err = fwnode_property_read_u32(child, "reg", &ch);
918                 if (err)
919                         return dev_err_probe(dev, err,
920                                              "mandatory reg property missing\n");
921                 if (ch >= dac->model_data->num_hw_channels)
922                         return dev_err_probe(dev, -EINVAL,
923                                              "reg must be less than %d\n",
924                                              dac->model_data->num_hw_channels);
925
926                 if (fwnode_property_present(child, "adi,output-range-microvolt")) {
927                         err = fwnode_property_read_u32_array(child,
928                                                              "adi,output-range-microvolt",
929                                                              vals,
930                                                              2);
931                         if (err)
932                                 return dev_err_probe(dev, err,
933                                         "adi,output-range-microvolt property could not be parsed\n");
934
935                         err = ad3552r_find_range(dac->model_data, vals);
936                         if (err < 0)
937                                 return dev_err_probe(dev, err,
938                                                      "Invalid adi,output-range-microvolt value\n");
939
940                         val = err;
941                         err = ad3552r_set_ch_value(dac,
942                                                    AD3552R_CH_OUTPUT_RANGE_SEL,
943                                                    ch, val);
944                         if (err)
945                                 return err;
946
947                         dac->ch_data[ch].range = val;
948                 } else if (dac->model_data->requires_output_range) {
949                         return dev_err_probe(dev, -EINVAL,
950                                              "adi,output-range-microvolt is required for %s\n",
951                                              dac->model_data->model_name);
952                 } else {
953                         err = ad3552r_configure_custom_gain(dac, child, ch);
954                         if (err)
955                                 return err;
956                 }
957
958                 ad3552r_calc_gain_and_offset(dac, ch);
959                 dac->enabled_ch |= BIT(ch);
960
961                 err = ad3552r_set_ch_value(dac, AD3552R_CH_SELECT, ch, 1);
962                 if (err < 0)
963                         return err;
964
965                 dac->channels[cnt] = AD3552R_CH_DAC(ch);
966                 ++cnt;
967
968         }
969
970         /* Disable unused channels */
971         for_each_clear_bit(ch, &dac->enabled_ch,
972                            dac->model_data->num_hw_channels) {
973                 err = ad3552r_set_ch_value(dac, AD3552R_CH_AMPLIFIER_POWERDOWN,
974                                            ch, 1);
975                 if (err)
976                         return err;
977         }
978
979         dac->num_ch = cnt;
980
981         return 0;
982 }
983
984 static int ad3552r_init(struct ad3552r_desc *dac)
985 {
986         int err;
987         u16 val, id;
988
989         err = ad3552r_reset(dac);
990         if (err) {
991                 dev_err(&dac->spi->dev, "Reset failed\n");
992                 return err;
993         }
994
995         err = ad3552r_check_scratch_pad(dac);
996         if (err) {
997                 dev_err(&dac->spi->dev, "Scratch pad test failed\n");
998                 return err;
999         }
1000
1001         err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_PRODUCT_ID_L, &val);
1002         if (err) {
1003                 dev_err(&dac->spi->dev, "Fail read PRODUCT_ID_L\n");
1004                 return err;
1005         }
1006
1007         id = val;
1008         err = ad3552r_read_reg(dac, AD3552R_REG_ADDR_PRODUCT_ID_H, &val);
1009         if (err) {
1010                 dev_err(&dac->spi->dev, "Fail read PRODUCT_ID_H\n");
1011                 return err;
1012         }
1013
1014         id |= val << 8;
1015         if (id != dac->model_data->chip_id) {
1016                 dev_err(&dac->spi->dev, "Product id not matching\n");
1017                 return -ENODEV;
1018         }
1019
1020         return ad3552r_configure_device(dac);
1021 }
1022
1023 static int ad3552r_probe(struct spi_device *spi)
1024 {
1025         struct ad3552r_desc *dac;
1026         struct iio_dev *indio_dev;
1027         int err;
1028
1029         indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*dac));
1030         if (!indio_dev)
1031                 return -ENOMEM;
1032
1033         dac = iio_priv(indio_dev);
1034         dac->spi = spi;
1035         dac->model_data = spi_get_device_match_data(spi);
1036         if (!dac->model_data)
1037                 return -EINVAL;
1038
1039         mutex_init(&dac->lock);
1040
1041         err = ad3552r_init(dac);
1042         if (err)
1043                 return err;
1044
1045         /* Config triggered buffer device */
1046         indio_dev->name = dac->model_data->model_name;
1047         indio_dev->dev.parent = &spi->dev;
1048         indio_dev->info = &ad3552r_iio_info;
1049         indio_dev->num_channels = dac->num_ch;
1050         indio_dev->channels = dac->channels;
1051         indio_dev->modes = INDIO_DIRECT_MODE;
1052
1053         err = devm_iio_triggered_buffer_setup_ext(&indio_dev->dev, indio_dev, NULL,
1054                                                   &ad3552r_trigger_handler,
1055                                                   IIO_BUFFER_DIRECTION_OUT,
1056                                                   NULL,
1057                                                   NULL);
1058         if (err)
1059                 return err;
1060
1061         return devm_iio_device_register(&spi->dev, indio_dev);
1062 }
1063
1064 static const struct ad3552r_model_data ad3541r_model_data = {
1065         .model_name = "ad3541r",
1066         .chip_id = AD3541R_ID,
1067         .num_hw_channels = 1,
1068         .ranges_table = ad3542r_ch_ranges,
1069         .num_ranges = ARRAY_SIZE(ad3542r_ch_ranges),
1070         .requires_output_range = true,
1071 };
1072
1073 static const struct ad3552r_model_data ad3542r_model_data = {
1074         .model_name = "ad3542r",
1075         .chip_id = AD3542R_ID,
1076         .num_hw_channels = 2,
1077         .ranges_table = ad3542r_ch_ranges,
1078         .num_ranges = ARRAY_SIZE(ad3542r_ch_ranges),
1079         .requires_output_range = true,
1080 };
1081
1082 static const struct ad3552r_model_data ad3551r_model_data = {
1083         .model_name = "ad3551r",
1084         .chip_id = AD3551R_ID,
1085         .num_hw_channels = 1,
1086         .ranges_table = ad3552r_ch_ranges,
1087         .num_ranges = ARRAY_SIZE(ad3552r_ch_ranges),
1088         .requires_output_range = false,
1089 };
1090
1091 static const struct ad3552r_model_data ad3552r_model_data = {
1092         .model_name = "ad3552r",
1093         .chip_id = AD3552R_ID,
1094         .num_hw_channels = 2,
1095         .ranges_table = ad3552r_ch_ranges,
1096         .num_ranges = ARRAY_SIZE(ad3552r_ch_ranges),
1097         .requires_output_range = false,
1098 };
1099
1100 static const struct spi_device_id ad3552r_id[] = {
1101         {
1102                 .name = "ad3541r",
1103                 .driver_data = (kernel_ulong_t)&ad3541r_model_data
1104         },
1105         {
1106                 .name = "ad3542r",
1107                 .driver_data = (kernel_ulong_t)&ad3542r_model_data
1108         },
1109         {
1110                 .name = "ad3551r",
1111                 .driver_data = (kernel_ulong_t)&ad3551r_model_data
1112         },
1113         {
1114                 .name = "ad3552r",
1115                 .driver_data = (kernel_ulong_t)&ad3552r_model_data
1116         },
1117         { }
1118 };
1119 MODULE_DEVICE_TABLE(spi, ad3552r_id);
1120
1121 static const struct of_device_id ad3552r_of_match[] = {
1122         { .compatible = "adi,ad3541r", .data = &ad3541r_model_data },
1123         { .compatible = "adi,ad3542r", .data = &ad3542r_model_data },
1124         { .compatible = "adi,ad3551r", .data = &ad3551r_model_data },
1125         { .compatible = "adi,ad3552r", .data = &ad3552r_model_data },
1126         { }
1127 };
1128 MODULE_DEVICE_TABLE(of, ad3552r_of_match);
1129
1130 static struct spi_driver ad3552r_driver = {
1131         .driver = {
1132                 .name = "ad3552r",
1133                 .of_match_table = ad3552r_of_match,
1134         },
1135         .probe = ad3552r_probe,
1136         .id_table = ad3552r_id
1137 };
1138 module_spi_driver(ad3552r_driver);
1139
1140 MODULE_AUTHOR("Mihail Chindris <mihail.chindris@analog.com>");
1141 MODULE_DESCRIPTION("Analog Device AD3552R DAC");
1142 MODULE_LICENSE("GPL v2");