1779
1762
.attrs = adt7516_attributes,
1784
* temperature bound events
1787
#define IIO_EVENT_CODE_ADT7316_IN_TEMP_HIGH IIO_BUFFER_EVENT_CODE(0)
1788
#define IIO_EVENT_CODE_ADT7316_IN_TEMP_LOW IIO_BUFFER_EVENT_CODE(1)
1789
#define IIO_EVENT_CODE_ADT7316_EX_TEMP_HIGH IIO_BUFFER_EVENT_CODE(2)
1790
#define IIO_EVENT_CODE_ADT7316_EX_TEMP_LOW IIO_BUFFER_EVENT_CODE(3)
1791
#define IIO_EVENT_CODE_ADT7316_EX_TEMP_FAULT IIO_BUFFER_EVENT_CODE(4)
1792
#define IIO_EVENT_CODE_ADT7516_AIN1 IIO_BUFFER_EVENT_CODE(5)
1793
#define IIO_EVENT_CODE_ADT7516_AIN2 IIO_BUFFER_EVENT_CODE(6)
1794
#define IIO_EVENT_CODE_ADT7516_AIN3 IIO_BUFFER_EVENT_CODE(7)
1795
#define IIO_EVENT_CODE_ADT7516_AIN4 IIO_BUFFER_EVENT_CODE(8)
1796
#define IIO_EVENT_CODE_ADT7316_VDD IIO_BUFFER_EVENT_CODE(9)
1798
static void adt7316_interrupt_bh(struct work_struct *work_s)
1765
static irqreturn_t adt7316_event_handler(int irq, void *private)
1800
struct adt7316_chip_info *chip =
1801
container_of(work_s, struct adt7316_chip_info, thresh_work);
1767
struct iio_dev *indio_dev = private;
1768
struct adt7316_chip_info *chip = iio_dev_get_devdata(indio_dev);
1802
1769
u8 stat1, stat2;
1805
1773
ret = chip->bus.read(chip->bus.client, ADT7316_INT_STAT1, &stat1);
1807
if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
1775
if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
1812
for (i = 0; i < count; i++) {
1813
if (stat1 & (1 << i))
1814
iio_push_event(chip->indio_dev, 0,
1815
IIO_EVENT_CODE_ADT7316_IN_TEMP_HIGH + i,
1816
chip->last_timestamp);
1778
time = iio_get_time_ns();
1779
if (stat1 & (1 << 0))
1780
iio_push_event(chip->indio_dev, 0,
1781
IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
1785
if (stat1 & (1 << 1))
1786
iio_push_event(chip->indio_dev, 0,
1787
IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
1789
IIO_EV_DIR_FALLING),
1791
if (stat1 & (1 << 2))
1792
iio_push_event(chip->indio_dev, 0,
1793
IIO_UNMOD_EVENT_CODE(IIO_TEMP, 1,
1797
if (stat1 & (1 << 3))
1798
iio_push_event(chip->indio_dev, 0,
1799
IIO_UNMOD_EVENT_CODE(IIO_TEMP, 1,
1801
IIO_EV_DIR_FALLING),
1803
if (stat1 & (1 << 5))
1804
iio_push_event(chip->indio_dev, 0,
1805
IIO_UNMOD_EVENT_CODE(IIO_IN, 1,
1809
if (stat1 & (1 << 6))
1810
iio_push_event(chip->indio_dev, 0,
1811
IIO_UNMOD_EVENT_CODE(IIO_IN, 2,
1815
if (stat1 & (1 << 7))
1816
iio_push_event(chip->indio_dev, 0,
1817
IIO_UNMOD_EVENT_CODE(IIO_IN, 3,
1820
1822
ret = chip->bus.read(chip->bus.client, ADT7316_INT_STAT2, &stat2);
1822
1824
if (stat2 & ADT7316_INT_MASK2_VDD)
1823
1825
iio_push_event(chip->indio_dev, 0,
1824
IIO_EVENT_CODE_ADT7316_VDD,
1825
chip->last_timestamp);
1826
IIO_UNMOD_EVENT_CODE(IIO_IN,
1828
enable_irq(chip->bus.irq);
1831
static int adt7316_interrupt(struct iio_dev *dev_info,
1836
struct adt7316_chip_info *chip = dev_info->dev_data;
1838
chip->last_timestamp = timestamp;
1839
schedule_work(&chip->thresh_work);
1844
IIO_EVENT_SH(adt7316, &adt7316_interrupt);
1847
1837
* Show mask of enabled interrupts in Hex.
1964
1954
val = (u8)data;
1966
ret = chip->bus.write(chip->bus.client, bound_reg, val);
1956
ret = chip->bus.write(chip->bus.client, this_attr->address, val);
1973
static ssize_t adt7316_show_in_temp_high(struct device *dev,
1974
struct device_attribute *attr,
1977
return adt7316_show_ad_bound(dev, attr,
1978
ADT7316_IN_TEMP_HIGH, buf);
1981
static inline ssize_t adt7316_set_in_temp_high(struct device *dev,
1982
struct device_attribute *attr,
1986
return adt7316_set_ad_bound(dev, attr,
1987
ADT7316_IN_TEMP_HIGH, buf, len);
1990
static ssize_t adt7316_show_in_temp_low(struct device *dev,
1991
struct device_attribute *attr,
1994
return adt7316_show_ad_bound(dev, attr,
1995
ADT7316_IN_TEMP_LOW, buf);
1998
static inline ssize_t adt7316_set_in_temp_low(struct device *dev,
1999
struct device_attribute *attr,
2003
return adt7316_set_ad_bound(dev, attr,
2004
ADT7316_IN_TEMP_LOW, buf, len);
2007
static ssize_t adt7316_show_ex_temp_ain1_high(struct device *dev,
2008
struct device_attribute *attr,
2011
return adt7316_show_ad_bound(dev, attr,
2012
ADT7316_EX_TEMP_HIGH, buf);
2015
static inline ssize_t adt7316_set_ex_temp_ain1_high(struct device *dev,
2016
struct device_attribute *attr,
2020
return adt7316_set_ad_bound(dev, attr,
2021
ADT7316_EX_TEMP_HIGH, buf, len);
2024
static ssize_t adt7316_show_ex_temp_ain1_low(struct device *dev,
2025
struct device_attribute *attr,
2028
return adt7316_show_ad_bound(dev, attr,
2029
ADT7316_EX_TEMP_LOW, buf);
2032
static inline ssize_t adt7316_set_ex_temp_ain1_low(struct device *dev,
2033
struct device_attribute *attr,
2037
return adt7316_set_ad_bound(dev, attr,
2038
ADT7316_EX_TEMP_LOW, buf, len);
2041
static ssize_t adt7316_show_ain2_high(struct device *dev,
2042
struct device_attribute *attr,
2045
return adt7316_show_ad_bound(dev, attr,
2046
ADT7516_AIN2_HIGH, buf);
2049
static inline ssize_t adt7316_set_ain2_high(struct device *dev,
2050
struct device_attribute *attr,
2054
return adt7316_set_ad_bound(dev, attr,
2055
ADT7516_AIN2_HIGH, buf, len);
2058
static ssize_t adt7316_show_ain2_low(struct device *dev,
2059
struct device_attribute *attr,
2062
return adt7316_show_ad_bound(dev, attr,
2063
ADT7516_AIN2_LOW, buf);
2066
static inline ssize_t adt7316_set_ain2_low(struct device *dev,
2067
struct device_attribute *attr,
2071
return adt7316_set_ad_bound(dev, attr,
2072
ADT7516_AIN2_LOW, buf, len);
2075
static ssize_t adt7316_show_ain3_high(struct device *dev,
2076
struct device_attribute *attr,
2079
return adt7316_show_ad_bound(dev, attr,
2080
ADT7516_AIN3_HIGH, buf);
2083
static inline ssize_t adt7316_set_ain3_high(struct device *dev,
2084
struct device_attribute *attr,
2088
return adt7316_set_ad_bound(dev, attr,
2089
ADT7516_AIN3_HIGH, buf, len);
2092
static ssize_t adt7316_show_ain3_low(struct device *dev,
2093
struct device_attribute *attr,
2096
return adt7316_show_ad_bound(dev, attr,
2097
ADT7516_AIN3_LOW, buf);
2100
static inline ssize_t adt7316_set_ain3_low(struct device *dev,
2101
struct device_attribute *attr,
2105
return adt7316_set_ad_bound(dev, attr,
2106
ADT7516_AIN3_LOW, buf, len);
2109
static ssize_t adt7316_show_ain4_high(struct device *dev,
2110
struct device_attribute *attr,
2113
return adt7316_show_ad_bound(dev, attr,
2114
ADT7516_AIN4_HIGH, buf);
2117
static inline ssize_t adt7316_set_ain4_high(struct device *dev,
2118
struct device_attribute *attr,
2122
return adt7316_set_ad_bound(dev, attr,
2123
ADT7516_AIN4_HIGH, buf, len);
2126
static ssize_t adt7316_show_ain4_low(struct device *dev,
2127
struct device_attribute *attr,
2130
return adt7316_show_ad_bound(dev, attr,
2131
ADT7516_AIN4_LOW, buf);
2134
static inline ssize_t adt7316_set_ain4_low(struct device *dev,
2135
struct device_attribute *attr,
2139
return adt7316_set_ad_bound(dev, attr,
2140
ADT7516_AIN4_LOW, buf, len);
2143
1963
static ssize_t adt7316_show_int_enabled(struct device *dev,
2144
1964
struct device_attribute *attr,
1996
static IIO_DEVICE_ATTR(int_mask,
1998
adt7316_show_int_mask, adt7316_set_int_mask,
2000
static IIO_DEVICE_ATTR(in_temp_high_value,
2002
adt7316_show_ad_bound, adt7316_set_ad_bound,
2003
ADT7316_IN_TEMP_HIGH);
2004
static IIO_DEVICE_ATTR(in_temp_low_value,
2006
adt7316_show_ad_bound, adt7316_set_ad_bound,
2007
ADT7316_IN_TEMP_LOW);
2008
static IIO_DEVICE_ATTR(ex_temp_high_value,
2010
adt7316_show_ad_bound, adt7316_set_ad_bound,
2011
ADT7316_EX_TEMP_HIGH);
2012
static IIO_DEVICE_ATTR(ex_temp_low_value,
2014
adt7316_show_ad_bound, adt7316_set_ad_bound,
2015
ADT7316_EX_TEMP_LOW);
2177
IIO_EVENT_ATTR_SH(int_mask, iio_event_adt7316,
2178
adt7316_show_int_mask, adt7316_set_int_mask, 0);
2179
IIO_EVENT_ATTR_SH(in_temp_high, iio_event_adt7316,
2180
adt7316_show_in_temp_high, adt7316_set_in_temp_high, 0);
2181
IIO_EVENT_ATTR_SH(in_temp_low, iio_event_adt7316,
2182
adt7316_show_in_temp_low, adt7316_set_in_temp_low, 0);
2183
IIO_EVENT_ATTR_SH(ex_temp_high, iio_event_adt7316,
2184
adt7316_show_ex_temp_ain1_high,
2185
adt7316_set_ex_temp_ain1_high, 0);
2186
IIO_EVENT_ATTR_SH(ex_temp_low, iio_event_adt7316,
2187
adt7316_show_ex_temp_ain1_low,
2188
adt7316_set_ex_temp_ain1_low, 0);
2189
IIO_EVENT_ATTR_SH(ex_temp_ain1_high, iio_event_adt7316,
2190
adt7316_show_ex_temp_ain1_high,
2191
adt7316_set_ex_temp_ain1_high, 0);
2192
IIO_EVENT_ATTR_SH(ex_temp_ain1_low, iio_event_adt7316,
2193
adt7316_show_ex_temp_ain1_low,
2194
adt7316_set_ex_temp_ain1_low, 0);
2195
IIO_EVENT_ATTR_SH(ain2_high, iio_event_adt7316,
2196
adt7316_show_ain2_high, adt7316_set_ain2_high, 0);
2197
IIO_EVENT_ATTR_SH(ain2_low, iio_event_adt7316,
2198
adt7316_show_ain2_low, adt7316_set_ain2_low, 0);
2199
IIO_EVENT_ATTR_SH(ain3_high, iio_event_adt7316,
2200
adt7316_show_ain3_high, adt7316_set_ain3_high, 0);
2201
IIO_EVENT_ATTR_SH(ain3_low, iio_event_adt7316,
2202
adt7316_show_ain3_low, adt7316_set_ain3_low, 0);
2203
IIO_EVENT_ATTR_SH(ain4_high, iio_event_adt7316,
2204
adt7316_show_ain4_high, adt7316_set_ain4_high, 0);
2205
IIO_EVENT_ATTR_SH(ain4_low, iio_event_adt7316,
2206
adt7316_show_ain4_low, adt7316_set_ain4_low, 0);
2207
IIO_EVENT_ATTR_SH(int_enabled, iio_event_adt7316,
2208
adt7316_show_int_enabled, adt7316_set_int_enabled, 0);
2017
/* NASTY duplication to be fixed */
2018
static IIO_DEVICE_ATTR(ex_temp_ain1_high_value,
2020
adt7316_show_ad_bound, adt7316_set_ad_bound,
2021
ADT7316_EX_TEMP_HIGH);
2022
static IIO_DEVICE_ATTR(ex_temp_ain1_low_value,
2024
adt7316_show_ad_bound, adt7316_set_ad_bound,
2025
ADT7316_EX_TEMP_LOW);
2026
static IIO_DEVICE_ATTR(ain2_high_value,
2028
adt7316_show_ad_bound, adt7316_set_ad_bound,
2030
static IIO_DEVICE_ATTR(ain2_low_value,
2032
adt7316_show_ad_bound, adt7316_set_ad_bound,
2034
static IIO_DEVICE_ATTR(ain3_high_value,
2036
adt7316_show_ad_bound, adt7316_set_ad_bound,
2038
static IIO_DEVICE_ATTR(ain3_low_value,
2040
adt7316_show_ad_bound, adt7316_set_ad_bound,
2042
static IIO_DEVICE_ATTR(ain4_high_value,
2044
adt7316_show_ad_bound, adt7316_set_ad_bound,
2046
static IIO_DEVICE_ATTR(ain4_low_value,
2048
adt7316_show_ad_bound, adt7316_set_ad_bound,
2050
static IIO_DEVICE_ATTR(int_enabled,
2052
adt7316_show_int_enabled,
2053
adt7316_set_int_enabled, 0);
2210
2055
static struct attribute *adt7316_event_attributes[] = {
2211
&iio_event_attr_int_mask.dev_attr.attr,
2212
&iio_event_attr_in_temp_high.dev_attr.attr,
2213
&iio_event_attr_in_temp_low.dev_attr.attr,
2214
&iio_event_attr_ex_temp_high.dev_attr.attr,
2215
&iio_event_attr_ex_temp_low.dev_attr.attr,
2216
&iio_event_attr_int_enabled.dev_attr.attr,
2056
&iio_dev_attr_int_mask.dev_attr.attr,
2057
&iio_dev_attr_in_temp_high_value.dev_attr.attr,
2058
&iio_dev_attr_in_temp_low_value.dev_attr.attr,
2059
&iio_dev_attr_ex_temp_high_value.dev_attr.attr,
2060
&iio_dev_attr_ex_temp_low_value.dev_attr.attr,
2061
&iio_dev_attr_int_enabled.dev_attr.attr,
2224
2069
static struct attribute *adt7516_event_attributes[] = {
2225
&iio_event_attr_int_mask.dev_attr.attr,
2226
&iio_event_attr_in_temp_high.dev_attr.attr,
2227
&iio_event_attr_in_temp_low.dev_attr.attr,
2228
&iio_event_attr_ex_temp_ain1_high.dev_attr.attr,
2229
&iio_event_attr_ex_temp_ain1_low.dev_attr.attr,
2230
&iio_event_attr_ain2_high.dev_attr.attr,
2231
&iio_event_attr_ain2_low.dev_attr.attr,
2232
&iio_event_attr_ain3_high.dev_attr.attr,
2233
&iio_event_attr_ain3_low.dev_attr.attr,
2234
&iio_event_attr_ain4_high.dev_attr.attr,
2235
&iio_event_attr_ain4_low.dev_attr.attr,
2236
&iio_event_attr_int_enabled.dev_attr.attr,
2070
&iio_dev_attr_int_mask.dev_attr.attr,
2071
&iio_dev_attr_in_temp_high_value.dev_attr.attr,
2072
&iio_dev_attr_in_temp_low_value.dev_attr.attr,
2073
&iio_dev_attr_ex_temp_ain1_high_value.dev_attr.attr,
2074
&iio_dev_attr_ex_temp_ain1_low_value.dev_attr.attr,
2075
&iio_dev_attr_ain2_high_value.dev_attr.attr,
2076
&iio_dev_attr_ain2_low_value.dev_attr.attr,
2077
&iio_dev_attr_ain3_high_value.dev_attr.attr,
2078
&iio_dev_attr_ain3_low_value.dev_attr.attr,
2079
&iio_dev_attr_ain4_high_value.dev_attr.attr,
2080
&iio_dev_attr_ain4_low_value.dev_attr.attr,
2081
&iio_dev_attr_int_enabled.dev_attr.attr,