1 /*
2  * ADT7316 digital temperature sensor driver supporting ADT7316/7/8 ADT7516/7/9
3  *
4  *
5  * Copyright 2010 Analog Devices Inc.
6  *
7  * Licensed under the GPL-2 or later.
8  */
9 
10 #include <linux/interrupt.h>
11 #include <linux/gpio.h>
12 #include <linux/workqueue.h>
13 #include <linux/device.h>
14 #include <linux/kernel.h>
15 #include <linux/slab.h>
16 #include <linux/sysfs.h>
17 #include <linux/list.h>
18 #include <linux/i2c.h>
19 #include <linux/rtc.h>
20 #include <linux/module.h>
21 
22 #include <linux/iio/iio.h>
23 #include <linux/iio/events.h>
24 #include <linux/iio/sysfs.h>
25 #include "adt7316.h"
26 
27 /*
28  * ADT7316 registers definition
29  */
30 #define ADT7316_INT_STAT1		0x0
31 #define ADT7316_INT_STAT2		0x1
32 #define ADT7316_LSB_IN_TEMP_VDD		0x3
33 #define ADT7316_LSB_IN_TEMP_MASK	0x3
34 #define ADT7316_LSB_VDD_MASK		0xC
35 #define ADT7316_LSB_VDD_OFFSET		2
36 #define ADT7316_LSB_EX_TEMP_AIN		0x4
37 #define ADT7316_LSB_EX_TEMP_MASK	0x3
38 #define ADT7516_LSB_AIN_SHIFT		2
39 #define ADT7316_AD_MSB_DATA_BASE        0x6
40 #define ADT7316_AD_MSB_DATA_REGS        3
41 #define ADT7516_AD_MSB_DATA_REGS        6
42 #define ADT7316_MSB_VDD			0x6
43 #define ADT7316_MSB_IN_TEMP		0x7
44 #define ADT7316_MSB_EX_TEMP		0x8
45 #define ADT7516_MSB_AIN1		0x8
46 #define ADT7516_MSB_AIN2		0x9
47 #define ADT7516_MSB_AIN3		0xA
48 #define ADT7516_MSB_AIN4		0xB
49 #define ADT7316_DA_DATA_BASE		0x10
50 #define ADT7316_DA_10_BIT_LSB_SHIFT	6
51 #define ADT7316_DA_12_BIT_LSB_SHIFT	4
52 #define ADT7316_DA_MSB_DATA_REGS	4
53 #define ADT7316_LSB_DAC_A		0x10
54 #define ADT7316_MSB_DAC_A		0x11
55 #define ADT7316_LSB_DAC_B		0x12
56 #define ADT7316_MSB_DAC_B		0x13
57 #define ADT7316_LSB_DAC_C		0x14
58 #define ADT7316_MSB_DAC_C		0x15
59 #define ADT7316_LSB_DAC_D		0x16
60 #define ADT7316_MSB_DAC_D		0x17
61 #define ADT7316_CONFIG1			0x18
62 #define ADT7316_CONFIG2			0x19
63 #define ADT7316_CONFIG3			0x1A
64 #define ADT7316_DAC_CONFIG		0x1B
65 #define ADT7316_LDAC_CONFIG		0x1C
66 #define ADT7316_INT_MASK1		0x1D
67 #define ADT7316_INT_MASK2		0x1E
68 #define ADT7316_IN_TEMP_OFFSET		0x1F
69 #define ADT7316_EX_TEMP_OFFSET		0x20
70 #define ADT7316_IN_ANALOG_TEMP_OFFSET	0x21
71 #define ADT7316_EX_ANALOG_TEMP_OFFSET	0x22
72 #define ADT7316_VDD_HIGH		0x23
73 #define ADT7316_VDD_LOW			0x24
74 #define ADT7316_IN_TEMP_HIGH		0x25
75 #define ADT7316_IN_TEMP_LOW		0x26
76 #define ADT7316_EX_TEMP_HIGH		0x27
77 #define ADT7316_EX_TEMP_LOW		0x28
78 #define ADT7516_AIN2_HIGH		0x2B
79 #define ADT7516_AIN2_LOW		0x2C
80 #define ADT7516_AIN3_HIGH		0x2D
81 #define ADT7516_AIN3_LOW		0x2E
82 #define ADT7516_AIN4_HIGH		0x2F
83 #define ADT7516_AIN4_LOW		0x30
84 #define ADT7316_DEVICE_ID		0x4D
85 #define ADT7316_MANUFACTURE_ID		0x4E
86 #define ADT7316_DEVICE_REV		0x4F
87 #define ADT7316_SPI_LOCK_STAT		0x7F
88 
89 /*
90  * ADT7316 config1
91  */
92 #define ADT7316_EN			0x1
93 #define ADT7516_SEL_EX_TEMP		0x4
94 #define ADT7516_SEL_AIN1_2_EX_TEMP_MASK	0x6
95 #define ADT7516_SEL_AIN3		0x8
96 #define ADT7316_INT_EN			0x20
97 #define ADT7316_INT_POLARITY		0x40
98 #define ADT7316_PD			0x80
99 
100 /*
101  * ADT7316 config2
102  */
103 #define ADT7316_AD_SINGLE_CH_MASK	0x3
104 #define ADT7516_AD_SINGLE_CH_MASK	0x7
105 #define ADT7316_AD_SINGLE_CH_VDD	0
106 #define ADT7316_AD_SINGLE_CH_IN		1
107 #define ADT7316_AD_SINGLE_CH_EX		2
108 #define ADT7516_AD_SINGLE_CH_AIN1	2
109 #define ADT7516_AD_SINGLE_CH_AIN2	3
110 #define ADT7516_AD_SINGLE_CH_AIN3	4
111 #define ADT7516_AD_SINGLE_CH_AIN4	5
112 #define ADT7316_AD_SINGLE_CH_MODE	0x10
113 #define ADT7316_DISABLE_AVERAGING	0x20
114 #define ADT7316_EN_SMBUS_TIMEOUT	0x40
115 #define ADT7316_RESET			0x80
116 
117 /*
118  * ADT7316 config3
119  */
120 #define ADT7316_ADCLK_22_5		0x1
121 #define ADT7316_DA_HIGH_RESOLUTION	0x2
122 #define ADT7316_DA_EN_VIA_DAC_LDAC	0x8
123 #define ADT7516_AIN_IN_VREF		0x10
124 #define ADT7316_EN_IN_TEMP_PROP_DACA	0x20
125 #define ADT7316_EN_EX_TEMP_PROP_DACB	0x40
126 
127 /*
128  * ADT7316 DAC config
129  */
130 #define ADT7316_DA_2VREF_CH_MASK	0xF
131 #define ADT7316_DA_EN_MODE_MASK		0x30
132 #define ADT7316_DA_EN_MODE_SHIFT	4
133 #define ADT7316_DA_EN_MODE_SINGLE	0x00
134 #define ADT7316_DA_EN_MODE_AB_CD	0x10
135 #define ADT7316_DA_EN_MODE_ABCD		0x20
136 #define ADT7316_DA_EN_MODE_LDAC		0x30
137 #define ADT7316_VREF_BYPASS_DAC_AB	0x40
138 #define ADT7316_VREF_BYPASS_DAC_CD	0x80
139 
140 /*
141  * ADT7316 LDAC config
142  */
143 #define ADT7316_LDAC_EN_DA_MASK		0xF
144 #define ADT7316_DAC_IN_VREF		0x10
145 #define ADT7516_DAC_AB_IN_VREF		0x10
146 #define ADT7516_DAC_CD_IN_VREF		0x20
147 #define ADT7516_DAC_IN_VREF_OFFSET	4
148 #define ADT7516_DAC_IN_VREF_MASK	0x30
149 
150 /*
151  * ADT7316 INT_MASK2
152  */
153 #define ADT7316_INT_MASK2_VDD		0x10
154 
155 /*
156  * ADT7316 value masks
157  */
158 #define ADT7316_VALUE_MASK		0xfff
159 #define ADT7316_T_VALUE_SIGN		0x400
160 #define ADT7316_T_VALUE_FLOAT_OFFSET	2
161 #define ADT7316_T_VALUE_FLOAT_MASK	0x2
162 
163 /*
164  * Chip ID
165  */
166 #define ID_ADT7316		0x1
167 #define ID_ADT7317		0x2
168 #define ID_ADT7318		0x3
169 #define ID_ADT7516		0x11
170 #define ID_ADT7517		0x12
171 #define ID_ADT7519		0x14
172 
173 #define ID_FAMILY_MASK		0xF0
174 #define ID_ADT73XX		0x0
175 #define ID_ADT75XX		0x10
176 
177 /*
178  * struct adt7316_chip_info - chip specific information
179  */
180 
181 struct adt7316_chip_info {
182 	struct adt7316_bus	bus;
183 	struct gpio_desc	*ldac_pin;
184 	u16			int_mask;	/* 0x2f */
185 	u8			config1;
186 	u8			config2;
187 	u8			config3;
188 	u8			dac_config;	/* DAC config */
189 	u8			ldac_config;	/* LDAC config */
190 	u8			dac_bits;	/* 8, 10, 12 */
191 	u8			id;		/* chip id */
192 };
193 
194 /*
195  * Logic interrupt mask for user application to enable
196  * interrupts.
197  */
198 #define ADT7316_IN_TEMP_HIGH_INT_MASK	0x1
199 #define ADT7316_IN_TEMP_LOW_INT_MASK	0x2
200 #define ADT7316_EX_TEMP_HIGH_INT_MASK	0x4
201 #define ADT7316_EX_TEMP_LOW_INT_MASK	0x8
202 #define ADT7316_EX_TEMP_FAULT_INT_MASK	0x10
203 #define ADT7516_AIN1_INT_MASK		0x4
204 #define ADT7516_AIN2_INT_MASK		0x20
205 #define ADT7516_AIN3_INT_MASK		0x40
206 #define ADT7516_AIN4_INT_MASK		0x80
207 #define ADT7316_VDD_INT_MASK		0x100
208 #define ADT7316_TEMP_INT_MASK		0x1F
209 #define ADT7516_AIN_INT_MASK		0xE0
210 #define ADT7316_TEMP_AIN_INT_MASK	\
211 	(ADT7316_TEMP_INT_MASK)
212 
213 /*
214  * struct adt7316_chip_info - chip specific information
215  */
216 
217 struct adt7316_limit_regs {
218 	u16	data_high;
219 	u16	data_low;
220 };
221 
222 static ssize_t adt7316_show_enabled(struct device *dev,
223 				    struct device_attribute *attr,
224 				    char *buf)
225 {
226 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
227 	struct adt7316_chip_info *chip = iio_priv(dev_info);
228 
229 	return sprintf(buf, "%d\n", !!(chip->config1 & ADT7316_EN));
230 }
231 
232 static ssize_t _adt7316_store_enabled(struct adt7316_chip_info *chip,
233 				      int enable)
234 {
235 	u8 config1;
236 	int ret;
237 
238 	if (enable)
239 		config1 = chip->config1 | ADT7316_EN;
240 	else
241 		config1 = chip->config1 & ~ADT7316_EN;
242 
243 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, config1);
244 	if (ret)
245 		return -EIO;
246 
247 	chip->config1 = config1;
248 
249 	return ret;
250 }
251 
252 static ssize_t adt7316_store_enabled(struct device *dev,
253 				     struct device_attribute *attr,
254 				     const char *buf,
255 				     size_t len)
256 {
257 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
258 	struct adt7316_chip_info *chip = iio_priv(dev_info);
259 	int enable;
260 
261 	if (buf[0] == '1')
262 		enable = 1;
263 	else
264 		enable = 0;
265 
266 	if (_adt7316_store_enabled(chip, enable) < 0)
267 		return -EIO;
268 
269 	return len;
270 }
271 
272 static IIO_DEVICE_ATTR(enabled, 0644,
273 		adt7316_show_enabled,
274 		adt7316_store_enabled,
275 		0);
276 
277 static ssize_t adt7316_show_select_ex_temp(struct device *dev,
278 					   struct device_attribute *attr,
279 					   char *buf)
280 {
281 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
282 	struct adt7316_chip_info *chip = iio_priv(dev_info);
283 
284 	if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
285 		return -EPERM;
286 
287 	return sprintf(buf, "%d\n", !!(chip->config1 & ADT7516_SEL_EX_TEMP));
288 }
289 
290 static ssize_t adt7316_store_select_ex_temp(struct device *dev,
291 					    struct device_attribute *attr,
292 					    const char *buf,
293 					    size_t len)
294 {
295 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
296 	struct adt7316_chip_info *chip = iio_priv(dev_info);
297 	u8 config1;
298 	int ret;
299 
300 	if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
301 		return -EPERM;
302 
303 	config1 = chip->config1 & (~ADT7516_SEL_EX_TEMP);
304 	if (buf[0] == '1')
305 		config1 |= ADT7516_SEL_EX_TEMP;
306 
307 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, config1);
308 	if (ret)
309 		return -EIO;
310 
311 	chip->config1 = config1;
312 
313 	return len;
314 }
315 
316 static IIO_DEVICE_ATTR(select_ex_temp, 0644,
317 		adt7316_show_select_ex_temp,
318 		adt7316_store_select_ex_temp,
319 		0);
320 
321 static ssize_t adt7316_show_mode(struct device *dev,
322 				 struct device_attribute *attr,
323 				 char *buf)
324 {
325 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
326 	struct adt7316_chip_info *chip = iio_priv(dev_info);
327 
328 	if (chip->config2 & ADT7316_AD_SINGLE_CH_MODE)
329 		return sprintf(buf, "single_channel\n");
330 
331 	return sprintf(buf, "round_robin\n");
332 }
333 
334 static ssize_t adt7316_store_mode(struct device *dev,
335 				  struct device_attribute *attr,
336 				  const char *buf,
337 				  size_t len)
338 {
339 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
340 	struct adt7316_chip_info *chip = iio_priv(dev_info);
341 	u8 config2;
342 	int ret;
343 
344 	config2 = chip->config2 & (~ADT7316_AD_SINGLE_CH_MODE);
345 	if (!memcmp(buf, "single_channel", 14))
346 		config2 |= ADT7316_AD_SINGLE_CH_MODE;
347 
348 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG2, config2);
349 	if (ret)
350 		return -EIO;
351 
352 	chip->config2 = config2;
353 
354 	return len;
355 }
356 
357 static IIO_DEVICE_ATTR(mode, 0644,
358 		adt7316_show_mode,
359 		adt7316_store_mode,
360 		0);
361 
362 static ssize_t adt7316_show_all_modes(struct device *dev,
363 				      struct device_attribute *attr,
364 				      char *buf)
365 {
366 	return sprintf(buf, "single_channel\nround_robin\n");
367 }
368 
369 static IIO_DEVICE_ATTR(all_modes, 0444, adt7316_show_all_modes, NULL, 0);
370 
371 static ssize_t adt7316_show_ad_channel(struct device *dev,
372 				       struct device_attribute *attr,
373 				       char *buf)
374 {
375 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
376 	struct adt7316_chip_info *chip = iio_priv(dev_info);
377 
378 	if (!(chip->config2 & ADT7316_AD_SINGLE_CH_MODE))
379 		return -EPERM;
380 
381 	switch (chip->config2 & ADT7516_AD_SINGLE_CH_MASK) {
382 	case ADT7316_AD_SINGLE_CH_VDD:
383 		return sprintf(buf, "0 - VDD\n");
384 	case ADT7316_AD_SINGLE_CH_IN:
385 		return sprintf(buf, "1 - Internal Temperature\n");
386 	case ADT7316_AD_SINGLE_CH_EX:
387 		if (((chip->id & ID_FAMILY_MASK) == ID_ADT75XX) &&
388 		    (chip->config1 & ADT7516_SEL_AIN1_2_EX_TEMP_MASK) == 0)
389 			return sprintf(buf, "2 - AIN1\n");
390 
391 		return sprintf(buf, "2 - External Temperature\n");
392 	case ADT7516_AD_SINGLE_CH_AIN2:
393 		if ((chip->config1 & ADT7516_SEL_AIN1_2_EX_TEMP_MASK) == 0)
394 			return sprintf(buf, "3 - AIN2\n");
395 
396 		return sprintf(buf, "N/A\n");
397 	case ADT7516_AD_SINGLE_CH_AIN3:
398 		if (chip->config1 & ADT7516_SEL_AIN3)
399 			return sprintf(buf, "4 - AIN3\n");
400 
401 		return sprintf(buf, "N/A\n");
402 	case ADT7516_AD_SINGLE_CH_AIN4:
403 		return sprintf(buf, "5 - AIN4\n");
404 	default:
405 		return sprintf(buf, "N/A\n");
406 	}
407 }
408 
409 static ssize_t adt7316_store_ad_channel(struct device *dev,
410 					struct device_attribute *attr,
411 					const char *buf,
412 					size_t len)
413 {
414 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
415 	struct adt7316_chip_info *chip = iio_priv(dev_info);
416 	u8 config2;
417 	u8 data;
418 	int ret;
419 
420 	if (!(chip->config2 & ADT7316_AD_SINGLE_CH_MODE))
421 		return -EPERM;
422 
423 	ret = kstrtou8(buf, 10, &data);
424 	if (ret)
425 		return -EINVAL;
426 
427 	if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX) {
428 		if (data > 5)
429 			return -EINVAL;
430 
431 		config2 = chip->config2 & (~ADT7516_AD_SINGLE_CH_MASK);
432 	} else {
433 		if (data > 2)
434 			return -EINVAL;
435 
436 		config2 = chip->config2 & (~ADT7316_AD_SINGLE_CH_MASK);
437 	}
438 
439 	config2 |= data;
440 
441 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG2, config2);
442 	if (ret)
443 		return -EIO;
444 
445 	chip->config2 = config2;
446 
447 	return len;
448 }
449 
450 static IIO_DEVICE_ATTR(ad_channel, 0644,
451 		adt7316_show_ad_channel,
452 		adt7316_store_ad_channel,
453 		0);
454 
455 static ssize_t adt7316_show_all_ad_channels(struct device *dev,
456 					    struct device_attribute *attr,
457 					    char *buf)
458 {
459 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
460 	struct adt7316_chip_info *chip = iio_priv(dev_info);
461 
462 	if (!(chip->config2 & ADT7316_AD_SINGLE_CH_MODE))
463 		return -EPERM;
464 
465 	if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
466 		return sprintf(buf, "0 - VDD\n1 - Internal Temperature\n"
467 				"2 - External Temperature or AIN1\n"
468 				"3 - AIN2\n4 - AIN3\n5 - AIN4\n");
469 	return sprintf(buf, "0 - VDD\n1 - Internal Temperature\n"
470 			"2 - External Temperature\n");
471 }
472 
473 static IIO_DEVICE_ATTR(all_ad_channels, 0444,
474 		adt7316_show_all_ad_channels, NULL, 0);
475 
476 static ssize_t adt7316_show_disable_averaging(struct device *dev,
477 					      struct device_attribute *attr,
478 					      char *buf)
479 {
480 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
481 	struct adt7316_chip_info *chip = iio_priv(dev_info);
482 
483 	return sprintf(buf, "%d\n",
484 		!!(chip->config2 & ADT7316_DISABLE_AVERAGING));
485 }
486 
487 static ssize_t adt7316_store_disable_averaging(struct device *dev,
488 					       struct device_attribute *attr,
489 					       const char *buf,
490 					       size_t len)
491 {
492 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
493 	struct adt7316_chip_info *chip = iio_priv(dev_info);
494 	u8 config2;
495 	int ret;
496 
497 	config2 = chip->config2 & (~ADT7316_DISABLE_AVERAGING);
498 	if (buf[0] == '1')
499 		config2 |= ADT7316_DISABLE_AVERAGING;
500 
501 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG2, config2);
502 	if (ret)
503 		return -EIO;
504 
505 	chip->config2 = config2;
506 
507 	return len;
508 }
509 
510 static IIO_DEVICE_ATTR(disable_averaging, 0644,
511 		adt7316_show_disable_averaging,
512 		adt7316_store_disable_averaging,
513 		0);
514 
515 static ssize_t adt7316_show_enable_smbus_timeout(struct device *dev,
516 						 struct device_attribute *attr,
517 						 char *buf)
518 {
519 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
520 	struct adt7316_chip_info *chip = iio_priv(dev_info);
521 
522 	return sprintf(buf, "%d\n",
523 		!!(chip->config2 & ADT7316_EN_SMBUS_TIMEOUT));
524 }
525 
526 static ssize_t adt7316_store_enable_smbus_timeout(struct device *dev,
527 						  struct device_attribute *attr,
528 						  const char *buf,
529 						  size_t len)
530 {
531 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
532 	struct adt7316_chip_info *chip = iio_priv(dev_info);
533 	u8 config2;
534 	int ret;
535 
536 	config2 = chip->config2 & (~ADT7316_EN_SMBUS_TIMEOUT);
537 	if (buf[0] == '1')
538 		config2 |= ADT7316_EN_SMBUS_TIMEOUT;
539 
540 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG2, config2);
541 	if (ret)
542 		return -EIO;
543 
544 	chip->config2 = config2;
545 
546 	return len;
547 }
548 
549 static IIO_DEVICE_ATTR(enable_smbus_timeout, 0644,
550 		adt7316_show_enable_smbus_timeout,
551 		adt7316_store_enable_smbus_timeout,
552 		0);
553 
554 static ssize_t adt7316_show_powerdown(struct device *dev,
555 				      struct device_attribute *attr,
556 				      char *buf)
557 {
558 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
559 	struct adt7316_chip_info *chip = iio_priv(dev_info);
560 
561 	return sprintf(buf, "%d\n", !!(chip->config1 & ADT7316_PD));
562 }
563 
564 static ssize_t adt7316_store_powerdown(struct device *dev,
565 				       struct device_attribute *attr,
566 				       const char *buf,
567 				       size_t len)
568 {
569 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
570 	struct adt7316_chip_info *chip = iio_priv(dev_info);
571 	u8 config1;
572 	int ret;
573 
574 	config1 = chip->config1 & (~ADT7316_PD);
575 	if (buf[0] == '1')
576 		config1 |= ADT7316_PD;
577 
578 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, config1);
579 	if (ret)
580 		return -EIO;
581 
582 	chip->config1 = config1;
583 
584 	return len;
585 }
586 
587 static IIO_DEVICE_ATTR(powerdown, 0644,
588 		adt7316_show_powerdown,
589 		adt7316_store_powerdown,
590 		0);
591 
592 static ssize_t adt7316_show_fast_ad_clock(struct device *dev,
593 					  struct device_attribute *attr,
594 					  char *buf)
595 {
596 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
597 	struct adt7316_chip_info *chip = iio_priv(dev_info);
598 
599 	return sprintf(buf, "%d\n", !!(chip->config3 & ADT7316_ADCLK_22_5));
600 }
601 
602 static ssize_t adt7316_store_fast_ad_clock(struct device *dev,
603 					   struct device_attribute *attr,
604 					   const char *buf,
605 					   size_t len)
606 {
607 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
608 	struct adt7316_chip_info *chip = iio_priv(dev_info);
609 	u8 config3;
610 	int ret;
611 
612 	config3 = chip->config3 & (~ADT7316_ADCLK_22_5);
613 	if (buf[0] == '1')
614 		config3 |= ADT7316_ADCLK_22_5;
615 
616 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
617 	if (ret)
618 		return -EIO;
619 
620 	chip->config3 = config3;
621 
622 	return len;
623 }
624 
625 static IIO_DEVICE_ATTR(fast_ad_clock, 0644,
626 		adt7316_show_fast_ad_clock,
627 		adt7316_store_fast_ad_clock,
628 		0);
629 
630 static ssize_t adt7316_show_da_high_resolution(struct device *dev,
631 					       struct device_attribute *attr,
632 					       char *buf)
633 {
634 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
635 	struct adt7316_chip_info *chip = iio_priv(dev_info);
636 
637 	if (chip->config3 & ADT7316_DA_HIGH_RESOLUTION) {
638 		if (chip->id != ID_ADT7318 && chip->id != ID_ADT7519)
639 			return sprintf(buf, "1 (10 bits)\n");
640 	}
641 
642 	return sprintf(buf, "0 (8 bits)\n");
643 }
644 
645 static ssize_t adt7316_store_da_high_resolution(struct device *dev,
646 						struct device_attribute *attr,
647 						const char *buf,
648 						size_t len)
649 {
650 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
651 	struct adt7316_chip_info *chip = iio_priv(dev_info);
652 	u8 config3;
653 	int ret;
654 
655 	if (chip->id == ID_ADT7318 || chip->id == ID_ADT7519)
656 		return -EPERM;
657 
658 	config3 = chip->config3 & (~ADT7316_DA_HIGH_RESOLUTION);
659 	if (buf[0] == '1')
660 		config3 |= ADT7316_DA_HIGH_RESOLUTION;
661 
662 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
663 	if (ret)
664 		return -EIO;
665 
666 	chip->config3 = config3;
667 
668 	return len;
669 }
670 
671 static IIO_DEVICE_ATTR(da_high_resolution, 0644,
672 		adt7316_show_da_high_resolution,
673 		adt7316_store_da_high_resolution,
674 		0);
675 
676 static ssize_t adt7316_show_AIN_internal_Vref(struct device *dev,
677 					      struct device_attribute *attr,
678 					      char *buf)
679 {
680 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
681 	struct adt7316_chip_info *chip = iio_priv(dev_info);
682 
683 	if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
684 		return -EPERM;
685 
686 	return sprintf(buf, "%d\n",
687 		!!(chip->config3 & ADT7516_AIN_IN_VREF));
688 }
689 
690 static ssize_t adt7316_store_AIN_internal_Vref(struct device *dev,
691 					       struct device_attribute *attr,
692 					       const char *buf,
693 					       size_t len)
694 {
695 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
696 	struct adt7316_chip_info *chip = iio_priv(dev_info);
697 	u8 config3;
698 	int ret;
699 
700 	if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
701 		return -EPERM;
702 
703 	if (buf[0] != '1')
704 		config3 = chip->config3 & (~ADT7516_AIN_IN_VREF);
705 	else
706 		config3 = chip->config3 | ADT7516_AIN_IN_VREF;
707 
708 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
709 	if (ret)
710 		return -EIO;
711 
712 	chip->config3 = config3;
713 
714 	return len;
715 }
716 
717 static IIO_DEVICE_ATTR(AIN_internal_Vref, 0644,
718 		adt7316_show_AIN_internal_Vref,
719 		adt7316_store_AIN_internal_Vref,
720 		0);
721 
722 static ssize_t adt7316_show_enable_prop_DACA(struct device *dev,
723 					     struct device_attribute *attr,
724 					     char *buf)
725 {
726 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
727 	struct adt7316_chip_info *chip = iio_priv(dev_info);
728 
729 	return sprintf(buf, "%d\n",
730 		!!(chip->config3 & ADT7316_EN_IN_TEMP_PROP_DACA));
731 }
732 
733 static ssize_t adt7316_store_enable_prop_DACA(struct device *dev,
734 					      struct device_attribute *attr,
735 					      const char *buf,
736 					      size_t len)
737 {
738 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
739 	struct adt7316_chip_info *chip = iio_priv(dev_info);
740 	u8 config3;
741 	int ret;
742 
743 	config3 = chip->config3 & (~ADT7316_EN_IN_TEMP_PROP_DACA);
744 	if (buf[0] == '1')
745 		config3 |= ADT7316_EN_IN_TEMP_PROP_DACA;
746 
747 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
748 	if (ret)
749 		return -EIO;
750 
751 	chip->config3 = config3;
752 
753 	return len;
754 }
755 
756 static IIO_DEVICE_ATTR(enable_proportion_DACA, 0644,
757 		       adt7316_show_enable_prop_DACA,
758 		       adt7316_store_enable_prop_DACA,
759 		       0);
760 
761 static ssize_t adt7316_show_enable_prop_DACB(struct device *dev,
762 					     struct device_attribute *attr,
763 					     char *buf)
764 {
765 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
766 	struct adt7316_chip_info *chip = iio_priv(dev_info);
767 
768 	return sprintf(buf, "%d\n",
769 		!!(chip->config3 & ADT7316_EN_EX_TEMP_PROP_DACB));
770 }
771 
772 static ssize_t adt7316_store_enable_prop_DACB(struct device *dev,
773 					      struct device_attribute *attr,
774 					      const char *buf,
775 					      size_t len)
776 {
777 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
778 	struct adt7316_chip_info *chip = iio_priv(dev_info);
779 	u8 config3;
780 	int ret;
781 
782 	config3 = chip->config3 & (~ADT7316_EN_EX_TEMP_PROP_DACB);
783 	if (buf[0] == '1')
784 		config3 |= ADT7316_EN_EX_TEMP_PROP_DACB;
785 
786 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
787 	if (ret)
788 		return -EIO;
789 
790 	chip->config3 = config3;
791 
792 	return len;
793 }
794 
795 static IIO_DEVICE_ATTR(enable_proportion_DACB, 0644,
796 		       adt7316_show_enable_prop_DACB,
797 		       adt7316_store_enable_prop_DACB,
798 		       0);
799 
800 static ssize_t adt7316_show_DAC_2Vref_ch_mask(struct device *dev,
801 					      struct device_attribute *attr,
802 					      char *buf)
803 {
804 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
805 	struct adt7316_chip_info *chip = iio_priv(dev_info);
806 
807 	return sprintf(buf, "0x%x\n",
808 		chip->dac_config & ADT7316_DA_2VREF_CH_MASK);
809 }
810 
811 static ssize_t adt7316_store_DAC_2Vref_ch_mask(struct device *dev,
812 					       struct device_attribute *attr,
813 					       const char *buf,
814 					       size_t len)
815 {
816 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
817 	struct adt7316_chip_info *chip = iio_priv(dev_info);
818 	u8 dac_config;
819 	u8 data;
820 	int ret;
821 
822 	ret = kstrtou8(buf, 16, &data);
823 	if (ret || data > ADT7316_DA_2VREF_CH_MASK)
824 		return -EINVAL;
825 
826 	dac_config = chip->dac_config & (~ADT7316_DA_2VREF_CH_MASK);
827 	dac_config |= data;
828 
829 	ret = chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config);
830 	if (ret)
831 		return -EIO;
832 
833 	chip->dac_config = dac_config;
834 
835 	return len;
836 }
837 
838 static IIO_DEVICE_ATTR(DAC_2Vref_channels_mask, 0644,
839 		       adt7316_show_DAC_2Vref_ch_mask,
840 		       adt7316_store_DAC_2Vref_ch_mask,
841 		       0);
842 
843 static ssize_t adt7316_show_DAC_update_mode(struct device *dev,
844 					    struct device_attribute *attr,
845 					    char *buf)
846 {
847 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
848 	struct adt7316_chip_info *chip = iio_priv(dev_info);
849 
850 	if (!(chip->config3 & ADT7316_DA_EN_VIA_DAC_LDAC))
851 		return sprintf(buf, "manual\n");
852 
853 	switch (chip->dac_config & ADT7316_DA_EN_MODE_MASK) {
854 	case ADT7316_DA_EN_MODE_SINGLE:
855 		return sprintf(buf,
856 			"0 - auto at any MSB DAC writing\n");
857 	case ADT7316_DA_EN_MODE_AB_CD:
858 		return sprintf(buf,
859 			"1 - auto at MSB DAC AB and CD writing\n");
860 	case ADT7316_DA_EN_MODE_ABCD:
861 		return sprintf(buf,
862 			"2 - auto at MSB DAC ABCD writing\n");
863 	default: /* ADT7316_DA_EN_MODE_LDAC */
864 		return sprintf(buf, "3 - manual\n");
865 	}
866 }
867 
868 static ssize_t adt7316_store_DAC_update_mode(struct device *dev,
869 					     struct device_attribute *attr,
870 					     const char *buf,
871 					     size_t len)
872 {
873 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
874 	struct adt7316_chip_info *chip = iio_priv(dev_info);
875 	u8 dac_config;
876 	u8 data;
877 	int ret;
878 
879 	if (!(chip->config3 & ADT7316_DA_EN_VIA_DAC_LDAC))
880 		return -EPERM;
881 
882 	ret = kstrtou8(buf, 10, &data);
883 	if (ret || data > (ADT7316_DA_EN_MODE_MASK >> ADT7316_DA_EN_MODE_SHIFT))
884 		return -EINVAL;
885 
886 	dac_config = chip->dac_config & (~ADT7316_DA_EN_MODE_MASK);
887 	dac_config |= data << ADT7316_DA_EN_MODE_SHIFT;
888 
889 	ret = chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config);
890 	if (ret)
891 		return -EIO;
892 
893 	chip->dac_config = dac_config;
894 
895 	return len;
896 }
897 
898 static IIO_DEVICE_ATTR(DAC_update_mode, 0644,
899 		       adt7316_show_DAC_update_mode,
900 		       adt7316_store_DAC_update_mode,
901 		       0);
902 
903 static ssize_t adt7316_show_all_DAC_update_modes(struct device *dev,
904 						 struct device_attribute *attr,
905 						 char *buf)
906 {
907 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
908 	struct adt7316_chip_info *chip = iio_priv(dev_info);
909 
910 	if (chip->config3 & ADT7316_DA_EN_VIA_DAC_LDAC)
911 		return sprintf(buf, "0 - auto at any MSB DAC writing\n"
912 				"1 - auto at MSB DAC AB and CD writing\n"
913 				"2 - auto at MSB DAC ABCD writing\n"
914 				"3 - manual\n");
915 	return sprintf(buf, "manual\n");
916 }
917 
918 static IIO_DEVICE_ATTR(all_DAC_update_modes, 0444,
919 		       adt7316_show_all_DAC_update_modes, NULL, 0);
920 
921 static ssize_t adt7316_store_update_DAC(struct device *dev,
922 					struct device_attribute *attr,
923 					const char *buf,
924 					size_t len)
925 {
926 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
927 	struct adt7316_chip_info *chip = iio_priv(dev_info);
928 	u8 ldac_config;
929 	u8 data;
930 	int ret;
931 
932 	if (chip->config3 & ADT7316_DA_EN_VIA_DAC_LDAC) {
933 		if ((chip->dac_config & ADT7316_DA_EN_MODE_MASK) !=
934 			ADT7316_DA_EN_MODE_LDAC)
935 			return -EPERM;
936 
937 		ret = kstrtou8(buf, 16, &data);
938 		if (ret || data > ADT7316_LDAC_EN_DA_MASK)
939 			return -EINVAL;
940 
941 		ldac_config = chip->ldac_config & (~ADT7316_LDAC_EN_DA_MASK);
942 		ldac_config |= data;
943 
944 		ret = chip->bus.write(chip->bus.client, ADT7316_LDAC_CONFIG,
945 			ldac_config);
946 		if (ret)
947 			return -EIO;
948 	} else {
949 		gpiod_set_value(chip->ldac_pin, 0);
950 		gpiod_set_value(chip->ldac_pin, 1);
951 	}
952 
953 	return len;
954 }
955 
956 static IIO_DEVICE_ATTR(update_DAC, 0644,
957 		       NULL,
958 		       adt7316_store_update_DAC,
959 		       0);
960 
961 static ssize_t adt7316_show_DA_AB_Vref_bypass(struct device *dev,
962 					      struct device_attribute *attr,
963 					      char *buf)
964 {
965 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
966 	struct adt7316_chip_info *chip = iio_priv(dev_info);
967 
968 	return sprintf(buf, "%d\n",
969 		!!(chip->dac_config & ADT7316_VREF_BYPASS_DAC_AB));
970 }
971 
972 static ssize_t adt7316_store_DA_AB_Vref_bypass(struct device *dev,
973 					       struct device_attribute *attr,
974 					       const char *buf,
975 					       size_t len)
976 {
977 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
978 	struct adt7316_chip_info *chip = iio_priv(dev_info);
979 	u8 dac_config;
980 	int ret;
981 
982 	dac_config = chip->dac_config & (~ADT7316_VREF_BYPASS_DAC_AB);
983 	if (buf[0] == '1')
984 		dac_config |= ADT7316_VREF_BYPASS_DAC_AB;
985 
986 	ret = chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config);
987 	if (ret)
988 		return -EIO;
989 
990 	chip->dac_config = dac_config;
991 
992 	return len;
993 }
994 
995 static IIO_DEVICE_ATTR(DA_AB_Vref_bypass, 0644,
996 		       adt7316_show_DA_AB_Vref_bypass,
997 		       adt7316_store_DA_AB_Vref_bypass,
998 		       0);
999 
1000 static ssize_t adt7316_show_DA_CD_Vref_bypass(struct device *dev,
1001 					      struct device_attribute *attr,
1002 					      char *buf)
1003 {
1004 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1005 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1006 
1007 	return sprintf(buf, "%d\n",
1008 		!!(chip->dac_config & ADT7316_VREF_BYPASS_DAC_CD));
1009 }
1010 
1011 static ssize_t adt7316_store_DA_CD_Vref_bypass(struct device *dev,
1012 					       struct device_attribute *attr,
1013 					       const char *buf,
1014 					       size_t len)
1015 {
1016 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1017 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1018 	u8 dac_config;
1019 	int ret;
1020 
1021 	dac_config = chip->dac_config & (~ADT7316_VREF_BYPASS_DAC_CD);
1022 	if (buf[0] == '1')
1023 		dac_config |= ADT7316_VREF_BYPASS_DAC_CD;
1024 
1025 	ret = chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config);
1026 	if (ret)
1027 		return -EIO;
1028 
1029 	chip->dac_config = dac_config;
1030 
1031 	return len;
1032 }
1033 
1034 static IIO_DEVICE_ATTR(DA_CD_Vref_bypass, 0644,
1035 		       adt7316_show_DA_CD_Vref_bypass,
1036 		       adt7316_store_DA_CD_Vref_bypass,
1037 		       0);
1038 
1039 static ssize_t adt7316_show_DAC_internal_Vref(struct device *dev,
1040 					      struct device_attribute *attr,
1041 					      char *buf)
1042 {
1043 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1044 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1045 
1046 	if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
1047 		return sprintf(buf, "0x%x\n",
1048 			(chip->ldac_config & ADT7516_DAC_IN_VREF_MASK) >>
1049 			ADT7516_DAC_IN_VREF_OFFSET);
1050 	return sprintf(buf, "%d\n",
1051 		       !!(chip->ldac_config & ADT7316_DAC_IN_VREF));
1052 }
1053 
1054 static ssize_t adt7316_store_DAC_internal_Vref(struct device *dev,
1055 					       struct device_attribute *attr,
1056 					       const char *buf,
1057 					       size_t len)
1058 {
1059 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1060 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1061 	u8 ldac_config;
1062 	u8 data;
1063 	int ret;
1064 
1065 	if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX) {
1066 		ret = kstrtou8(buf, 16, &data);
1067 		if (ret || data > 3)
1068 			return -EINVAL;
1069 
1070 		ldac_config = chip->ldac_config & (~ADT7516_DAC_IN_VREF_MASK);
1071 		if (data & 0x1)
1072 			ldac_config |= ADT7516_DAC_AB_IN_VREF;
1073 		if (data & 0x2)
1074 			ldac_config |= ADT7516_DAC_CD_IN_VREF;
1075 	} else {
1076 		ret = kstrtou8(buf, 16, &data);
1077 		if (ret)
1078 			return -EINVAL;
1079 
1080 		ldac_config = chip->ldac_config & (~ADT7316_DAC_IN_VREF);
1081 		if (data)
1082 			ldac_config = chip->ldac_config | ADT7316_DAC_IN_VREF;
1083 	}
1084 
1085 	ret = chip->bus.write(chip->bus.client, ADT7316_LDAC_CONFIG,
1086 			ldac_config);
1087 	if (ret)
1088 		return -EIO;
1089 
1090 	chip->ldac_config = ldac_config;
1091 
1092 	return len;
1093 }
1094 
1095 static IIO_DEVICE_ATTR(DAC_internal_Vref, 0644,
1096 		       adt7316_show_DAC_internal_Vref,
1097 		       adt7316_store_DAC_internal_Vref,
1098 		       0);
1099 
1100 static ssize_t adt7316_show_ad(struct adt7316_chip_info *chip,
1101 			       int channel, char *buf)
1102 {
1103 	u16 data;
1104 	u8 msb, lsb;
1105 	char sign = ' ';
1106 	int ret;
1107 
1108 	if ((chip->config2 & ADT7316_AD_SINGLE_CH_MODE) &&
1109 	    channel != (chip->config2 & ADT7516_AD_SINGLE_CH_MASK))
1110 		return -EPERM;
1111 
1112 	switch (channel) {
1113 	case ADT7316_AD_SINGLE_CH_IN:
1114 		ret = chip->bus.read(chip->bus.client,
1115 			ADT7316_LSB_IN_TEMP_VDD, &lsb);
1116 		if (ret)
1117 			return -EIO;
1118 
1119 		ret = chip->bus.read(chip->bus.client,
1120 			ADT7316_AD_MSB_DATA_BASE + channel, &msb);
1121 		if (ret)
1122 			return -EIO;
1123 
1124 		data = msb << ADT7316_T_VALUE_FLOAT_OFFSET;
1125 		data |= lsb & ADT7316_LSB_IN_TEMP_MASK;
1126 		break;
1127 	case ADT7316_AD_SINGLE_CH_VDD:
1128 		ret = chip->bus.read(chip->bus.client,
1129 			ADT7316_LSB_IN_TEMP_VDD, &lsb);
1130 		if (ret)
1131 			return -EIO;
1132 
1133 		ret = chip->bus.read(chip->bus.client,
1134 
1135 			ADT7316_AD_MSB_DATA_BASE + channel, &msb);
1136 		if (ret)
1137 			return -EIO;
1138 
1139 		data = msb << ADT7316_T_VALUE_FLOAT_OFFSET;
1140 		data |= (lsb & ADT7316_LSB_VDD_MASK) >> ADT7316_LSB_VDD_OFFSET;
1141 		return sprintf(buf, "%d\n", data);
1142 	default: /* ex_temp and ain */
1143 		ret = chip->bus.read(chip->bus.client,
1144 			ADT7316_LSB_EX_TEMP_AIN, &lsb);
1145 		if (ret)
1146 			return -EIO;
1147 
1148 		ret = chip->bus.read(chip->bus.client,
1149 			ADT7316_AD_MSB_DATA_BASE + channel, &msb);
1150 		if (ret)
1151 			return -EIO;
1152 
1153 		data = msb << ADT7316_T_VALUE_FLOAT_OFFSET;
1154 		data |= lsb & (ADT7316_LSB_EX_TEMP_MASK <<
1155 			(ADT7516_LSB_AIN_SHIFT * (channel -
1156 			(ADT7316_MSB_EX_TEMP - ADT7316_AD_MSB_DATA_BASE))));
1157 
1158 		if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
1159 			return sprintf(buf, "%d\n", data);
1160 
1161 		break;
1162 	}
1163 
1164 	if (data & ADT7316_T_VALUE_SIGN) {
1165 		/* convert supplement to positive value */
1166 		data = (ADT7316_T_VALUE_SIGN << 1) - data;
1167 		sign = '-';
1168 	}
1169 
1170 	return sprintf(buf, "%c%d.%.2d\n", sign,
1171 		(data >> ADT7316_T_VALUE_FLOAT_OFFSET),
1172 		(data & ADT7316_T_VALUE_FLOAT_MASK) * 25);
1173 }
1174 
1175 static ssize_t adt7316_show_VDD(struct device *dev,
1176 				struct device_attribute *attr,
1177 				char *buf)
1178 {
1179 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1180 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1181 
1182 	return adt7316_show_ad(chip, ADT7316_AD_SINGLE_CH_VDD, buf);
1183 }
1184 static IIO_DEVICE_ATTR(VDD, 0444, adt7316_show_VDD, NULL, 0);
1185 
1186 static ssize_t adt7316_show_in_temp(struct device *dev,
1187 				    struct device_attribute *attr,
1188 				    char *buf)
1189 {
1190 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1191 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1192 
1193 	return adt7316_show_ad(chip, ADT7316_AD_SINGLE_CH_IN, buf);
1194 }
1195 
1196 static IIO_DEVICE_ATTR(in_temp, 0444, adt7316_show_in_temp, NULL, 0);
1197 
1198 static ssize_t adt7316_show_ex_temp_AIN1(struct device *dev,
1199 					 struct device_attribute *attr,
1200 					 char *buf)
1201 {
1202 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1203 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1204 
1205 	return adt7316_show_ad(chip, ADT7316_AD_SINGLE_CH_EX, buf);
1206 }
1207 
1208 static IIO_DEVICE_ATTR(ex_temp_AIN1, 0444, adt7316_show_ex_temp_AIN1,
1209 		       NULL, 0);
1210 static IIO_DEVICE_ATTR(ex_temp, 0444, adt7316_show_ex_temp_AIN1, NULL, 0);
1211 
1212 static ssize_t adt7316_show_AIN2(struct device *dev,
1213 				 struct device_attribute *attr,
1214 				 char *buf)
1215 {
1216 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1217 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1218 
1219 	return adt7316_show_ad(chip, ADT7516_AD_SINGLE_CH_AIN2, buf);
1220 }
1221 static IIO_DEVICE_ATTR(AIN2, 0444, adt7316_show_AIN2, NULL, 0);
1222 
1223 static ssize_t adt7316_show_AIN3(struct device *dev,
1224 				 struct device_attribute *attr,
1225 				 char *buf)
1226 {
1227 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1228 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1229 
1230 	return adt7316_show_ad(chip, ADT7516_AD_SINGLE_CH_AIN3, buf);
1231 }
1232 static IIO_DEVICE_ATTR(AIN3, 0444, adt7316_show_AIN3, NULL, 0);
1233 
1234 static ssize_t adt7316_show_AIN4(struct device *dev,
1235 				 struct device_attribute *attr,
1236 				 char *buf)
1237 {
1238 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1239 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1240 
1241 	return adt7316_show_ad(chip, ADT7516_AD_SINGLE_CH_AIN4, buf);
1242 }
1243 static IIO_DEVICE_ATTR(AIN4, 0444, adt7316_show_AIN4, NULL, 0);
1244 
1245 static ssize_t adt7316_show_temp_offset(struct adt7316_chip_info *chip,
1246 					int offset_addr, char *buf)
1247 {
1248 	int data;
1249 	u8 val;
1250 	int ret;
1251 
1252 	ret = chip->bus.read(chip->bus.client, offset_addr, &val);
1253 	if (ret)
1254 		return -EIO;
1255 
1256 	data = (int)val;
1257 	if (val & 0x80)
1258 		data -= 256;
1259 
1260 	return sprintf(buf, "%d\n", data);
1261 }
1262 
1263 static ssize_t adt7316_store_temp_offset(struct adt7316_chip_info *chip,
1264 					 int offset_addr,
1265 					 const char *buf,
1266 					 size_t len)
1267 {
1268 	int data;
1269 	u8 val;
1270 	int ret;
1271 
1272 	ret = kstrtoint(buf, 10, &data);
1273 	if (ret || data > 127 || data < -128)
1274 		return -EINVAL;
1275 
1276 	if (data < 0)
1277 		data += 256;
1278 
1279 	val = (u8)data;
1280 
1281 	ret = chip->bus.write(chip->bus.client, offset_addr, val);
1282 	if (ret)
1283 		return -EIO;
1284 
1285 	return len;
1286 }
1287 
1288 static ssize_t adt7316_show_in_temp_offset(struct device *dev,
1289 					   struct device_attribute *attr,
1290 					   char *buf)
1291 {
1292 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1293 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1294 
1295 	return adt7316_show_temp_offset(chip, ADT7316_IN_TEMP_OFFSET, buf);
1296 }
1297 
1298 static ssize_t adt7316_store_in_temp_offset(struct device *dev,
1299 					    struct device_attribute *attr,
1300 					    const char *buf,
1301 					    size_t len)
1302 {
1303 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1304 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1305 
1306 	return adt7316_store_temp_offset(chip, ADT7316_IN_TEMP_OFFSET, buf,
1307 			len);
1308 }
1309 
1310 static IIO_DEVICE_ATTR(in_temp_offset, 0644,
1311 		       adt7316_show_in_temp_offset,
1312 		       adt7316_store_in_temp_offset, 0);
1313 
1314 static ssize_t adt7316_show_ex_temp_offset(struct device *dev,
1315 					   struct device_attribute *attr,
1316 					   char *buf)
1317 {
1318 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1319 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1320 
1321 	return adt7316_show_temp_offset(chip, ADT7316_EX_TEMP_OFFSET, buf);
1322 }
1323 
1324 static ssize_t adt7316_store_ex_temp_offset(struct device *dev,
1325 					    struct device_attribute *attr,
1326 					    const char *buf,
1327 					    size_t len)
1328 {
1329 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1330 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1331 
1332 	return adt7316_store_temp_offset(chip, ADT7316_EX_TEMP_OFFSET, buf,
1333 			len);
1334 }
1335 
1336 static IIO_DEVICE_ATTR(ex_temp_offset, 0644,
1337 		       adt7316_show_ex_temp_offset,
1338 		       adt7316_store_ex_temp_offset, 0);
1339 
1340 static ssize_t adt7316_show_in_analog_temp_offset(struct device *dev,
1341 						  struct device_attribute *attr,
1342 						  char *buf)
1343 {
1344 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1345 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1346 
1347 	return adt7316_show_temp_offset(chip,
1348 			ADT7316_IN_ANALOG_TEMP_OFFSET, buf);
1349 }
1350 
1351 static ssize_t adt7316_store_in_analog_temp_offset(struct device *dev,
1352 						struct device_attribute *attr,
1353 						const char *buf,
1354 						size_t len)
1355 {
1356 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1357 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1358 
1359 	return adt7316_store_temp_offset(chip,
1360 			ADT7316_IN_ANALOG_TEMP_OFFSET, buf, len);
1361 }
1362 
1363 static IIO_DEVICE_ATTR(in_analog_temp_offset, 0644,
1364 		       adt7316_show_in_analog_temp_offset,
1365 		       adt7316_store_in_analog_temp_offset, 0);
1366 
1367 static ssize_t adt7316_show_ex_analog_temp_offset(struct device *dev,
1368 						  struct device_attribute *attr,
1369 						  char *buf)
1370 {
1371 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1372 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1373 
1374 	return adt7316_show_temp_offset(chip,
1375 			ADT7316_EX_ANALOG_TEMP_OFFSET, buf);
1376 }
1377 
1378 static ssize_t adt7316_store_ex_analog_temp_offset(struct device *dev,
1379 						struct device_attribute *attr,
1380 						const char *buf,
1381 						size_t len)
1382 {
1383 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1384 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1385 
1386 	return adt7316_store_temp_offset(chip,
1387 			ADT7316_EX_ANALOG_TEMP_OFFSET, buf, len);
1388 }
1389 
1390 static IIO_DEVICE_ATTR(ex_analog_temp_offset, 0644,
1391 		       adt7316_show_ex_analog_temp_offset,
1392 		       adt7316_store_ex_analog_temp_offset, 0);
1393 
1394 static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
1395 				int channel, char *buf)
1396 {
1397 	u16 data = 0;
1398 	u8 msb, lsb, offset;
1399 	int ret;
1400 
1401 	if (channel >= ADT7316_DA_MSB_DATA_REGS ||
1402 	    (channel == 0 &&
1403 	    (chip->config3 & ADT7316_EN_IN_TEMP_PROP_DACA)) ||
1404 	    (channel == 1 &&
1405 	    (chip->config3 & ADT7316_EN_EX_TEMP_PROP_DACB)))
1406 		return -EPERM;
1407 
1408 	offset = chip->dac_bits - 8;
1409 
1410 	if (chip->dac_bits > 8) {
1411 		ret = chip->bus.read(chip->bus.client,
1412 			ADT7316_DA_DATA_BASE + channel * 2, &lsb);
1413 		if (ret)
1414 			return -EIO;
1415 	}
1416 
1417 	ret = chip->bus.read(chip->bus.client,
1418 		ADT7316_DA_DATA_BASE + 1 + channel * 2, &msb);
1419 	if (ret)
1420 		return -EIO;
1421 
1422 	if (chip->dac_bits == 12)
1423 		data = lsb >> ADT7316_DA_12_BIT_LSB_SHIFT;
1424 	else if (chip->dac_bits == 10)
1425 		data = lsb >> ADT7316_DA_10_BIT_LSB_SHIFT;
1426 	data |= msb << offset;
1427 
1428 	return sprintf(buf, "%d\n", data);
1429 }
1430 
1431 static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip,
1432 				 int channel, const char *buf, size_t len)
1433 {
1434 	u8 msb, lsb, lsb_reg, offset;
1435 	u16 data;
1436 	int ret;
1437 
1438 	if (channel >= ADT7316_DA_MSB_DATA_REGS ||
1439 	    (channel == 0 &&
1440 	    (chip->config3 & ADT7316_EN_IN_TEMP_PROP_DACA)) ||
1441 	    (channel == 1 &&
1442 	    (chip->config3 & ADT7316_EN_EX_TEMP_PROP_DACB)))
1443 		return -EPERM;
1444 
1445 	offset = chip->dac_bits - 8;
1446 
1447 	ret = kstrtou16(buf, 10, &data);
1448 	if (ret || data >= (1 << chip->dac_bits))
1449 		return -EINVAL;
1450 
1451 	if (chip->dac_bits > 8) {
1452 		lsb = data & ((1 << offset) - 1);
1453 		if (chip->dac_bits == 12)
1454 			lsb_reg = lsb << ADT7316_DA_12_BIT_LSB_SHIFT;
1455 		else
1456 			lsb_reg = lsb << ADT7316_DA_10_BIT_LSB_SHIFT;
1457 		ret = chip->bus.write(chip->bus.client,
1458 			ADT7316_DA_DATA_BASE + channel * 2, lsb_reg);
1459 		if (ret)
1460 			return -EIO;
1461 	}
1462 
1463 	msb = data >> offset;
1464 	ret = chip->bus.write(chip->bus.client,
1465 		ADT7316_DA_DATA_BASE + 1 + channel * 2, msb);
1466 	if (ret)
1467 		return -EIO;
1468 
1469 	return len;
1470 }
1471 
1472 static ssize_t adt7316_show_DAC_A(struct device *dev,
1473 				  struct device_attribute *attr,
1474 				  char *buf)
1475 {
1476 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1477 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1478 
1479 	return adt7316_show_DAC(chip, 0, buf);
1480 }
1481 
1482 static ssize_t adt7316_store_DAC_A(struct device *dev,
1483 				   struct device_attribute *attr,
1484 				   const char *buf,
1485 				   size_t len)
1486 {
1487 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1488 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1489 
1490 	return adt7316_store_DAC(chip, 0, buf, len);
1491 }
1492 
1493 static IIO_DEVICE_ATTR(DAC_A, 0644, adt7316_show_DAC_A,
1494 		       adt7316_store_DAC_A, 0);
1495 
1496 static ssize_t adt7316_show_DAC_B(struct device *dev,
1497 				  struct device_attribute *attr,
1498 				  char *buf)
1499 {
1500 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1501 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1502 
1503 	return adt7316_show_DAC(chip, 1, buf);
1504 }
1505 
1506 static ssize_t adt7316_store_DAC_B(struct device *dev,
1507 				   struct device_attribute *attr,
1508 				   const char *buf,
1509 				   size_t len)
1510 {
1511 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1512 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1513 
1514 	return adt7316_store_DAC(chip, 1, buf, len);
1515 }
1516 
1517 static IIO_DEVICE_ATTR(DAC_B, 0644, adt7316_show_DAC_B,
1518 		       adt7316_store_DAC_B, 0);
1519 
1520 static ssize_t adt7316_show_DAC_C(struct device *dev,
1521 				  struct device_attribute *attr,
1522 				  char *buf)
1523 {
1524 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1525 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1526 
1527 	return adt7316_show_DAC(chip, 2, buf);
1528 }
1529 
1530 static ssize_t adt7316_store_DAC_C(struct device *dev,
1531 				   struct device_attribute *attr,
1532 				   const char *buf,
1533 				   size_t len)
1534 {
1535 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1536 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1537 
1538 	return adt7316_store_DAC(chip, 2, buf, len);
1539 }
1540 
1541 static IIO_DEVICE_ATTR(DAC_C, 0644, adt7316_show_DAC_C,
1542 		       adt7316_store_DAC_C, 0);
1543 
1544 static ssize_t adt7316_show_DAC_D(struct device *dev,
1545 				  struct device_attribute *attr,
1546 				  char *buf)
1547 {
1548 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1549 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1550 
1551 	return adt7316_show_DAC(chip, 3, buf);
1552 }
1553 
1554 static ssize_t adt7316_store_DAC_D(struct device *dev,
1555 				   struct device_attribute *attr,
1556 				   const char *buf,
1557 				   size_t len)
1558 {
1559 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1560 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1561 
1562 	return adt7316_store_DAC(chip, 3, buf, len);
1563 }
1564 
1565 static IIO_DEVICE_ATTR(DAC_D, 0644, adt7316_show_DAC_D,
1566 		       adt7316_store_DAC_D, 0);
1567 
1568 static ssize_t adt7316_show_device_id(struct device *dev,
1569 				      struct device_attribute *attr,
1570 				      char *buf)
1571 {
1572 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1573 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1574 	u8 id;
1575 	int ret;
1576 
1577 	ret = chip->bus.read(chip->bus.client, ADT7316_DEVICE_ID, &id);
1578 	if (ret)
1579 		return -EIO;
1580 
1581 	return sprintf(buf, "%d\n", id);
1582 }
1583 
1584 static IIO_DEVICE_ATTR(device_id, 0444, adt7316_show_device_id, NULL, 0);
1585 
1586 static ssize_t adt7316_show_manufactorer_id(struct device *dev,
1587 					    struct device_attribute *attr,
1588 					    char *buf)
1589 {
1590 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1591 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1592 	u8 id;
1593 	int ret;
1594 
1595 	ret = chip->bus.read(chip->bus.client, ADT7316_MANUFACTURE_ID, &id);
1596 	if (ret)
1597 		return -EIO;
1598 
1599 	return sprintf(buf, "%d\n", id);
1600 }
1601 
1602 static IIO_DEVICE_ATTR(manufactorer_id, 0444,
1603 		       adt7316_show_manufactorer_id, NULL, 0);
1604 
1605 static ssize_t adt7316_show_device_rev(struct device *dev,
1606 				       struct device_attribute *attr,
1607 				       char *buf)
1608 {
1609 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1610 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1611 	u8 rev;
1612 	int ret;
1613 
1614 	ret = chip->bus.read(chip->bus.client, ADT7316_DEVICE_REV, &rev);
1615 	if (ret)
1616 		return -EIO;
1617 
1618 	return sprintf(buf, "%d\n", rev);
1619 }
1620 
1621 static IIO_DEVICE_ATTR(device_rev, 0444, adt7316_show_device_rev, NULL, 0);
1622 
1623 static ssize_t adt7316_show_bus_type(struct device *dev,
1624 				     struct device_attribute *attr,
1625 				     char *buf)
1626 {
1627 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1628 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1629 	u8 stat;
1630 	int ret;
1631 
1632 	ret = chip->bus.read(chip->bus.client, ADT7316_SPI_LOCK_STAT, &stat);
1633 	if (ret)
1634 		return -EIO;
1635 
1636 	if (stat)
1637 		return sprintf(buf, "spi\n");
1638 
1639 	return sprintf(buf, "i2c\n");
1640 }
1641 
1642 static IIO_DEVICE_ATTR(bus_type, 0444, adt7316_show_bus_type, NULL, 0);
1643 
1644 static struct attribute *adt7316_attributes[] = {
1645 	&iio_dev_attr_all_modes.dev_attr.attr,
1646 	&iio_dev_attr_mode.dev_attr.attr,
1647 	&iio_dev_attr_enabled.dev_attr.attr,
1648 	&iio_dev_attr_ad_channel.dev_attr.attr,
1649 	&iio_dev_attr_all_ad_channels.dev_attr.attr,
1650 	&iio_dev_attr_disable_averaging.dev_attr.attr,
1651 	&iio_dev_attr_enable_smbus_timeout.dev_attr.attr,
1652 	&iio_dev_attr_powerdown.dev_attr.attr,
1653 	&iio_dev_attr_fast_ad_clock.dev_attr.attr,
1654 	&iio_dev_attr_da_high_resolution.dev_attr.attr,
1655 	&iio_dev_attr_enable_proportion_DACA.dev_attr.attr,
1656 	&iio_dev_attr_enable_proportion_DACB.dev_attr.attr,
1657 	&iio_dev_attr_DAC_2Vref_channels_mask.dev_attr.attr,
1658 	&iio_dev_attr_DAC_update_mode.dev_attr.attr,
1659 	&iio_dev_attr_all_DAC_update_modes.dev_attr.attr,
1660 	&iio_dev_attr_update_DAC.dev_attr.attr,
1661 	&iio_dev_attr_DA_AB_Vref_bypass.dev_attr.attr,
1662 	&iio_dev_attr_DA_CD_Vref_bypass.dev_attr.attr,
1663 	&iio_dev_attr_DAC_internal_Vref.dev_attr.attr,
1664 	&iio_dev_attr_VDD.dev_attr.attr,
1665 	&iio_dev_attr_in_temp.dev_attr.attr,
1666 	&iio_dev_attr_ex_temp.dev_attr.attr,
1667 	&iio_dev_attr_in_temp_offset.dev_attr.attr,
1668 	&iio_dev_attr_ex_temp_offset.dev_attr.attr,
1669 	&iio_dev_attr_in_analog_temp_offset.dev_attr.attr,
1670 	&iio_dev_attr_ex_analog_temp_offset.dev_attr.attr,
1671 	&iio_dev_attr_DAC_A.dev_attr.attr,
1672 	&iio_dev_attr_DAC_B.dev_attr.attr,
1673 	&iio_dev_attr_DAC_C.dev_attr.attr,
1674 	&iio_dev_attr_DAC_D.dev_attr.attr,
1675 	&iio_dev_attr_device_id.dev_attr.attr,
1676 	&iio_dev_attr_manufactorer_id.dev_attr.attr,
1677 	&iio_dev_attr_device_rev.dev_attr.attr,
1678 	&iio_dev_attr_bus_type.dev_attr.attr,
1679 	NULL,
1680 };
1681 
1682 static const struct attribute_group adt7316_attribute_group = {
1683 	.attrs = adt7316_attributes,
1684 };
1685 
1686 static struct attribute *adt7516_attributes[] = {
1687 	&iio_dev_attr_all_modes.dev_attr.attr,
1688 	&iio_dev_attr_mode.dev_attr.attr,
1689 	&iio_dev_attr_select_ex_temp.dev_attr.attr,
1690 	&iio_dev_attr_enabled.dev_attr.attr,
1691 	&iio_dev_attr_ad_channel.dev_attr.attr,
1692 	&iio_dev_attr_all_ad_channels.dev_attr.attr,
1693 	&iio_dev_attr_disable_averaging.dev_attr.attr,
1694 	&iio_dev_attr_enable_smbus_timeout.dev_attr.attr,
1695 	&iio_dev_attr_powerdown.dev_attr.attr,
1696 	&iio_dev_attr_fast_ad_clock.dev_attr.attr,
1697 	&iio_dev_attr_AIN_internal_Vref.dev_attr.attr,
1698 	&iio_dev_attr_da_high_resolution.dev_attr.attr,
1699 	&iio_dev_attr_enable_proportion_DACA.dev_attr.attr,
1700 	&iio_dev_attr_enable_proportion_DACB.dev_attr.attr,
1701 	&iio_dev_attr_DAC_2Vref_channels_mask.dev_attr.attr,
1702 	&iio_dev_attr_DAC_update_mode.dev_attr.attr,
1703 	&iio_dev_attr_all_DAC_update_modes.dev_attr.attr,
1704 	&iio_dev_attr_update_DAC.dev_attr.attr,
1705 	&iio_dev_attr_DAC_internal_Vref.dev_attr.attr,
1706 	&iio_dev_attr_VDD.dev_attr.attr,
1707 	&iio_dev_attr_in_temp.dev_attr.attr,
1708 	&iio_dev_attr_ex_temp_AIN1.dev_attr.attr,
1709 	&iio_dev_attr_AIN2.dev_attr.attr,
1710 	&iio_dev_attr_AIN3.dev_attr.attr,
1711 	&iio_dev_attr_AIN4.dev_attr.attr,
1712 	&iio_dev_attr_in_temp_offset.dev_attr.attr,
1713 	&iio_dev_attr_ex_temp_offset.dev_attr.attr,
1714 	&iio_dev_attr_in_analog_temp_offset.dev_attr.attr,
1715 	&iio_dev_attr_ex_analog_temp_offset.dev_attr.attr,
1716 	&iio_dev_attr_DAC_A.dev_attr.attr,
1717 	&iio_dev_attr_DAC_B.dev_attr.attr,
1718 	&iio_dev_attr_DAC_C.dev_attr.attr,
1719 	&iio_dev_attr_DAC_D.dev_attr.attr,
1720 	&iio_dev_attr_device_id.dev_attr.attr,
1721 	&iio_dev_attr_manufactorer_id.dev_attr.attr,
1722 	&iio_dev_attr_device_rev.dev_attr.attr,
1723 	&iio_dev_attr_bus_type.dev_attr.attr,
1724 	NULL,
1725 };
1726 
1727 static const struct attribute_group adt7516_attribute_group = {
1728 	.attrs = adt7516_attributes,
1729 };
1730 
1731 static irqreturn_t adt7316_event_handler(int irq, void *private)
1732 {
1733 	struct iio_dev *indio_dev = private;
1734 	struct adt7316_chip_info *chip = iio_priv(indio_dev);
1735 	u8 stat1, stat2;
1736 	int ret;
1737 	s64 time;
1738 
1739 	ret = chip->bus.read(chip->bus.client, ADT7316_INT_STAT1, &stat1);
1740 	if (!ret) {
1741 		if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
1742 			stat1 &= 0x1F;
1743 
1744 		time = iio_get_time_ns(indio_dev);
1745 		if (stat1 & BIT(0))
1746 			iio_push_event(indio_dev,
1747 				       IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
1748 							    IIO_EV_TYPE_THRESH,
1749 							    IIO_EV_DIR_RISING),
1750 				       time);
1751 		if (stat1 & BIT(1))
1752 			iio_push_event(indio_dev,
1753 				       IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
1754 							    IIO_EV_TYPE_THRESH,
1755 							    IIO_EV_DIR_FALLING),
1756 				       time);
1757 		if (stat1 & BIT(2))
1758 			iio_push_event(indio_dev,
1759 				       IIO_UNMOD_EVENT_CODE(IIO_TEMP, 1,
1760 							    IIO_EV_TYPE_THRESH,
1761 							    IIO_EV_DIR_RISING),
1762 				       time);
1763 		if (stat1 & BIT(3))
1764 			iio_push_event(indio_dev,
1765 				       IIO_UNMOD_EVENT_CODE(IIO_TEMP, 1,
1766 							    IIO_EV_TYPE_THRESH,
1767 							    IIO_EV_DIR_FALLING),
1768 				       time);
1769 		if (stat1 & BIT(5))
1770 			iio_push_event(indio_dev,
1771 				       IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
1772 							    IIO_EV_TYPE_THRESH,
1773 							    IIO_EV_DIR_EITHER),
1774 				       time);
1775 		if (stat1 & BIT(6))
1776 			iio_push_event(indio_dev,
1777 				       IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
1778 							    IIO_EV_TYPE_THRESH,
1779 							    IIO_EV_DIR_EITHER),
1780 				       time);
1781 		if (stat1 & BIT(7))
1782 			iio_push_event(indio_dev,
1783 				       IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
1784 							    IIO_EV_TYPE_THRESH,
1785 							    IIO_EV_DIR_EITHER),
1786 				       time);
1787 		}
1788 	ret = chip->bus.read(chip->bus.client, ADT7316_INT_STAT2, &stat2);
1789 	if (!ret) {
1790 		if (stat2 & ADT7316_INT_MASK2_VDD)
1791 			iio_push_event(indio_dev,
1792 				       IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE,
1793 							    0,
1794 							    IIO_EV_TYPE_THRESH,
1795 							    IIO_EV_DIR_RISING),
1796 				       iio_get_time_ns(indio_dev));
1797 	}
1798 
1799 	return IRQ_HANDLED;
1800 }
1801 
1802 static int adt7316_setup_irq(struct iio_dev *indio_dev)
1803 {
1804 	struct adt7316_chip_info *chip = iio_priv(indio_dev);
1805 	int irq_type, ret;
1806 
1807 	irq_type = irqd_get_trigger_type(irq_get_irq_data(chip->bus.irq));
1808 
1809 	switch (irq_type) {
1810 	case IRQF_TRIGGER_HIGH:
1811 	case IRQF_TRIGGER_RISING:
1812 		break;
1813 	case IRQF_TRIGGER_LOW:
1814 	case IRQF_TRIGGER_FALLING:
1815 		break;
1816 	default:
1817 		dev_info(&indio_dev->dev, "mode %d unsupported, using IRQF_TRIGGER_LOW\n",
1818 			 irq_type);
1819 		irq_type = IRQF_TRIGGER_LOW;
1820 		break;
1821 	}
1822 
1823 	ret = devm_request_threaded_irq(&indio_dev->dev, chip->bus.irq,
1824 					NULL, adt7316_event_handler,
1825 					irq_type | IRQF_ONESHOT,
1826 					indio_dev->name, indio_dev);
1827 	if (ret) {
1828 		dev_err(&indio_dev->dev, "failed to request irq %d\n",
1829 			chip->bus.irq);
1830 		return ret;
1831 	}
1832 
1833 	if (irq_type & IRQF_TRIGGER_HIGH)
1834 		chip->config1 |= ADT7316_INT_POLARITY;
1835 
1836 	return 0;
1837 }
1838 
1839 /*
1840  * Show mask of enabled interrupts in Hex.
1841  */
1842 static ssize_t adt7316_show_int_mask(struct device *dev,
1843 				     struct device_attribute *attr,
1844 				     char *buf)
1845 {
1846 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1847 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1848 
1849 	return sprintf(buf, "0x%x\n", chip->int_mask);
1850 }
1851 
1852 /*
1853  * Set 1 to the mask in Hex to enabled interrupts.
1854  */
1855 static ssize_t adt7316_set_int_mask(struct device *dev,
1856 				    struct device_attribute *attr,
1857 				    const char *buf,
1858 				    size_t len)
1859 {
1860 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1861 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1862 	u16 data;
1863 	int ret;
1864 	u8 mask;
1865 
1866 	ret = kstrtou16(buf, 16, &data);
1867 	if (ret || data >= ADT7316_VDD_INT_MASK + 1)
1868 		return -EINVAL;
1869 
1870 	if (data & ADT7316_VDD_INT_MASK)
1871 		mask = 0;			/* enable vdd int */
1872 	else
1873 		mask = ADT7316_INT_MASK2_VDD;	/* disable vdd int */
1874 
1875 	ret = chip->bus.write(chip->bus.client, ADT7316_INT_MASK2, mask);
1876 	if (!ret) {
1877 		chip->int_mask &= ~ADT7316_VDD_INT_MASK;
1878 		chip->int_mask |= data & ADT7316_VDD_INT_MASK;
1879 	}
1880 
1881 	if (data & ADT7316_TEMP_AIN_INT_MASK) {
1882 		if ((chip->id & ID_FAMILY_MASK) == ID_ADT73XX)
1883 			/* mask in reg is opposite, set 1 to disable */
1884 			mask = (~data) & ADT7316_TEMP_INT_MASK;
1885 		else
1886 			/* mask in reg is opposite, set 1 to disable */
1887 			mask = (~data) & ADT7316_TEMP_AIN_INT_MASK;
1888 	}
1889 	ret = chip->bus.write(chip->bus.client, ADT7316_INT_MASK1, mask);
1890 
1891 	chip->int_mask = mask;
1892 
1893 	return len;
1894 }
1895 
1896 static inline ssize_t adt7316_show_ad_bound(struct device *dev,
1897 					    struct device_attribute *attr,
1898 					    char *buf)
1899 {
1900 	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
1901 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1902 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1903 	u8 val;
1904 	int data;
1905 	int ret;
1906 
1907 	if ((chip->id & ID_FAMILY_MASK) == ID_ADT73XX &&
1908 	    this_attr->address > ADT7316_EX_TEMP_LOW)
1909 		return -EPERM;
1910 
1911 	ret = chip->bus.read(chip->bus.client, this_attr->address, &val);
1912 	if (ret)
1913 		return -EIO;
1914 
1915 	data = (int)val;
1916 
1917 	if (!((chip->id & ID_FAMILY_MASK) == ID_ADT75XX &&
1918 	      (chip->config1 & ADT7516_SEL_AIN1_2_EX_TEMP_MASK) == 0)) {
1919 		if (data & 0x80)
1920 			data -= 256;
1921 	}
1922 
1923 	return sprintf(buf, "%d\n", data);
1924 }
1925 
1926 static inline ssize_t adt7316_set_ad_bound(struct device *dev,
1927 					   struct device_attribute *attr,
1928 					   const char *buf,
1929 					   size_t len)
1930 {
1931 	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
1932 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1933 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1934 	int data;
1935 	u8 val;
1936 	int ret;
1937 
1938 	if ((chip->id & ID_FAMILY_MASK) == ID_ADT73XX &&
1939 	    this_attr->address > ADT7316_EX_TEMP_LOW)
1940 		return -EPERM;
1941 
1942 	ret = kstrtoint(buf, 10, &data);
1943 	if (ret)
1944 		return -EINVAL;
1945 
1946 	if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX &&
1947 	    (chip->config1 & ADT7516_SEL_AIN1_2_EX_TEMP_MASK) == 0) {
1948 		if (data > 255 || data < 0)
1949 			return -EINVAL;
1950 	} else {
1951 		if (data > 127 || data < -128)
1952 			return -EINVAL;
1953 
1954 		if (data < 0)
1955 			data += 256;
1956 	}
1957 
1958 	val = (u8)data;
1959 
1960 	ret = chip->bus.write(chip->bus.client, this_attr->address, val);
1961 	if (ret)
1962 		return -EIO;
1963 
1964 	return len;
1965 }
1966 
1967 static ssize_t adt7316_show_int_enabled(struct device *dev,
1968 					struct device_attribute *attr,
1969 					char *buf)
1970 {
1971 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1972 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1973 
1974 	return sprintf(buf, "%d\n", !!(chip->config1 & ADT7316_INT_EN));
1975 }
1976 
1977 static ssize_t adt7316_set_int_enabled(struct device *dev,
1978 				       struct device_attribute *attr,
1979 				       const char *buf,
1980 				       size_t len)
1981 {
1982 	struct iio_dev *dev_info = dev_to_iio_dev(dev);
1983 	struct adt7316_chip_info *chip = iio_priv(dev_info);
1984 	u8 config1;
1985 	int ret;
1986 
1987 	config1 = chip->config1 & (~ADT7316_INT_EN);
1988 	if (buf[0] == '1')
1989 		config1 |= ADT7316_INT_EN;
1990 
1991 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, config1);
1992 	if (ret)
1993 		return -EIO;
1994 
1995 	chip->config1 = config1;
1996 
1997 	return len;
1998 }
1999 
2000 static IIO_DEVICE_ATTR(int_mask,
2001 		       0644,
2002 		       adt7316_show_int_mask, adt7316_set_int_mask,
2003 		       0);
2004 static IIO_DEVICE_ATTR(in_temp_high_value,
2005 		       0644,
2006 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2007 		       ADT7316_IN_TEMP_HIGH);
2008 static IIO_DEVICE_ATTR(in_temp_low_value,
2009 		       0644,
2010 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2011 		       ADT7316_IN_TEMP_LOW);
2012 static IIO_DEVICE_ATTR(ex_temp_high_value,
2013 		       0644,
2014 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2015 		       ADT7316_EX_TEMP_HIGH);
2016 static IIO_DEVICE_ATTR(ex_temp_low_value,
2017 		       0644,
2018 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2019 		       ADT7316_EX_TEMP_LOW);
2020 
2021 /* NASTY duplication to be fixed */
2022 static IIO_DEVICE_ATTR(ex_temp_ain1_high_value,
2023 		       0644,
2024 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2025 		       ADT7316_EX_TEMP_HIGH);
2026 static IIO_DEVICE_ATTR(ex_temp_ain1_low_value,
2027 		       0644,
2028 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2029 		       ADT7316_EX_TEMP_LOW);
2030 static IIO_DEVICE_ATTR(ain2_high_value,
2031 		       0644,
2032 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2033 		       ADT7516_AIN2_HIGH);
2034 static IIO_DEVICE_ATTR(ain2_low_value,
2035 		       0644,
2036 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2037 		       ADT7516_AIN2_LOW);
2038 static IIO_DEVICE_ATTR(ain3_high_value,
2039 		       0644,
2040 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2041 		       ADT7516_AIN3_HIGH);
2042 static IIO_DEVICE_ATTR(ain3_low_value,
2043 		       0644,
2044 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2045 		       ADT7516_AIN3_LOW);
2046 static IIO_DEVICE_ATTR(ain4_high_value,
2047 		       0644,
2048 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2049 		       ADT7516_AIN4_HIGH);
2050 static IIO_DEVICE_ATTR(ain4_low_value,
2051 		       0644,
2052 		       adt7316_show_ad_bound, adt7316_set_ad_bound,
2053 		       ADT7516_AIN4_LOW);
2054 static IIO_DEVICE_ATTR(int_enabled,
2055 		       0644,
2056 		       adt7316_show_int_enabled,
2057 		       adt7316_set_int_enabled, 0);
2058 
2059 static struct attribute *adt7316_event_attributes[] = {
2060 	&iio_dev_attr_int_mask.dev_attr.attr,
2061 	&iio_dev_attr_in_temp_high_value.dev_attr.attr,
2062 	&iio_dev_attr_in_temp_low_value.dev_attr.attr,
2063 	&iio_dev_attr_ex_temp_high_value.dev_attr.attr,
2064 	&iio_dev_attr_ex_temp_low_value.dev_attr.attr,
2065 	&iio_dev_attr_int_enabled.dev_attr.attr,
2066 	NULL,
2067 };
2068 
2069 static const struct attribute_group adt7316_event_attribute_group = {
2070 	.attrs = adt7316_event_attributes,
2071 	.name = "events",
2072 };
2073 
2074 static struct attribute *adt7516_event_attributes[] = {
2075 	&iio_dev_attr_int_mask.dev_attr.attr,
2076 	&iio_dev_attr_in_temp_high_value.dev_attr.attr,
2077 	&iio_dev_attr_in_temp_low_value.dev_attr.attr,
2078 	&iio_dev_attr_ex_temp_ain1_high_value.dev_attr.attr,
2079 	&iio_dev_attr_ex_temp_ain1_low_value.dev_attr.attr,
2080 	&iio_dev_attr_ain2_high_value.dev_attr.attr,
2081 	&iio_dev_attr_ain2_low_value.dev_attr.attr,
2082 	&iio_dev_attr_ain3_high_value.dev_attr.attr,
2083 	&iio_dev_attr_ain3_low_value.dev_attr.attr,
2084 	&iio_dev_attr_ain4_high_value.dev_attr.attr,
2085 	&iio_dev_attr_ain4_low_value.dev_attr.attr,
2086 	&iio_dev_attr_int_enabled.dev_attr.attr,
2087 	NULL,
2088 };
2089 
2090 static const struct attribute_group adt7516_event_attribute_group = {
2091 	.attrs = adt7516_event_attributes,
2092 	.name = "events",
2093 };
2094 
2095 #ifdef CONFIG_PM_SLEEP
2096 static int adt7316_disable(struct device *dev)
2097 {
2098 	struct iio_dev *dev_info = dev_get_drvdata(dev);
2099 	struct adt7316_chip_info *chip = iio_priv(dev_info);
2100 
2101 	return _adt7316_store_enabled(chip, 0);
2102 }
2103 
2104 static int adt7316_enable(struct device *dev)
2105 {
2106 	struct iio_dev *dev_info = dev_get_drvdata(dev);
2107 	struct adt7316_chip_info *chip = iio_priv(dev_info);
2108 
2109 	return _adt7316_store_enabled(chip, 1);
2110 }
2111 EXPORT_SYMBOL_GPL(adt7316_pm_ops);
2112 SIMPLE_DEV_PM_OPS(adt7316_pm_ops, adt7316_disable, adt7316_enable);
2113 #endif
2114 
2115 static const struct iio_info adt7316_info = {
2116 	.attrs = &adt7316_attribute_group,
2117 	.event_attrs = &adt7316_event_attribute_group,
2118 };
2119 
2120 static const struct iio_info adt7516_info = {
2121 	.attrs = &adt7516_attribute_group,
2122 	.event_attrs = &adt7516_event_attribute_group,
2123 };
2124 
2125 /*
2126  * device probe and remove
2127  */
2128 int adt7316_probe(struct device *dev, struct adt7316_bus *bus,
2129 		  const char *name)
2130 {
2131 	struct adt7316_chip_info *chip;
2132 	struct iio_dev *indio_dev;
2133 	int ret;
2134 
2135 	indio_dev = devm_iio_device_alloc(dev, sizeof(*chip));
2136 	if (!indio_dev)
2137 		return -ENOMEM;
2138 	chip = iio_priv(indio_dev);
2139 	/* this is only used for device removal purposes */
2140 	dev_set_drvdata(dev, indio_dev);
2141 
2142 	chip->bus = *bus;
2143 
2144 	if (name[4] == '3')
2145 		chip->id = ID_ADT7316 + (name[6] - '6');
2146 	else if (name[4] == '5')
2147 		chip->id = ID_ADT7516 + (name[6] - '6');
2148 	else
2149 		return -ENODEV;
2150 
2151 	if (chip->id == ID_ADT7316 || chip->id == ID_ADT7516)
2152 		chip->dac_bits = 12;
2153 	else if (chip->id == ID_ADT7317 || chip->id == ID_ADT7517)
2154 		chip->dac_bits = 10;
2155 	else
2156 		chip->dac_bits = 8;
2157 
2158 	chip->ldac_pin = devm_gpiod_get_optional(dev, "adi,ldac",
2159 						GPIOD_OUT_LOW);
2160 	if (IS_ERR(chip->ldac_pin)) {
2161 		ret = PTR_ERR(chip->ldac_pin);
2162 		dev_err(dev, "Failed to request ldac GPIO: %d\n", ret);
2163 		return ret;
2164 	}
2165 
2166 	if (!chip->ldac_pin) {
2167 		chip->config3 |= ADT7316_DA_EN_VIA_DAC_LDAC;
2168 		if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
2169 			chip->config1 |= ADT7516_SEL_AIN3;
2170 	}
2171 	chip->int_mask = ADT7316_TEMP_INT_MASK | ADT7316_VDD_INT_MASK;
2172 	if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
2173 		chip->int_mask |= ADT7516_AIN_INT_MASK;
2174 
2175 	indio_dev->dev.parent = dev;
2176 	if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
2177 		indio_dev->info = &adt7516_info;
2178 	else
2179 		indio_dev->info = &adt7316_info;
2180 	indio_dev->name = name;
2181 	indio_dev->modes = INDIO_DIRECT_MODE;
2182 
2183 	if (chip->bus.irq > 0) {
2184 		ret = adt7316_setup_irq(indio_dev);
2185 		if (ret)
2186 			return ret;
2187 	}
2188 
2189 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, chip->config1);
2190 	if (ret)
2191 		return -EIO;
2192 
2193 	ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, chip->config3);
2194 	if (ret)
2195 		return -EIO;
2196 
2197 	ret = devm_iio_device_register(dev, indio_dev);
2198 	if (ret)
2199 		return ret;
2200 
2201 	dev_info(dev, "%s temperature sensor, ADC and DAC registered.\n",
2202 		 indio_dev->name);
2203 
2204 	return 0;
2205 }
2206 EXPORT_SYMBOL(adt7316_probe);
2207 
2208 MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
2209 MODULE_DESCRIPTION("Analog Devices ADT7316/7/8 and ADT7516/7/9 digital temperature sensor, ADC and DAC driver");
2210 MODULE_LICENSE("GPL v2");
2211