2 * AD7150 capacitive sensor driver supporting AD7150/1/6
4 * Copyright 2010 Analog Devices Inc.
6 * Licensed under the GPL-2 or later.
9 #include <linux/interrupt.h>
10 #include <linux/device.h>
11 #include <linux/kernel.h>
12 #include <linux/slab.h>
13 #include <linux/i2c.h>
19 * AD7150 registers definition
22 #define AD7150_STATUS 0
23 #define AD7150_STATUS_OUT1 (1 << 3)
24 #define AD7150_STATUS_OUT2 (1 << 5)
25 #define AD7150_CH1_DATA_HIGH 1
26 #define AD7150_CH1_DATA_LOW 2
27 #define AD7150_CH2_DATA_HIGH 3
28 #define AD7150_CH2_DATA_LOW 4
29 #define AD7150_CH1_AVG_HIGH 5
30 #define AD7150_CH1_AVG_LOW 6
31 #define AD7150_CH2_AVG_HIGH 7
32 #define AD7150_CH2_AVG_LOW 8
33 #define AD7150_CH1_SENSITIVITY 9
34 #define AD7150_CH1_THR_HOLD_H 9
35 #define AD7150_CH1_TIMEOUT 10
36 #define AD7150_CH1_THR_HOLD_L 10
37 #define AD7150_CH1_SETUP 11
38 #define AD7150_CH2_SENSITIVITY 12
39 #define AD7150_CH2_THR_HOLD_H 12
40 #define AD7150_CH2_TIMEOUT 13
41 #define AD7150_CH2_THR_HOLD_L 13
42 #define AD7150_CH2_SETUP 14
44 #define AD7150_CFG_FIX (1 << 7)
45 #define AD7150_PD_TIMER 16
46 #define AD7150_CH1_CAPDAC 17
47 #define AD7150_CH2_CAPDAC 18
54 #define AD7150_MAX_CONV_MODE 4
57 * struct ad7150_chip_info - chip specifc information
60 struct ad7150_chip_info
{
62 struct i2c_client
*client
;
63 struct iio_dev
*indio_dev
;
65 u16 ch1_threshold
; /* Ch1 Threshold (in fixed threshold mode) */
66 u8 ch1_sensitivity
; /* Ch1 Sensitivity (in adaptive threshold mode) */
67 u8 ch1_timeout
; /* Ch1 Timeout (in adaptive threshold mode) */
69 u16 ch2_threshold
; /* Ch2 Threshold (in fixed threshold mode) */
70 u8 ch2_sensitivity
; /* Ch1 Sensitivity (in adaptive threshold mode) */
71 u8 ch2_timeout
; /* Ch1 Timeout (in adaptive threshold mode) */
74 char threshold_mode
[10]; /* adaptive/fixed threshold mode */
76 char *conversion_mode
;
79 struct ad7150_conversion_mode
{
84 static struct ad7150_conversion_mode
85 ad7150_conv_mode_table
[AD7150_MAX_CONV_MODE
] = {
87 { "continuous-conversion", 1 },
88 { "single-conversion", 2 },
93 * ad7150 register access by I2C
96 static int ad7150_i2c_read(struct ad7150_chip_info
*chip
, u8 reg
, u8
*data
, int len
)
98 struct i2c_client
*client
= chip
->client
;
101 ret
= i2c_master_send(client
, ®
, 1);
103 dev_err(&client
->dev
, "I2C write error\n");
107 ret
= i2c_master_recv(client
, data
, len
);
109 dev_err(&client
->dev
, "I2C read error\n");
116 static int ad7150_i2c_write(struct ad7150_chip_info
*chip
, u8 reg
, u8 data
)
118 struct i2c_client
*client
= chip
->client
;
126 ret
= i2c_master_send(client
, tx
, 2);
128 dev_err(&client
->dev
, "I2C write error\n");
137 #define IIO_DEV_ATTR_AVAIL_CONVERSION_MODES(_show) \
138 IIO_DEVICE_ATTR(available_conversion_modes, S_IRUGO, _show, NULL, 0)
139 #define IIO_DEV_ATTR_CONVERSION_MODE(_mode, _show, _store) \
140 IIO_DEVICE_ATTR(conversion_mode, _mode, _show, _store, 0)
141 #define IIO_DEV_ATTR_AVAIL_THRESHOLD_MODES(_show) \
142 IIO_DEVICE_ATTR(available_threshold_modes, S_IRUGO, _show, NULL, 0)
143 #define IIO_DEV_ATTR_THRESHOLD_MODE(_mode, _show, _store) \
144 IIO_DEVICE_ATTR(threshold_mode, _mode, _show, _store, 0)
145 #define IIO_DEV_ATTR_CH1_THRESHOLD(_mode, _show, _store) \
146 IIO_DEVICE_ATTR(ch1_threshold, _mode, _show, _store, 0)
147 #define IIO_DEV_ATTR_CH2_THRESHOLD(_mode, _show, _store) \
148 IIO_DEVICE_ATTR(ch2_threshold, _mode, _show, _store, 0)
149 #define IIO_DEV_ATTR_CH1_SENSITIVITY(_mode, _show, _store) \
150 IIO_DEVICE_ATTR(ch1_sensitivity, _mode, _show, _store, 0)
151 #define IIO_DEV_ATTR_CH2_SENSITIVITY(_mode, _show, _store) \
152 IIO_DEVICE_ATTR(ch2_sensitivity, _mode, _show, _store, 0)
153 #define IIO_DEV_ATTR_CH1_TIMEOUT(_mode, _show, _store) \
154 IIO_DEVICE_ATTR(ch1_timeout, _mode, _show, _store, 0)
155 #define IIO_DEV_ATTR_CH2_TIMEOUT(_mode, _show, _store) \
156 IIO_DEVICE_ATTR(ch2_timeout, _mode, _show, _store, 0)
157 #define IIO_DEV_ATTR_CH1_VALUE(_show) \
158 IIO_DEVICE_ATTR(ch1_value, S_IRUGO, _show, NULL, 0)
159 #define IIO_DEV_ATTR_CH2_VALUE(_show) \
160 IIO_DEVICE_ATTR(ch2_value, S_IRUGO, _show, NULL, 0)
161 #define IIO_DEV_ATTR_CH1_SETUP(_mode, _show, _store) \
162 IIO_DEVICE_ATTR(ch1_setup, _mode, _show, _store, 0)
163 #define IIO_DEV_ATTR_CH2_SETUP(_mode, _show, _store) \
164 IIO_DEVICE_ATTR(ch2_setup, _mode, _show, _store, 0)
165 #define IIO_DEV_ATTR_POWERDOWN_TIMER(_mode, _show, _store) \
166 IIO_DEVICE_ATTR(powerdown_timer, _mode, _show, _store, 0)
168 static ssize_t
ad7150_show_conversion_modes(struct device
*dev
,
169 struct device_attribute
*attr
,
175 for (i
= 0; i
< AD7150_MAX_CONV_MODE
; i
++)
176 len
+= sprintf(buf
+ len
, "%s\n", ad7150_conv_mode_table
[i
].name
);
181 static IIO_DEV_ATTR_AVAIL_CONVERSION_MODES(ad7150_show_conversion_modes
);
183 static ssize_t
ad7150_show_conversion_mode(struct device
*dev
,
184 struct device_attribute
*attr
,
187 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
188 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
190 return sprintf(buf
, "%s\n", chip
->conversion_mode
);
193 static ssize_t
ad7150_store_conversion_mode(struct device
*dev
,
194 struct device_attribute
*attr
,
198 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
199 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
203 ad7150_i2c_read(chip
, AD7150_CFG
, &cfg
, 1);
205 for (i
= 0; i
< AD7150_MAX_CONV_MODE
; i
++) {
206 if (strncmp(buf
, ad7150_conv_mode_table
[i
].name
,
207 strlen(ad7150_conv_mode_table
[i
].name
) - 1) == 0) {
208 chip
->conversion_mode
= ad7150_conv_mode_table
[i
].name
;
209 cfg
|= 0x18 | ad7150_conv_mode_table
[i
].reg_cfg
;
210 ad7150_i2c_write(chip
, AD7150_CFG
, cfg
);
215 dev_err(dev
, "not supported conversion mode\n");
220 static IIO_DEV_ATTR_CONVERSION_MODE(S_IRUGO
| S_IWUSR
,
221 ad7150_show_conversion_mode
,
222 ad7150_store_conversion_mode
);
224 static ssize_t
ad7150_show_threshold_modes(struct device
*dev
,
225 struct device_attribute
*attr
,
228 return sprintf(buf
, "adaptive\nfixed\n");
231 static IIO_DEV_ATTR_AVAIL_THRESHOLD_MODES(ad7150_show_threshold_modes
);
233 static ssize_t
ad7150_show_ch1_value(struct device
*dev
,
234 struct device_attribute
*attr
,
237 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
238 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
241 ad7150_i2c_read(chip
, AD7150_CH1_DATA_HIGH
, data
, 2);
242 return sprintf(buf
, "%d\n", ((int) data
[0] << 8) | data
[1]);
245 static IIO_DEV_ATTR_CH1_VALUE(ad7150_show_ch1_value
);
247 static ssize_t
ad7150_show_ch2_value(struct device
*dev
,
248 struct device_attribute
*attr
,
251 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
252 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
255 ad7150_i2c_read(chip
, AD7150_CH2_DATA_HIGH
, data
, 2);
256 return sprintf(buf
, "%d\n", ((int) data
[0] << 8) | data
[1]);
259 static IIO_DEV_ATTR_CH2_VALUE(ad7150_show_ch2_value
);
261 static ssize_t
ad7150_show_threshold_mode(struct device
*dev
,
262 struct device_attribute
*attr
,
265 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
266 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
268 return sprintf(buf
, "%s\n", chip
->threshold_mode
);
271 static ssize_t
ad7150_store_threshold_mode(struct device
*dev
,
272 struct device_attribute
*attr
,
276 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
277 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
280 ad7150_i2c_read(chip
, AD7150_CFG
, &cfg
, 1);
282 if (strncmp(buf
, "fixed", 5) == 0) {
283 strcpy(chip
->threshold_mode
, "fixed");
284 cfg
|= AD7150_CFG_FIX
;
285 ad7150_i2c_write(chip
, AD7150_CFG
, cfg
);
288 } else if (strncmp(buf
, "adaptive", 8) == 0) {
289 strcpy(chip
->threshold_mode
, "adaptive");
290 cfg
&= ~AD7150_CFG_FIX
;
291 ad7150_i2c_write(chip
, AD7150_CFG
, cfg
);
296 dev_err(dev
, "not supported threshold mode\n");
300 static IIO_DEV_ATTR_THRESHOLD_MODE(S_IRUGO
| S_IWUSR
,
301 ad7150_show_threshold_mode
,
302 ad7150_store_threshold_mode
);
304 static ssize_t
ad7150_show_ch1_threshold(struct device
*dev
,
305 struct device_attribute
*attr
,
308 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
309 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
311 return sprintf(buf
, "%d\n", chip
->ch1_threshold
);
314 static ssize_t
ad7150_store_ch1_threshold(struct device
*dev
,
315 struct device_attribute
*attr
,
319 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
320 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
324 ret
= strict_strtoul(buf
, 10, &data
);
326 if ((!ret
) && (data
< 0x10000)) {
327 ad7150_i2c_write(chip
, AD7150_CH1_THR_HOLD_H
, data
>> 8);
328 ad7150_i2c_write(chip
, AD7150_CH1_THR_HOLD_L
, data
);
329 chip
->ch1_threshold
= data
;
336 static IIO_DEV_ATTR_CH1_THRESHOLD(S_IRUGO
| S_IWUSR
,
337 ad7150_show_ch1_threshold
,
338 ad7150_store_ch1_threshold
);
340 static ssize_t
ad7150_show_ch2_threshold(struct device
*dev
,
341 struct device_attribute
*attr
,
344 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
345 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
347 return sprintf(buf
, "%d\n", chip
->ch2_threshold
);
350 static ssize_t
ad7150_store_ch2_threshold(struct device
*dev
,
351 struct device_attribute
*attr
,
355 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
356 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
360 ret
= strict_strtoul(buf
, 10, &data
);
362 if ((!ret
) && (data
< 0x10000)) {
363 ad7150_i2c_write(chip
, AD7150_CH2_THR_HOLD_H
, data
>> 8);
364 ad7150_i2c_write(chip
, AD7150_CH2_THR_HOLD_L
, data
);
365 chip
->ch2_threshold
= data
;
372 static IIO_DEV_ATTR_CH2_THRESHOLD(S_IRUGO
| S_IWUSR
,
373 ad7150_show_ch2_threshold
,
374 ad7150_store_ch2_threshold
);
376 static ssize_t
ad7150_show_ch1_sensitivity(struct device
*dev
,
377 struct device_attribute
*attr
,
380 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
381 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
383 return sprintf(buf
, "%d\n", chip
->ch1_sensitivity
);
386 static ssize_t
ad7150_store_ch1_sensitivity(struct device
*dev
,
387 struct device_attribute
*attr
,
391 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
392 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
396 ret
= strict_strtoul(buf
, 10, &data
);
398 if ((!ret
) && (data
< 0x100)) {
399 ad7150_i2c_write(chip
, AD7150_CH1_SENSITIVITY
, data
);
400 chip
->ch1_sensitivity
= data
;
407 static IIO_DEV_ATTR_CH1_SENSITIVITY(S_IRUGO
| S_IWUSR
,
408 ad7150_show_ch1_sensitivity
,
409 ad7150_store_ch1_sensitivity
);
411 static ssize_t
ad7150_show_ch2_sensitivity(struct device
*dev
,
412 struct device_attribute
*attr
,
415 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
416 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
418 return sprintf(buf
, "%d\n", chip
->ch2_sensitivity
);
421 static ssize_t
ad7150_store_ch2_sensitivity(struct device
*dev
,
422 struct device_attribute
*attr
,
426 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
427 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
431 ret
= strict_strtoul(buf
, 10, &data
);
433 if ((!ret
) && (data
< 0x100)) {
434 ad7150_i2c_write(chip
, AD7150_CH2_SENSITIVITY
, data
);
435 chip
->ch2_sensitivity
= data
;
442 static IIO_DEV_ATTR_CH2_SENSITIVITY(S_IRUGO
| S_IWUSR
,
443 ad7150_show_ch2_sensitivity
,
444 ad7150_store_ch2_sensitivity
);
446 static ssize_t
ad7150_show_ch1_timeout(struct device
*dev
,
447 struct device_attribute
*attr
,
450 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
451 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
453 return sprintf(buf
, "%d\n", chip
->ch1_timeout
);
456 static ssize_t
ad7150_store_ch1_timeout(struct device
*dev
,
457 struct device_attribute
*attr
,
461 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
462 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
466 ret
= strict_strtoul(buf
, 10, &data
);
468 if ((!ret
) && (data
< 0x100)) {
469 ad7150_i2c_write(chip
, AD7150_CH1_TIMEOUT
, data
);
470 chip
->ch1_timeout
= data
;
477 static IIO_DEV_ATTR_CH1_TIMEOUT(S_IRUGO
| S_IWUSR
,
478 ad7150_show_ch1_timeout
,
479 ad7150_store_ch1_timeout
);
481 static ssize_t
ad7150_show_ch2_timeout(struct device
*dev
,
482 struct device_attribute
*attr
,
485 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
486 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
488 return sprintf(buf
, "%d\n", chip
->ch2_timeout
);
491 static ssize_t
ad7150_store_ch2_timeout(struct device
*dev
,
492 struct device_attribute
*attr
,
496 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
497 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
501 ret
= strict_strtoul(buf
, 10, &data
);
503 if ((!ret
) && (data
< 0x100)) {
504 ad7150_i2c_write(chip
, AD7150_CH2_TIMEOUT
, data
);
505 chip
->ch2_timeout
= data
;
512 static IIO_DEV_ATTR_CH2_TIMEOUT(S_IRUGO
| S_IWUSR
,
513 ad7150_show_ch2_timeout
,
514 ad7150_store_ch2_timeout
);
516 static ssize_t
ad7150_show_ch1_setup(struct device
*dev
,
517 struct device_attribute
*attr
,
520 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
521 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
523 return sprintf(buf
, "0x%02x\n", chip
->ch1_setup
);
526 static ssize_t
ad7150_store_ch1_setup(struct device
*dev
,
527 struct device_attribute
*attr
,
531 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
532 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
536 ret
= strict_strtoul(buf
, 10, &data
);
538 if ((!ret
) && (data
< 0x100)) {
539 ad7150_i2c_write(chip
, AD7150_CH1_SETUP
, data
);
540 chip
->ch1_setup
= data
;
548 static IIO_DEV_ATTR_CH1_SETUP(S_IRUGO
| S_IWUSR
,
549 ad7150_show_ch1_setup
,
550 ad7150_store_ch1_setup
);
552 static ssize_t
ad7150_show_ch2_setup(struct device
*dev
,
553 struct device_attribute
*attr
,
556 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
557 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
559 return sprintf(buf
, "0x%02x\n", chip
->ch2_setup
);
562 static ssize_t
ad7150_store_ch2_setup(struct device
*dev
,
563 struct device_attribute
*attr
,
567 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
568 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
572 ret
= strict_strtoul(buf
, 10, &data
);
574 if ((!ret
) && (data
< 0x100)) {
575 ad7150_i2c_write(chip
, AD7150_CH2_SETUP
, data
);
576 chip
->ch2_setup
= data
;
583 static IIO_DEV_ATTR_CH2_SETUP(S_IRUGO
| S_IWUSR
,
584 ad7150_show_ch2_setup
,
585 ad7150_store_ch2_setup
);
587 static ssize_t
ad7150_show_name(struct device
*dev
,
588 struct device_attribute
*attr
,
591 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
592 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
593 return sprintf(buf
, "%s\n", chip
->name
);
596 static IIO_DEVICE_ATTR(name
, S_IRUGO
, ad7150_show_name
, NULL
, 0);
598 static ssize_t
ad7150_show_powerdown_timer(struct device
*dev
,
599 struct device_attribute
*attr
,
602 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
603 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
605 return sprintf(buf
, "0x%02x\n", chip
->powerdown_timer
);
608 static ssize_t
ad7150_store_powerdown_timer(struct device
*dev
,
609 struct device_attribute
*attr
,
613 struct iio_dev
*dev_info
= dev_get_drvdata(dev
);
614 struct ad7150_chip_info
*chip
= dev_info
->dev_data
;
618 ret
= strict_strtoul(buf
, 10, &data
);
620 if ((!ret
) && (data
< 0x40)) {
621 chip
->powerdown_timer
= data
;
628 static IIO_DEV_ATTR_POWERDOWN_TIMER(S_IRUGO
| S_IWUSR
,
629 ad7150_show_powerdown_timer
,
630 ad7150_store_powerdown_timer
);
632 static struct attribute
*ad7150_attributes
[] = {
633 &iio_dev_attr_available_threshold_modes
.dev_attr
.attr
,
634 &iio_dev_attr_threshold_mode
.dev_attr
.attr
,
635 &iio_dev_attr_ch1_threshold
.dev_attr
.attr
,
636 &iio_dev_attr_ch2_threshold
.dev_attr
.attr
,
637 &iio_dev_attr_ch1_timeout
.dev_attr
.attr
,
638 &iio_dev_attr_ch2_timeout
.dev_attr
.attr
,
639 &iio_dev_attr_ch1_setup
.dev_attr
.attr
,
640 &iio_dev_attr_ch2_setup
.dev_attr
.attr
,
641 &iio_dev_attr_ch1_sensitivity
.dev_attr
.attr
,
642 &iio_dev_attr_ch2_sensitivity
.dev_attr
.attr
,
643 &iio_dev_attr_powerdown_timer
.dev_attr
.attr
,
644 &iio_dev_attr_ch1_value
.dev_attr
.attr
,
645 &iio_dev_attr_ch2_value
.dev_attr
.attr
,
646 &iio_dev_attr_name
.dev_attr
.attr
,
650 static const struct attribute_group ad7150_attribute_group
= {
651 .attrs
= ad7150_attributes
,
658 #define IIO_EVENT_CODE_CH1_HIGH IIO_BUFFER_EVENT_CODE(0)
659 #define IIO_EVENT_CODE_CH1_LOW IIO_BUFFER_EVENT_CODE(1)
660 #define IIO_EVENT_CODE_CH2_HIGH IIO_BUFFER_EVENT_CODE(2)
661 #define IIO_EVENT_CODE_CH2_LOW IIO_BUFFER_EVENT_CODE(3)
663 static irqreturn_t
ad7150_event_handler(int irq
, void *private)
665 struct iio_dev
*indio_dev
= private;
666 struct ad7150_chip_info
*chip
= iio_dev_get_devdata(indio_dev
);
668 s64 timestamp
= iio_get_time_ns();
670 ad7150_i2c_read(chip
, AD7150_STATUS
, &int_status
, 1);
672 if ((int_status
& AD7150_STATUS_OUT1
) && !(chip
->old_state
& AD7150_STATUS_OUT1
))
673 iio_push_event(indio_dev
, 0,
674 IIO_EVENT_CODE_CH1_HIGH
,
676 else if ((!(int_status
& AD7150_STATUS_OUT1
)) && (chip
->old_state
& AD7150_STATUS_OUT1
))
677 iio_push_event(indio_dev
, 0,
678 IIO_EVENT_CODE_CH1_LOW
,
681 if ((int_status
& AD7150_STATUS_OUT2
) && !(chip
->old_state
& AD7150_STATUS_OUT2
))
682 iio_push_event(indio_dev
, 0,
683 IIO_EVENT_CODE_CH2_HIGH
,
685 else if ((!(int_status
& AD7150_STATUS_OUT2
)) && (chip
->old_state
& AD7150_STATUS_OUT2
))
686 iio_push_event(indio_dev
, 0,
687 IIO_EVENT_CODE_CH2_LOW
,
692 static IIO_CONST_ATTR(ch1_high_en
, "1");
693 static IIO_CONST_ATTR(ch2_high_en
, "1");
694 static IIO_CONST_ATTR(ch1_low_en
, "1");
695 static IIO_CONST_ATTR(ch2_low_en
, "1");
697 static struct attribute
*ad7150_event_attributes
[] = {
698 &iio_const_attr_ch1_high_en
.dev_attr
.attr
,
699 &iio_const_attr_ch2_high_en
.dev_attr
.attr
,
700 &iio_const_attr_ch1_low_en
.dev_attr
.attr
,
701 &iio_const_attr_ch2_low_en
.dev_attr
.attr
,
705 static struct attribute_group ad7150_event_attribute_group
= {
706 .attrs
= ad7150_event_attributes
,
710 * device probe and remove
713 static int __devinit
ad7150_probe(struct i2c_client
*client
,
714 const struct i2c_device_id
*id
)
716 int ret
= 0, regdone
= 0;
717 struct ad7150_chip_info
*chip
= kzalloc(sizeof(*chip
), GFP_KERNEL
);
723 /* this is only used for device removal purposes */
724 i2c_set_clientdata(client
, chip
);
726 chip
->client
= client
;
727 chip
->name
= id
->name
;
729 chip
->indio_dev
= iio_allocate_device(0);
730 if (chip
->indio_dev
== NULL
) {
732 goto error_free_chip
;
735 /* Echipabilish that the iio_dev is a child of the i2c device */
736 chip
->indio_dev
->dev
.parent
= &client
->dev
;
737 chip
->indio_dev
->attrs
= &ad7150_attribute_group
;
738 chip
->indio_dev
->event_attrs
= &ad7150_event_attribute_group
;
739 chip
->indio_dev
->dev_data
= (void *)(chip
);
740 chip
->indio_dev
->driver_module
= THIS_MODULE
;
741 chip
->indio_dev
->num_interrupt_lines
= 1;
742 chip
->indio_dev
->modes
= INDIO_DIRECT_MODE
;
744 ret
= iio_device_register(chip
->indio_dev
);
750 ret
= request_threaded_irq(client
->irq
,
752 &ad7150_event_handler
,
753 IRQF_TRIGGER_RISING
|
754 IRQF_TRIGGER_FALLING
,
761 dev_err(&client
->dev
, "%s capacitive sensor registered, irq: %d\n", id
->name
, client
->irq
);
767 iio_device_unregister(chip
->indio_dev
);
769 iio_free_device(chip
->indio_dev
);
776 static int __devexit
ad7150_remove(struct i2c_client
*client
)
778 struct ad7150_chip_info
*chip
= i2c_get_clientdata(client
);
779 struct iio_dev
*indio_dev
= chip
->indio_dev
;
782 free_irq(client
->irq
, indio_dev
);
783 iio_device_unregister(indio_dev
);
789 static const struct i2c_device_id ad7150_id
[] = {
796 MODULE_DEVICE_TABLE(i2c
, ad7150_id
);
798 static struct i2c_driver ad7150_driver
= {
802 .probe
= ad7150_probe
,
803 .remove
= __devexit_p(ad7150_remove
),
804 .id_table
= ad7150_id
,
807 static __init
int ad7150_init(void)
809 return i2c_add_driver(&ad7150_driver
);
812 static __exit
void ad7150_exit(void)
814 i2c_del_driver(&ad7150_driver
);
817 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
818 MODULE_DESCRIPTION("Analog Devices ad7150/1/6 capacitive sensor driver");
819 MODULE_LICENSE("GPL v2");
821 module_init(ad7150_init
);
822 module_exit(ad7150_exit
);