13 #include <linux/device.h>
14 #include <linux/kernel.h>
15 #include <linux/slab.h>
17 #include <linux/list.h>
18 #include <linux/i2c.h>
19 #include <linux/rtc.h>
20 #include <linux/module.h>
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_MSB_DATA_REGS 4
51 #define ADT7316_LSB_DAC_A 0x10
52 #define ADT7316_MSB_DAC_A 0x11
53 #define ADT7316_LSB_DAC_B 0x12
54 #define ADT7316_MSB_DAC_B 0x13
55 #define ADT7316_LSB_DAC_C 0x14
56 #define ADT7316_MSB_DAC_C 0x15
57 #define ADT7316_LSB_DAC_D 0x16
58 #define ADT7316_MSB_DAC_D 0x17
59 #define ADT7316_CONFIG1 0x18
60 #define ADT7316_CONFIG2 0x19
61 #define ADT7316_CONFIG3 0x1A
62 #define ADT7316_LDAC_CONFIG 0x1B
63 #define ADT7316_DAC_CONFIG 0x1C
64 #define ADT7316_INT_MASK1 0x1D
65 #define ADT7316_INT_MASK2 0x1E
66 #define ADT7316_IN_TEMP_OFFSET 0x1F
67 #define ADT7316_EX_TEMP_OFFSET 0x20
68 #define ADT7316_IN_ANALOG_TEMP_OFFSET 0x21
69 #define ADT7316_EX_ANALOG_TEMP_OFFSET 0x22
70 #define ADT7316_VDD_HIGH 0x23
71 #define ADT7316_VDD_LOW 0x24
72 #define ADT7316_IN_TEMP_HIGH 0x25
73 #define ADT7316_IN_TEMP_LOW 0x26
74 #define ADT7316_EX_TEMP_HIGH 0x27
75 #define ADT7316_EX_TEMP_LOW 0x28
76 #define ADT7516_AIN2_HIGH 0x2B
77 #define ADT7516_AIN2_LOW 0x2C
78 #define ADT7516_AIN3_HIGH 0x2D
79 #define ADT7516_AIN3_LOW 0x2E
80 #define ADT7516_AIN4_HIGH 0x2F
81 #define ADT7516_AIN4_LOW 0x30
82 #define ADT7316_DEVICE_ID 0x4D
83 #define ADT7316_MANUFACTURE_ID 0x4E
84 #define ADT7316_DEVICE_REV 0x4F
85 #define ADT7316_SPI_LOCK_STAT 0x7F
90 #define ADT7316_EN 0x1
91 #define ADT7516_SEL_EX_TEMP 0x4
92 #define ADT7516_SEL_AIN1_2_EX_TEMP_MASK 0x6
93 #define ADT7516_SEL_AIN3 0x8
94 #define ADT7316_INT_EN 0x20
95 #define ADT7316_INT_POLARITY 0x40
96 #define ADT7316_PD 0x80
101 #define ADT7316_AD_SINGLE_CH_MASK 0x3
102 #define ADT7516_AD_SINGLE_CH_MASK 0x7
103 #define ADT7316_AD_SINGLE_CH_VDD 0
104 #define ADT7316_AD_SINGLE_CH_IN 1
105 #define ADT7316_AD_SINGLE_CH_EX 2
106 #define ADT7516_AD_SINGLE_CH_AIN1 2
107 #define ADT7516_AD_SINGLE_CH_AIN2 3
108 #define ADT7516_AD_SINGLE_CH_AIN3 4
109 #define ADT7516_AD_SINGLE_CH_AIN4 5
110 #define ADT7316_AD_SINGLE_CH_MODE 0x10
111 #define ADT7316_DISABLE_AVERAGING 0x20
112 #define ADT7316_EN_SMBUS_TIMEOUT 0x40
113 #define ADT7316_RESET 0x80
118 #define ADT7316_ADCLK_22_5 0x1
119 #define ADT7316_DA_HIGH_RESOLUTION 0x2
120 #define ADT7316_DA_EN_VIA_DAC_LDCA 0x4
121 #define ADT7516_AIN_IN_VREF 0x10
122 #define ADT7316_EN_IN_TEMP_PROP_DACA 0x20
123 #define ADT7316_EN_EX_TEMP_PROP_DACB 0x40
128 #define ADT7316_DA_2VREF_CH_MASK 0xF
129 #define ADT7316_DA_EN_MODE_MASK 0x30
130 #define ADT7316_DA_EN_MODE_SINGLE 0x00
131 #define ADT7316_DA_EN_MODE_AB_CD 0x10
132 #define ADT7316_DA_EN_MODE_ABCD 0x20
133 #define ADT7316_DA_EN_MODE_LDAC 0x30
134 #define ADT7316_VREF_BYPASS_DAC_AB 0x40
135 #define ADT7316_VREF_BYPASS_DAC_CD 0x80
140 #define ADT7316_LDAC_EN_DA_MASK 0xF
141 #define ADT7316_DAC_IN_VREF 0x10
142 #define ADT7516_DAC_AB_IN_VREF 0x10
143 #define ADT7516_DAC_CD_IN_VREF 0x20
144 #define ADT7516_DAC_IN_VREF_OFFSET 4
145 #define ADT7516_DAC_IN_VREF_MASK 0x30
150 #define ADT7316_INT_MASK2_VDD 0x10
155 #define ADT7316_VALUE_MASK 0xfff
156 #define ADT7316_T_VALUE_SIGN 0x400
157 #define ADT7316_T_VALUE_FLOAT_OFFSET 2
158 #define ADT7316_T_VALUE_FLOAT_MASK 0x2
163 #define ID_ADT7316 0x1
164 #define ID_ADT7317 0x2
165 #define ID_ADT7318 0x3
166 #define ID_ADT7516 0x11
167 #define ID_ADT7517 0x12
168 #define ID_ADT7519 0x14
170 #define ID_FAMILY_MASK 0xF0
171 #define ID_ADT73XX 0x0
172 #define ID_ADT75XX 0x10
195 #define ADT7316_IN_TEMP_HIGH_INT_MASK 0x1
196 #define ADT7316_IN_TEMP_LOW_INT_MASK 0x2
197 #define ADT7316_EX_TEMP_HIGH_INT_MASK 0x4
198 #define ADT7316_EX_TEMP_LOW_INT_MASK 0x8
199 #define ADT7316_EX_TEMP_FAULT_INT_MASK 0x10
200 #define ADT7516_AIN1_INT_MASK 0x4
201 #define ADT7516_AIN2_INT_MASK 0x20
202 #define ADT7516_AIN3_INT_MASK 0x40
203 #define ADT7516_AIN4_INT_MASK 0x80
204 #define ADT7316_VDD_INT_MASK 0x100
205 #define ADT7316_TEMP_INT_MASK 0x1F
206 #define ADT7516_AIN_INT_MASK 0xE0
207 #define ADT7316_TEMP_AIN_INT_MASK \
208 (ADT7316_TEMP_INT_MASK)
264 if (_adt7316_store_enabled(chip, enable) < 0)
271 adt7316_show_enabled,
272 adt7316_store_enabled,
275 static ssize_t adt7316_show_select_ex_temp(
struct device *dev,
279 struct iio_dev *dev_info = dev_to_iio_dev(dev);
288 static ssize_t adt7316_store_select_ex_temp(
struct device *dev,
293 struct iio_dev *dev_info = dev_to_iio_dev(dev);
315 adt7316_show_select_ex_temp,
316 adt7316_store_select_ex_temp,
323 struct iio_dev *dev_info = dev_to_iio_dev(dev);
327 return sprintf(buf,
"single_channel\n");
329 return sprintf(buf,
"round_robin\n");
337 struct iio_dev *dev_info = dev_to_iio_dev(dev);
343 if (!
memcmp(buf,
"single_channel", 14))
364 return sprintf(buf,
"single_channel\nround_robin\n");
373 struct iio_dev *dev_info = dev_to_iio_dev(dev);
381 return sprintf(buf,
"0 - VDD\n");
383 return sprintf(buf,
"1 - Internal Temperature\n");
387 return sprintf(buf,
"2 - AIN1\n");
389 return sprintf(buf,
"2 - External Temperature\n");
392 return sprintf(buf,
"3 - AIN2\n");
397 return sprintf(buf,
"4 - AIN3\n");
401 return sprintf(buf,
"5 - AIN4\n");
412 struct iio_dev *dev_info = dev_to_iio_dev(dev);
415 unsigned long data = 0;
450 adt7316_show_ad_channel,
451 adt7316_store_ad_channel,
454 static ssize_t adt7316_show_all_ad_channels(
struct device *dev,
458 struct iio_dev *dev_info = dev_to_iio_dev(dev);
465 return sprintf(buf,
"0 - VDD\n1 - Internal Temperature\n"
466 "2 - External Temperature or AIN1\n"
467 "3 - AIN2\n4 - AIN3\n5 - AIN4\n");
469 return sprintf(buf,
"0 - VDD\n1 - Internal Temperature\n"
470 "2 - External Temperature\n");
474 adt7316_show_all_ad_channels,
NULL, 0);
476 static ssize_t adt7316_show_disable_averaging(
struct device *dev,
480 struct iio_dev *dev_info = dev_to_iio_dev(dev);
487 static ssize_t adt7316_store_disable_averaging(
struct device *dev,
492 struct iio_dev *dev_info = dev_to_iio_dev(dev);
511 adt7316_show_disable_averaging,
512 adt7316_store_disable_averaging,
515 static ssize_t adt7316_show_enable_smbus_timeout(
struct device *dev,
519 struct iio_dev *dev_info = dev_to_iio_dev(dev);
526 static ssize_t adt7316_store_enable_smbus_timeout(
struct device *dev,
531 struct iio_dev *dev_info = dev_to_iio_dev(dev);
550 adt7316_show_enable_smbus_timeout,
551 adt7316_store_enable_smbus_timeout,
560 struct iio_dev *dev_info = dev_to_iio_dev(dev);
583 struct iio_dev *dev_info = dev_to_iio_dev(dev);
594 struct iio_dev *dev_info = dev_to_iio_dev(dev);
613 adt7316_show_powerdown,
614 adt7316_store_powerdown,
617 static ssize_t adt7316_show_fast_ad_clock(
struct device *dev,
621 struct iio_dev *dev_info = dev_to_iio_dev(dev);
627 static ssize_t adt7316_store_fast_ad_clock(
struct device *dev,
632 struct iio_dev *dev_info = dev_to_iio_dev(dev);
651 adt7316_show_fast_ad_clock,
652 adt7316_store_fast_ad_clock,
655 static ssize_t adt7316_show_da_high_resolution(
struct device *dev,
659 struct iio_dev *dev_info = dev_to_iio_dev(dev);
664 return sprintf(buf,
"1 (12 bits)\n");
666 return sprintf(buf,
"1 (10 bits)\n");
669 return sprintf(buf,
"0 (8 bits)\n");
672 static ssize_t adt7316_store_da_high_resolution(
struct device *dev,
677 struct iio_dev *dev_info = dev_to_iio_dev(dev);
684 if (!
memcmp(buf,
"1", 1)) {
703 adt7316_show_da_high_resolution,
704 adt7316_store_da_high_resolution,
707 static ssize_t adt7316_show_AIN_internal_Vref(
struct device *dev,
711 struct iio_dev *dev_info = dev_to_iio_dev(dev);
721 static ssize_t adt7316_store_AIN_internal_Vref(
struct device *dev,
726 struct iio_dev *dev_info = dev_to_iio_dev(dev);
749 adt7316_show_AIN_internal_Vref,
750 adt7316_store_AIN_internal_Vref,
754 static ssize_t adt7316_show_enable_prop_DACA(
struct device *dev,
758 struct iio_dev *dev_info = dev_to_iio_dev(dev);
765 static ssize_t adt7316_store_enable_prop_DACA(
struct device *dev,
770 struct iio_dev *dev_info = dev_to_iio_dev(dev);
789 adt7316_show_enable_prop_DACA,
790 adt7316_store_enable_prop_DACA,
793 static ssize_t adt7316_show_enable_prop_DACB(
struct device *dev,
797 struct iio_dev *dev_info = dev_to_iio_dev(dev);
804 static ssize_t adt7316_store_enable_prop_DACB(
struct device *dev,
809 struct iio_dev *dev_info = dev_to_iio_dev(dev);
828 adt7316_show_enable_prop_DACB,
829 adt7316_store_enable_prop_DACB,
832 static ssize_t adt7316_show_DAC_2Vref_ch_mask(
struct device *dev,
836 struct iio_dev *dev_info = dev_to_iio_dev(dev);
843 static ssize_t adt7316_store_DAC_2Vref_ch_mask(
struct device *dev,
848 struct iio_dev *dev_info = dev_to_iio_dev(dev);
851 unsigned long data = 0;
871 adt7316_show_DAC_2Vref_ch_mask,
872 adt7316_store_DAC_2Vref_ch_mask,
875 static ssize_t adt7316_show_DAC_update_mode(
struct device *dev,
879 struct iio_dev *dev_info = dev_to_iio_dev(dev);
883 return sprintf(buf,
"manual\n");
887 return sprintf(buf,
"0 - auto at any MSB DAC writing\n");
889 return sprintf(buf,
"1 - auto at MSB DAC AB and CD writing\n");
891 return sprintf(buf,
"2 - auto at MSB DAC ABCD writing\n");
893 return sprintf(buf,
"3 - manual\n");
898 static ssize_t adt7316_store_DAC_update_mode(
struct device *dev,
903 struct iio_dev *dev_info = dev_to_iio_dev(dev);
929 adt7316_show_DAC_update_mode,
930 adt7316_store_DAC_update_mode,
933 static ssize_t adt7316_show_all_DAC_update_modes(
struct device *dev,
937 struct iio_dev *dev_info = dev_to_iio_dev(dev);
941 return sprintf(buf,
"0 - auto at any MSB DAC writing\n"
942 "1 - auto at MSB DAC AB and CD writing\n"
943 "2 - auto at MSB DAC ABCD writing\n"
946 return sprintf(buf,
"manual\n");
950 adt7316_show_all_DAC_update_modes,
NULL, 0);
958 struct iio_dev *dev_info = dev_to_iio_dev(dev);
990 adt7316_store_update_DAC,
993 static ssize_t adt7316_show_DA_AB_Vref_bypass(
struct device *dev,
997 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1007 static ssize_t adt7316_store_DA_AB_Vref_bypass(
struct device *dev,
1012 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1021 if (!
memcmp(buf,
"1", 1))
1034 adt7316_show_DA_AB_Vref_bypass,
1035 adt7316_store_DA_AB_Vref_bypass,
1038 static ssize_t adt7316_show_DA_CD_Vref_bypass(
struct device *dev,
1042 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1052 static ssize_t adt7316_store_DA_CD_Vref_bypass(
struct device *dev,
1057 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1066 if (!
memcmp(buf,
"1", 1))
1079 adt7316_show_DA_CD_Vref_bypass,
1080 adt7316_store_DA_CD_Vref_bypass,
1083 static ssize_t adt7316_show_DAC_internal_Vref(
struct device *dev,
1087 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1099 static ssize_t adt7316_store_DAC_internal_Vref(
struct device *dev,
1104 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1112 if (ret || data > 3)
1118 else if (data & 0x2)
1140 adt7316_show_DAC_internal_Vref,
1141 adt7316_store_DAC_internal_Vref,
1158 ret = chip->
bus.read(chip->
bus.client,
1163 ret = chip->
bus.read(chip->
bus.client,
1172 ret = chip->
bus.read(chip->
bus.client,
1177 ret = chip->
bus.read(chip->
bus.client,
1185 return sprintf(buf,
"%d\n", data);
1187 ret = chip->
bus.read(chip->
bus.client,
1192 ret = chip->
bus.read(chip->
bus.client,
1203 return sprintf(buf,
"%d\n", data);
1210 data = (ADT7316_T_VALUE_SIGN << 1) - data;
1214 return sprintf(buf,
"%c%d.%.2d\n", sign,
1215 (data >> ADT7316_T_VALUE_FLOAT_OFFSET),
1223 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1234 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1242 static ssize_t adt7316_show_ex_temp_AIN1(
struct device *dev,
1246 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1259 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1270 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1281 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1289 int offset_addr,
char *buf)
1295 ret = chip->
bus.read(chip->
bus.client, offset_addr, &val);
1303 return sprintf(buf,
"%d\n", data);
1307 int offset_addr,
const char *buf,
size_t len)
1314 if (ret || data > 127 || data < -128)
1322 ret = chip->
bus.write(chip->
bus.client, offset_addr, val);
1329 static ssize_t adt7316_show_in_temp_offset(
struct device *dev,
1333 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1339 static ssize_t adt7316_store_in_temp_offset(
struct device *dev,
1344 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1351 adt7316_show_in_temp_offset,
1352 adt7316_store_in_temp_offset, 0);
1354 static ssize_t adt7316_show_ex_temp_offset(
struct device *dev,
1358 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1364 static ssize_t adt7316_store_ex_temp_offset(
struct device *dev,
1369 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1376 adt7316_show_ex_temp_offset,
1377 adt7316_store_ex_temp_offset, 0);
1379 static ssize_t adt7316_show_in_analog_temp_offset(
struct device *dev,
1383 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1386 return adt7316_show_temp_offset(chip,
1390 static ssize_t adt7316_store_in_analog_temp_offset(
struct device *dev,
1395 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1398 return adt7316_store_temp_offset(chip,
1403 adt7316_show_in_analog_temp_offset,
1404 adt7316_store_in_analog_temp_offset, 0);
1406 static ssize_t adt7316_show_ex_analog_temp_offset(
struct device *dev,
1410 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1413 return adt7316_show_temp_offset(chip,
1417 static ssize_t adt7316_store_ex_analog_temp_offset(
struct device *dev,
1422 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1425 return adt7316_store_temp_offset(chip,
1430 adt7316_show_ex_analog_temp_offset,
1431 adt7316_store_ex_analog_temp_offset, 0);
1434 int channel,
char *buf)
1450 ret = chip->
bus.read(chip->
bus.client,
1456 ret = chip->
bus.read(chip->
bus.client,
1461 data = (msb <<
offset) + (lsb & ((1 << offset) - 1));
1463 return sprintf(buf,
"%d\n", data);
1467 int channel,
const char *buf,
size_t len)
1483 if (ret || data >= (1 << chip->
dac_bits))
1487 lsb = data & (1 <<
offset);
1488 ret = chip->
bus.write(chip->
bus.client,
1495 ret = chip->
bus.write(chip->
bus.client,
1507 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1510 return adt7316_show_DAC(chip, 0, buf);
1518 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1521 return adt7316_store_DAC(chip, 0, buf, len);
1525 adt7316_store_DAC_A, 0);
1531 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1534 return adt7316_show_DAC(chip, 1, buf);
1542 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1545 return adt7316_store_DAC(chip, 1, buf, len);
1549 adt7316_store_DAC_B, 0);
1555 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1558 return adt7316_show_DAC(chip, 2, buf);
1566 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1569 return adt7316_store_DAC(chip, 2, buf, len);
1573 adt7316_store_DAC_C, 0);
1579 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1582 return adt7316_show_DAC(chip, 3, buf);
1590 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1593 return adt7316_store_DAC(chip, 3, buf, len);
1597 adt7316_store_DAC_D, 0);
1603 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1612 return sprintf(buf,
"%d\n",
id);
1617 static ssize_t adt7316_show_manufactorer_id(
struct device *dev,
1621 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1630 return sprintf(buf,
"%d\n",
id);
1634 adt7316_show_manufactorer_id,
NULL, 0);
1640 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1649 return sprintf(buf,
"%d\n", rev);
1658 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1675 static struct attribute *adt7316_attributes[] = {
1676 &iio_dev_attr_all_modes.dev_attr.attr,
1677 &iio_dev_attr_mode.dev_attr.attr,
1678 &iio_dev_attr_reset.dev_attr.attr,
1679 &iio_dev_attr_enabled.dev_attr.attr,
1680 &iio_dev_attr_ad_channel.dev_attr.attr,
1681 &iio_dev_attr_all_ad_channels.dev_attr.attr,
1682 &iio_dev_attr_disable_averaging.dev_attr.attr,
1683 &iio_dev_attr_enable_smbus_timeout.dev_attr.attr,
1684 &iio_dev_attr_powerdown.dev_attr.attr,
1685 &iio_dev_attr_fast_ad_clock.dev_attr.attr,
1686 &iio_dev_attr_da_high_resolution.dev_attr.attr,
1687 &iio_dev_attr_enable_proportion_DACA.dev_attr.attr,
1688 &iio_dev_attr_enable_proportion_DACB.dev_attr.attr,
1689 &iio_dev_attr_DAC_2Vref_channels_mask.dev_attr.attr,
1690 &iio_dev_attr_DAC_update_mode.dev_attr.attr,
1691 &iio_dev_attr_all_DAC_update_modes.dev_attr.attr,
1692 &iio_dev_attr_update_DAC.dev_attr.attr,
1693 &iio_dev_attr_DA_AB_Vref_bypass.dev_attr.attr,
1694 &iio_dev_attr_DA_CD_Vref_bypass.dev_attr.attr,
1695 &iio_dev_attr_DAC_internal_Vref.dev_attr.attr,
1696 &iio_dev_attr_VDD.dev_attr.attr,
1697 &iio_dev_attr_in_temp.dev_attr.attr,
1698 &iio_dev_attr_ex_temp.dev_attr.attr,
1699 &iio_dev_attr_in_temp_offset.dev_attr.attr,
1700 &iio_dev_attr_ex_temp_offset.dev_attr.attr,
1701 &iio_dev_attr_in_analog_temp_offset.dev_attr.attr,
1702 &iio_dev_attr_ex_analog_temp_offset.dev_attr.attr,
1703 &iio_dev_attr_DAC_A.dev_attr.attr,
1704 &iio_dev_attr_DAC_B.dev_attr.attr,
1705 &iio_dev_attr_DAC_C.dev_attr.attr,
1706 &iio_dev_attr_DAC_D.dev_attr.attr,
1707 &iio_dev_attr_device_id.dev_attr.attr,
1708 &iio_dev_attr_manufactorer_id.dev_attr.attr,
1709 &iio_dev_attr_device_rev.dev_attr.attr,
1710 &iio_dev_attr_bus_type.dev_attr.attr,
1715 .attrs = adt7316_attributes,
1718 static struct attribute *adt7516_attributes[] = {
1719 &iio_dev_attr_all_modes.dev_attr.attr,
1720 &iio_dev_attr_mode.dev_attr.attr,
1721 &iio_dev_attr_select_ex_temp.dev_attr.attr,
1722 &iio_dev_attr_reset.dev_attr.attr,
1723 &iio_dev_attr_enabled.dev_attr.attr,
1724 &iio_dev_attr_ad_channel.dev_attr.attr,
1725 &iio_dev_attr_all_ad_channels.dev_attr.attr,
1726 &iio_dev_attr_disable_averaging.dev_attr.attr,
1727 &iio_dev_attr_enable_smbus_timeout.dev_attr.attr,
1728 &iio_dev_attr_powerdown.dev_attr.attr,
1729 &iio_dev_attr_fast_ad_clock.dev_attr.attr,
1730 &iio_dev_attr_AIN_internal_Vref.dev_attr.attr,
1731 &iio_dev_attr_da_high_resolution.dev_attr.attr,
1732 &iio_dev_attr_enable_proportion_DACA.dev_attr.attr,
1733 &iio_dev_attr_enable_proportion_DACB.dev_attr.attr,
1734 &iio_dev_attr_DAC_2Vref_channels_mask.dev_attr.attr,
1735 &iio_dev_attr_DAC_update_mode.dev_attr.attr,
1736 &iio_dev_attr_all_DAC_update_modes.dev_attr.attr,
1737 &iio_dev_attr_update_DAC.dev_attr.attr,
1738 &iio_dev_attr_DA_AB_Vref_bypass.dev_attr.attr,
1739 &iio_dev_attr_DA_CD_Vref_bypass.dev_attr.attr,
1740 &iio_dev_attr_DAC_internal_Vref.dev_attr.attr,
1741 &iio_dev_attr_VDD.dev_attr.attr,
1742 &iio_dev_attr_in_temp.dev_attr.attr,
1743 &iio_dev_attr_ex_temp_AIN1.dev_attr.attr,
1744 &iio_dev_attr_AIN2.dev_attr.attr,
1745 &iio_dev_attr_AIN3.dev_attr.attr,
1746 &iio_dev_attr_AIN4.dev_attr.attr,
1747 &iio_dev_attr_in_temp_offset.dev_attr.attr,
1748 &iio_dev_attr_ex_temp_offset.dev_attr.attr,
1749 &iio_dev_attr_in_analog_temp_offset.dev_attr.attr,
1750 &iio_dev_attr_ex_analog_temp_offset.dev_attr.attr,
1751 &iio_dev_attr_DAC_A.dev_attr.attr,
1752 &iio_dev_attr_DAC_B.dev_attr.attr,
1753 &iio_dev_attr_DAC_C.dev_attr.attr,
1754 &iio_dev_attr_DAC_D.dev_attr.attr,
1755 &iio_dev_attr_device_id.dev_attr.attr,
1756 &iio_dev_attr_manufactorer_id.dev_attr.attr,
1757 &iio_dev_attr_device_rev.dev_attr.attr,
1758 &iio_dev_attr_bus_type.dev_attr.attr,
1763 .attrs = adt7516_attributes,
1766 static irqreturn_t adt7316_event_handler(
int irq,
void *
private)
1768 struct iio_dev *indio_dev =
private;
1779 time = iio_get_time_ns();
1780 if (stat1 & (1 << 0))
1786 if (stat1 & (1 << 1))
1792 if (stat1 & (1 << 2))
1798 if (stat1 & (1 << 3))
1804 if (stat1 & (1 << 5))
1810 if (stat1 & (1 << 6))
1816 if (stat1 & (1 << 7))
1844 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1858 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1875 chip->
int_mask &= ~ADT7316_VDD_INT_MASK;
1885 mask = (~data) & ADT7316_TEMP_AIN_INT_MASK;
1893 static inline ssize_t adt7316_show_ad_bound(
struct device *dev,
1898 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1908 ret = chip->
bus.read(chip->
bus.client, this_attr->
address, &val);
1920 return sprintf(buf,
"%d\n", data);
1923 static inline ssize_t adt7316_set_ad_bound(
struct device *dev,
1929 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1945 if (data > 255 || data < 0)
1948 if (data > 127 || data < -128)
1957 ret = chip->
bus.write(chip->
bus.client, this_attr->
address, val);
1968 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1979 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1985 if (!
memcmp(buf,
"1", 1))
1999 adt7316_show_int_mask, adt7316_set_int_mask,
2003 adt7316_show_ad_bound, adt7316_set_ad_bound,
2007 adt7316_show_ad_bound, adt7316_set_ad_bound,
2011 adt7316_show_ad_bound, adt7316_set_ad_bound,
2015 adt7316_show_ad_bound, adt7316_set_ad_bound,
2021 adt7316_show_ad_bound, adt7316_set_ad_bound,
2025 adt7316_show_ad_bound, adt7316_set_ad_bound,
2029 adt7316_show_ad_bound, adt7316_set_ad_bound,
2033 adt7316_show_ad_bound, adt7316_set_ad_bound,
2037 adt7316_show_ad_bound, adt7316_set_ad_bound,
2041 adt7316_show_ad_bound, adt7316_set_ad_bound,
2045 adt7316_show_ad_bound, adt7316_set_ad_bound,
2049 adt7316_show_ad_bound, adt7316_set_ad_bound,
2053 adt7316_show_int_enabled,
2054 adt7316_set_int_enabled, 0);
2056 static struct attribute *adt7316_event_attributes[] = {
2057 &iio_dev_attr_int_mask.dev_attr.attr,
2058 &iio_dev_attr_in_temp_high_value.dev_attr.attr,
2059 &iio_dev_attr_in_temp_low_value.dev_attr.attr,
2060 &iio_dev_attr_ex_temp_high_value.dev_attr.attr,
2061 &iio_dev_attr_ex_temp_low_value.dev_attr.attr,
2062 &iio_dev_attr_int_enabled.dev_attr.attr,
2067 .attrs = adt7316_event_attributes,
2071 static struct attribute *adt7516_event_attributes[] = {
2072 &iio_dev_attr_int_mask.dev_attr.attr,
2073 &iio_dev_attr_in_temp_high_value.dev_attr.attr,
2074 &iio_dev_attr_in_temp_low_value.dev_attr.attr,
2075 &iio_dev_attr_ex_temp_ain1_high_value.dev_attr.attr,
2076 &iio_dev_attr_ex_temp_ain1_low_value.dev_attr.attr,
2077 &iio_dev_attr_ain2_high_value.dev_attr.attr,
2078 &iio_dev_attr_ain2_low_value.dev_attr.attr,
2079 &iio_dev_attr_ain3_high_value.dev_attr.attr,
2080 &iio_dev_attr_ain3_low_value.dev_attr.attr,
2081 &iio_dev_attr_ain4_high_value.dev_attr.attr,
2082 &iio_dev_attr_ain4_low_value.dev_attr.attr,
2083 &iio_dev_attr_int_enabled.dev_attr.attr,
2088 .attrs = adt7516_event_attributes,
2092 #ifdef CONFIG_PM_SLEEP
2093 static int adt7316_disable(
struct device *dev)
2098 return _adt7316_store_enabled(chip, 0);
2101 static int adt7316_enable(
struct device *dev)
2106 return _adt7316_store_enabled(chip, 1);
2113 static const struct iio_info adt7316_info = {
2114 .attrs = &adt7316_attribute_group,
2115 .event_attrs = &adt7316_event_attribute_group,
2119 static const struct iio_info adt7516_info = {
2120 .attrs = &adt7516_attribute_group,
2121 .event_attrs = &adt7516_event_attribute_group,
2137 if (indio_dev ==
NULL) {
2141 chip = iio_priv(indio_dev);
2149 else if (name[4] ==
'5')
2154 chip->
ldac_pin = adt7316_platform_data[1];
2164 indio_dev->
dev.parent = dev;
2166 indio_dev->
info = &adt7516_info;
2168 indio_dev->
info = &adt7316_info;
2169 indio_dev->
name = name;
2172 if (chip->
bus.irq > 0) {
2173 if (adt7316_platform_data[0])
2174 chip->
bus.irq_flags = adt7316_platform_data[0];
2178 &adt7316_event_handler,
2183 goto error_free_dev;
2192 goto error_unreg_irq;
2198 goto error_unreg_irq;
2203 goto error_unreg_irq;
2205 dev_info(dev,
"%s temperature sensor, ADC and DAC registered.\n",
2235 " temperature sensor, ADC and DAC driver");