xref: /linux/drivers/iio/dac/ad3552r.c (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
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 <linux/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");
1143