2 * Copyright (C) 2012 Simon Budig, <simon.budig@kernelconcepts.de>
4 * This software is licensed under the terms of the GNU General Public
5 * License version 2, as published by the Free Software Foundation, and
6 * may be copied, distributed, and modified under those terms.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public
14 * License along with this library; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 * This is a driver for the EDT "Polytouch" family of touch controllers
20 * based on the FocalTech FT5x06 line of chips.
22 * Development of this driver has been sponsored by Glyn:
23 * http://www.glyn.com/Products/Displays
26 #include <linux/module.h>
27 #include <linux/ratelimit.h>
28 #include <linux/interrupt.h>
29 #include <linux/input.h>
30 #include <linux/i2c.h>
31 #include <linux/uaccess.h>
32 #include <linux/delay.h>
33 #include <linux/debugfs.h>
34 #include <linux/slab.h>
35 #include <linux/gpio.h>
36 #include <linux/input/mt.h>
37 #include <linux/input/edt-ft5x06.h>
39 #define MAX_SUPPORT_POINTS 5
41 #define WORK_REGISTER_THRESHOLD 0x00
42 #define WORK_REGISTER_REPORT_RATE 0x08
43 #define WORK_REGISTER_GAIN 0x30
44 #define WORK_REGISTER_OFFSET 0x31
45 #define WORK_REGISTER_NUM_X 0x33
46 #define WORK_REGISTER_NUM_Y 0x34
48 #define WORK_REGISTER_OPMODE 0x3c
49 #define FACTORY_REGISTER_OPMODE 0x01
51 #define TOUCH_EVENT_DOWN 0x00
52 #define TOUCH_EVENT_UP 0x01
53 #define TOUCH_EVENT_ON 0x02
54 #define TOUCH_EVENT_RESERVED 0x03
56 #define EDT_NAME_LEN 23
57 #define EDT_SWITCH_MODE_RETRIES 10
58 #define EDT_SWITCH_MODE_DELAY 5 /* msec */
59 #define EDT_RAW_DATA_RETRIES 100
60 #define EDT_RAW_DATA_DELAY 1 /* msec */
62 struct edt_ft5x06_ts_data
{
63 struct i2c_client
*client
;
64 struct input_dev
*input
;
68 #if defined(CONFIG_DEBUG_FS)
69 struct dentry
*debug_dir
;
81 char name
[EDT_NAME_LEN
];
84 static int edt_ft5x06_ts_readwrite(struct i2c_client
*client
,
85 u16 wr_len
, u8
*wr_buf
,
86 u16 rd_len
, u8
*rd_buf
)
88 struct i2c_msg wrmsg
[2];
93 wrmsg
[i
].addr
= client
->addr
;
95 wrmsg
[i
].len
= wr_len
;
96 wrmsg
[i
].buf
= wr_buf
;
100 wrmsg
[i
].addr
= client
->addr
;
101 wrmsg
[i
].flags
= I2C_M_RD
;
102 wrmsg
[i
].len
= rd_len
;
103 wrmsg
[i
].buf
= rd_buf
;
107 ret
= i2c_transfer(client
->adapter
, wrmsg
, i
);
116 static bool edt_ft5x06_ts_check_crc(struct edt_ft5x06_ts_data
*tsdata
,
122 for (i
= 0; i
< buflen
- 1; i
++)
125 if (crc
!= buf
[buflen
-1]) {
126 dev_err_ratelimited(&tsdata
->client
->dev
,
127 "crc error: 0x%02x expected, got 0x%02x\n",
135 static irqreturn_t
edt_ft5x06_ts_isr(int irq
, void *dev_id
)
137 struct edt_ft5x06_ts_data
*tsdata
= dev_id
;
138 struct device
*dev
= &tsdata
->client
->dev
;
141 int i
, type
, x
, y
, id
;
144 memset(rdbuf
, 0, sizeof(rdbuf
));
146 error
= edt_ft5x06_ts_readwrite(tsdata
->client
,
148 sizeof(rdbuf
), rdbuf
);
150 dev_err_ratelimited(dev
, "Unable to fetch data, error: %d\n",
155 if (rdbuf
[0] != 0xaa || rdbuf
[1] != 0xaa || rdbuf
[2] != 26) {
156 dev_err_ratelimited(dev
, "Unexpected header: %02x%02x%02x!\n",
157 rdbuf
[0], rdbuf
[1], rdbuf
[2]);
161 if (!edt_ft5x06_ts_check_crc(tsdata
, rdbuf
, 26))
164 for (i
= 0; i
< MAX_SUPPORT_POINTS
; i
++) {
165 u8
*buf
= &rdbuf
[i
* 4 + 5];
169 /* ignore Reserved events */
170 if (type
== TOUCH_EVENT_RESERVED
)
173 x
= ((buf
[0] << 8) | buf
[1]) & 0x0fff;
174 y
= ((buf
[2] << 8) | buf
[3]) & 0x0fff;
175 id
= (buf
[2] >> 4) & 0x0f;
176 down
= (type
!= TOUCH_EVENT_UP
);
178 input_mt_slot(tsdata
->input
, id
);
179 input_mt_report_slot_state(tsdata
->input
, MT_TOOL_FINGER
, down
);
184 input_report_abs(tsdata
->input
, ABS_MT_POSITION_X
, x
);
185 input_report_abs(tsdata
->input
, ABS_MT_POSITION_Y
, y
);
188 input_mt_report_pointer_emulation(tsdata
->input
, true);
189 input_sync(tsdata
->input
);
195 static int edt_ft5x06_register_write(struct edt_ft5x06_ts_data
*tsdata
,
200 wrbuf
[0] = tsdata
->factory_mode
? 0xf3 : 0xfc;
201 wrbuf
[1] = tsdata
->factory_mode
? addr
& 0x7f : addr
& 0x3f;
203 wrbuf
[3] = wrbuf
[0] ^ wrbuf
[1] ^ wrbuf
[2];
205 return edt_ft5x06_ts_readwrite(tsdata
->client
, 4, wrbuf
, 0, NULL
);
208 static int edt_ft5x06_register_read(struct edt_ft5x06_ts_data
*tsdata
,
211 u8 wrbuf
[2], rdbuf
[2];
214 wrbuf
[0] = tsdata
->factory_mode
? 0xf3 : 0xfc;
215 wrbuf
[1] = tsdata
->factory_mode
? addr
& 0x7f : addr
& 0x3f;
216 wrbuf
[1] |= tsdata
->factory_mode
? 0x80 : 0x40;
218 error
= edt_ft5x06_ts_readwrite(tsdata
->client
, 2, wrbuf
, 2, rdbuf
);
222 if ((wrbuf
[0] ^ wrbuf
[1] ^ rdbuf
[0]) != rdbuf
[1]) {
223 dev_err(&tsdata
->client
->dev
,
224 "crc error: 0x%02x expected, got 0x%02x\n",
225 wrbuf
[0] ^ wrbuf
[1] ^ rdbuf
[0], rdbuf
[1]);
232 struct edt_ft5x06_attribute
{
233 struct device_attribute dattr
;
240 #define EDT_ATTR(_field, _mode, _addr, _limit_low, _limit_high) \
241 struct edt_ft5x06_attribute edt_ft5x06_attr_##_field = { \
242 .dattr = __ATTR(_field, _mode, \
243 edt_ft5x06_setting_show, \
244 edt_ft5x06_setting_store), \
246 offsetof(struct edt_ft5x06_ts_data, _field), \
247 .limit_low = _limit_low, \
248 .limit_high = _limit_high, \
252 static ssize_t
edt_ft5x06_setting_show(struct device
*dev
,
253 struct device_attribute
*dattr
,
256 struct i2c_client
*client
= to_i2c_client(dev
);
257 struct edt_ft5x06_ts_data
*tsdata
= i2c_get_clientdata(client
);
258 struct edt_ft5x06_attribute
*attr
=
259 container_of(dattr
, struct edt_ft5x06_attribute
, dattr
);
260 u8
*field
= (u8
*)((char *)tsdata
+ attr
->field_offset
);
265 mutex_lock(&tsdata
->mutex
);
267 if (tsdata
->factory_mode
) {
272 val
= edt_ft5x06_register_read(tsdata
, attr
->addr
);
275 dev_err(&tsdata
->client
->dev
,
276 "Failed to fetch attribute %s, error %d\n",
277 dattr
->attr
.name
, error
);
282 dev_warn(&tsdata
->client
->dev
,
283 "%s: read (%d) and stored value (%d) differ\n",
284 dattr
->attr
.name
, val
, *field
);
288 count
= scnprintf(buf
, PAGE_SIZE
, "%d\n", val
);
290 mutex_unlock(&tsdata
->mutex
);
291 return error
?: count
;
294 static ssize_t
edt_ft5x06_setting_store(struct device
*dev
,
295 struct device_attribute
*dattr
,
296 const char *buf
, size_t count
)
298 struct i2c_client
*client
= to_i2c_client(dev
);
299 struct edt_ft5x06_ts_data
*tsdata
= i2c_get_clientdata(client
);
300 struct edt_ft5x06_attribute
*attr
=
301 container_of(dattr
, struct edt_ft5x06_attribute
, dattr
);
302 u8
*field
= (u8
*)((char *)tsdata
+ attr
->field_offset
);
306 mutex_lock(&tsdata
->mutex
);
308 if (tsdata
->factory_mode
) {
313 error
= kstrtouint(buf
, 0, &val
);
317 if (val
< attr
->limit_low
|| val
> attr
->limit_high
) {
322 error
= edt_ft5x06_register_write(tsdata
, attr
->addr
, val
);
324 dev_err(&tsdata
->client
->dev
,
325 "Failed to update attribute %s, error: %d\n",
326 dattr
->attr
.name
, error
);
333 mutex_unlock(&tsdata
->mutex
);
334 return error
?: count
;
337 static EDT_ATTR(gain
, S_IWUSR
| S_IRUGO
, WORK_REGISTER_GAIN
, 0, 31);
338 static EDT_ATTR(offset
, S_IWUSR
| S_IRUGO
, WORK_REGISTER_OFFSET
, 0, 31);
339 static EDT_ATTR(threshold
, S_IWUSR
| S_IRUGO
,
340 WORK_REGISTER_THRESHOLD
, 20, 80);
341 static EDT_ATTR(report_rate
, S_IWUSR
| S_IRUGO
,
342 WORK_REGISTER_REPORT_RATE
, 3, 14);
344 static struct attribute
*edt_ft5x06_attrs
[] = {
345 &edt_ft5x06_attr_gain
.dattr
.attr
,
346 &edt_ft5x06_attr_offset
.dattr
.attr
,
347 &edt_ft5x06_attr_threshold
.dattr
.attr
,
348 &edt_ft5x06_attr_report_rate
.dattr
.attr
,
352 static const struct attribute_group edt_ft5x06_attr_group
= {
353 .attrs
= edt_ft5x06_attrs
,
356 #ifdef CONFIG_DEBUG_FS
357 static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data
*tsdata
)
359 struct i2c_client
*client
= tsdata
->client
;
360 int retries
= EDT_SWITCH_MODE_RETRIES
;
364 disable_irq(client
->irq
);
366 if (!tsdata
->raw_buffer
) {
367 tsdata
->raw_bufsize
= tsdata
->num_x
* tsdata
->num_y
*
369 tsdata
->raw_buffer
= kzalloc(tsdata
->raw_bufsize
, GFP_KERNEL
);
370 if (!tsdata
->raw_buffer
) {
376 /* mode register is 0x3c when in the work mode */
377 error
= edt_ft5x06_register_write(tsdata
, WORK_REGISTER_OPMODE
, 0x03);
379 dev_err(&client
->dev
,
380 "failed to switch to factory mode, error %d\n", error
);
384 tsdata
->factory_mode
= true;
386 mdelay(EDT_SWITCH_MODE_DELAY
);
387 /* mode register is 0x01 when in factory mode */
388 ret
= edt_ft5x06_register_read(tsdata
, FACTORY_REGISTER_OPMODE
);
391 } while (--retries
> 0);
394 dev_err(&client
->dev
, "not in factory mode after %dms.\n",
395 EDT_SWITCH_MODE_RETRIES
* EDT_SWITCH_MODE_DELAY
);
403 kfree(tsdata
->raw_buffer
);
404 tsdata
->raw_buffer
= NULL
;
405 tsdata
->factory_mode
= false;
406 enable_irq(client
->irq
);
411 static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data
*tsdata
)
413 struct i2c_client
*client
= tsdata
->client
;
414 int retries
= EDT_SWITCH_MODE_RETRIES
;
418 /* mode register is 0x01 when in the factory mode */
419 error
= edt_ft5x06_register_write(tsdata
, FACTORY_REGISTER_OPMODE
, 0x1);
421 dev_err(&client
->dev
,
422 "failed to switch to work mode, error: %d\n", error
);
426 tsdata
->factory_mode
= false;
429 mdelay(EDT_SWITCH_MODE_DELAY
);
430 /* mode register is 0x01 when in factory mode */
431 ret
= edt_ft5x06_register_read(tsdata
, WORK_REGISTER_OPMODE
);
434 } while (--retries
> 0);
437 dev_err(&client
->dev
, "not in work mode after %dms.\n",
438 EDT_SWITCH_MODE_RETRIES
* EDT_SWITCH_MODE_DELAY
);
439 tsdata
->factory_mode
= true;
443 kfree(tsdata
->raw_buffer
);
444 tsdata
->raw_buffer
= NULL
;
446 /* restore parameters */
447 edt_ft5x06_register_write(tsdata
, WORK_REGISTER_THRESHOLD
,
449 edt_ft5x06_register_write(tsdata
, WORK_REGISTER_GAIN
,
451 edt_ft5x06_register_write(tsdata
, WORK_REGISTER_OFFSET
,
453 edt_ft5x06_register_write(tsdata
, WORK_REGISTER_REPORT_RATE
,
454 tsdata
->report_rate
);
456 enable_irq(client
->irq
);
461 static int edt_ft5x06_debugfs_mode_get(void *data
, u64
*mode
)
463 struct edt_ft5x06_ts_data
*tsdata
= data
;
465 *mode
= tsdata
->factory_mode
;
470 static int edt_ft5x06_debugfs_mode_set(void *data
, u64 mode
)
472 struct edt_ft5x06_ts_data
*tsdata
= data
;
478 mutex_lock(&tsdata
->mutex
);
480 if (mode
!= tsdata
->factory_mode
) {
481 retval
= mode
? edt_ft5x06_factory_mode(tsdata
) :
482 edt_ft5x06_work_mode(tsdata
);
485 mutex_unlock(&tsdata
->mutex
);
490 DEFINE_SIMPLE_ATTRIBUTE(debugfs_mode_fops
, edt_ft5x06_debugfs_mode_get
,
491 edt_ft5x06_debugfs_mode_set
, "%llu\n");
493 static ssize_t
edt_ft5x06_debugfs_raw_data_read(struct file
*file
,
494 char __user
*buf
, size_t count
, loff_t
*off
)
496 struct edt_ft5x06_ts_data
*tsdata
= file
->private_data
;
497 struct i2c_client
*client
= tsdata
->client
;
498 int retries
= EDT_RAW_DATA_RETRIES
;
505 if (*off
< 0 || *off
>= tsdata
->raw_bufsize
)
508 mutex_lock(&tsdata
->mutex
);
510 if (!tsdata
->factory_mode
|| !tsdata
->raw_buffer
) {
515 error
= edt_ft5x06_register_write(tsdata
, 0x08, 0x01);
517 dev_dbg(&client
->dev
,
518 "failed to write 0x08 register, error %d\n", error
);
523 msleep(EDT_RAW_DATA_DELAY
);
524 val
= edt_ft5x06_register_read(tsdata
, 0x08);
527 } while (--retries
> 0);
531 dev_dbg(&client
->dev
,
532 "failed to read 0x08 register, error %d\n", error
);
537 dev_dbg(&client
->dev
,
538 "timed out waiting for register to settle\n");
543 rdbuf
= tsdata
->raw_buffer
;
544 colbytes
= tsdata
->num_y
* sizeof(u16
);
548 for (i
= 0; i
< tsdata
->num_x
; i
++) {
549 wrbuf
[2] = i
; /* column index */
550 error
= edt_ft5x06_ts_readwrite(tsdata
->client
,
551 sizeof(wrbuf
), wrbuf
,
559 read
= min_t(size_t, count
, tsdata
->raw_bufsize
- *off
);
560 if (copy_to_user(buf
, tsdata
->raw_buffer
+ *off
, read
)) {
567 mutex_unlock(&tsdata
->mutex
);
568 return error
?: read
;
572 static const struct file_operations debugfs_raw_data_fops
= {
574 .read
= edt_ft5x06_debugfs_raw_data_read
,
578 edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data
*tsdata
,
579 const char *debugfs_name
)
581 tsdata
->debug_dir
= debugfs_create_dir(debugfs_name
, NULL
);
582 if (!tsdata
->debug_dir
)
585 debugfs_create_u16("num_x", S_IRUSR
, tsdata
->debug_dir
, &tsdata
->num_x
);
586 debugfs_create_u16("num_y", S_IRUSR
, tsdata
->debug_dir
, &tsdata
->num_y
);
588 debugfs_create_file("mode", S_IRUSR
| S_IWUSR
,
589 tsdata
->debug_dir
, tsdata
, &debugfs_mode_fops
);
590 debugfs_create_file("raw_data", S_IRUSR
,
591 tsdata
->debug_dir
, tsdata
, &debugfs_raw_data_fops
);
595 edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data
*tsdata
)
597 if (tsdata
->debug_dir
)
598 debugfs_remove_recursive(tsdata
->debug_dir
);
599 kfree(tsdata
->raw_buffer
);
605 edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data
*tsdata
,
606 const char *debugfs_name
)
611 edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data
*tsdata
)
615 #endif /* CONFIG_DEBUGFS */
619 static int edt_ft5x06_ts_reset(struct i2c_client
*client
,
624 if (gpio_is_valid(reset_pin
)) {
625 /* this pulls reset down, enabling the low active reset */
626 error
= devm_gpio_request_one(&client
->dev
, reset_pin
,
630 dev_err(&client
->dev
,
631 "Failed to request GPIO %d as reset pin, error %d\n",
637 gpio_set_value(reset_pin
, 1);
644 static int edt_ft5x06_ts_identify(struct i2c_client
*client
,
648 u8 rdbuf
[EDT_NAME_LEN
];
652 error
= edt_ft5x06_ts_readwrite(client
, 1, "\xbb",
653 EDT_NAME_LEN
- 1, rdbuf
);
657 /* remove last '$' end marker */
658 rdbuf
[EDT_NAME_LEN
- 1] = '\0';
659 if (rdbuf
[EDT_NAME_LEN
- 2] == '$')
660 rdbuf
[EDT_NAME_LEN
- 2] = '\0';
662 /* look for Model/Version separator */
663 p
= strchr(rdbuf
, '*');
667 strlcpy(model_name
, rdbuf
+ 1, EDT_NAME_LEN
);
668 strlcpy(fw_version
, p
? p
: "", EDT_NAME_LEN
);
673 #define EDT_ATTR_CHECKSET(name, reg) \
674 if (pdata->name >= edt_ft5x06_attr_##name.limit_low && \
675 pdata->name <= edt_ft5x06_attr_##name.limit_high) \
676 edt_ft5x06_register_write(tsdata, reg, pdata->name)
679 edt_ft5x06_ts_get_defaults(struct edt_ft5x06_ts_data
*tsdata
,
680 const struct edt_ft5x06_platform_data
*pdata
)
682 if (!pdata
->use_parameters
)
685 /* pick up defaults from the platform data */
686 EDT_ATTR_CHECKSET(threshold
, WORK_REGISTER_THRESHOLD
);
687 EDT_ATTR_CHECKSET(gain
, WORK_REGISTER_GAIN
);
688 EDT_ATTR_CHECKSET(offset
, WORK_REGISTER_OFFSET
);
689 EDT_ATTR_CHECKSET(report_rate
, WORK_REGISTER_REPORT_RATE
);
693 edt_ft5x06_ts_get_parameters(struct edt_ft5x06_ts_data
*tsdata
)
695 tsdata
->threshold
= edt_ft5x06_register_read(tsdata
,
696 WORK_REGISTER_THRESHOLD
);
697 tsdata
->gain
= edt_ft5x06_register_read(tsdata
, WORK_REGISTER_GAIN
);
698 tsdata
->offset
= edt_ft5x06_register_read(tsdata
, WORK_REGISTER_OFFSET
);
699 tsdata
->report_rate
= edt_ft5x06_register_read(tsdata
,
700 WORK_REGISTER_REPORT_RATE
);
701 tsdata
->num_x
= edt_ft5x06_register_read(tsdata
, WORK_REGISTER_NUM_X
);
702 tsdata
->num_y
= edt_ft5x06_register_read(tsdata
, WORK_REGISTER_NUM_Y
);
705 static int edt_ft5x06_ts_probe(struct i2c_client
*client
,
706 const struct i2c_device_id
*id
)
708 const struct edt_ft5x06_platform_data
*pdata
=
709 dev_get_platdata(&client
->dev
);
710 struct edt_ft5x06_ts_data
*tsdata
;
711 struct input_dev
*input
;
713 char fw_version
[EDT_NAME_LEN
];
715 dev_dbg(&client
->dev
, "probing for EDT FT5x06 I2C\n");
718 dev_err(&client
->dev
, "no platform data?\n");
722 error
= edt_ft5x06_ts_reset(client
, pdata
->reset_pin
);
726 if (gpio_is_valid(pdata
->irq_pin
)) {
727 error
= devm_gpio_request_one(&client
->dev
, pdata
->irq_pin
,
728 GPIOF_IN
, "edt-ft5x06 irq");
730 dev_err(&client
->dev
,
731 "Failed to request GPIO %d, error %d\n",
732 pdata
->irq_pin
, error
);
737 tsdata
= devm_kzalloc(&client
->dev
, sizeof(*tsdata
), GFP_KERNEL
);
739 dev_err(&client
->dev
, "failed to allocate driver data.\n");
743 input
= devm_input_allocate_device(&client
->dev
);
745 dev_err(&client
->dev
, "failed to allocate input device.\n");
749 mutex_init(&tsdata
->mutex
);
750 tsdata
->client
= client
;
751 tsdata
->input
= input
;
752 tsdata
->factory_mode
= false;
754 error
= edt_ft5x06_ts_identify(client
, tsdata
->name
, fw_version
);
756 dev_err(&client
->dev
, "touchscreen probe failed\n");
760 edt_ft5x06_ts_get_defaults(tsdata
, pdata
);
761 edt_ft5x06_ts_get_parameters(tsdata
);
763 dev_dbg(&client
->dev
,
764 "Model \"%s\", Rev. \"%s\", %dx%d sensors\n",
765 tsdata
->name
, fw_version
, tsdata
->num_x
, tsdata
->num_y
);
767 input
->name
= tsdata
->name
;
768 input
->id
.bustype
= BUS_I2C
;
769 input
->dev
.parent
= &client
->dev
;
771 __set_bit(EV_SYN
, input
->evbit
);
772 __set_bit(EV_KEY
, input
->evbit
);
773 __set_bit(EV_ABS
, input
->evbit
);
774 __set_bit(BTN_TOUCH
, input
->keybit
);
775 input_set_abs_params(input
, ABS_X
, 0, tsdata
->num_x
* 64 - 1, 0, 0);
776 input_set_abs_params(input
, ABS_Y
, 0, tsdata
->num_y
* 64 - 1, 0, 0);
777 input_set_abs_params(input
, ABS_MT_POSITION_X
,
778 0, tsdata
->num_x
* 64 - 1, 0, 0);
779 input_set_abs_params(input
, ABS_MT_POSITION_Y
,
780 0, tsdata
->num_y
* 64 - 1, 0, 0);
781 error
= input_mt_init_slots(input
, MAX_SUPPORT_POINTS
, 0);
783 dev_err(&client
->dev
, "Unable to init MT slots.\n");
787 input_set_drvdata(input
, tsdata
);
788 i2c_set_clientdata(client
, tsdata
);
790 error
= devm_request_threaded_irq(&client
->dev
, client
->irq
,
791 NULL
, edt_ft5x06_ts_isr
,
792 IRQF_TRIGGER_FALLING
| IRQF_ONESHOT
,
793 client
->name
, tsdata
);
795 dev_err(&client
->dev
, "Unable to request touchscreen IRQ.\n");
799 error
= sysfs_create_group(&client
->dev
.kobj
, &edt_ft5x06_attr_group
);
803 error
= input_register_device(input
);
805 sysfs_remove_group(&client
->dev
.kobj
, &edt_ft5x06_attr_group
);
809 edt_ft5x06_ts_prepare_debugfs(tsdata
, dev_driver_string(&client
->dev
));
810 device_init_wakeup(&client
->dev
, 1);
812 dev_dbg(&client
->dev
,
813 "EDT FT5x06 initialized: IRQ pin %d, Reset pin %d.\n",
814 pdata
->irq_pin
, pdata
->reset_pin
);
819 static int edt_ft5x06_ts_remove(struct i2c_client
*client
)
821 struct edt_ft5x06_ts_data
*tsdata
= i2c_get_clientdata(client
);
823 edt_ft5x06_ts_teardown_debugfs(tsdata
);
824 sysfs_remove_group(&client
->dev
.kobj
, &edt_ft5x06_attr_group
);
829 #ifdef CONFIG_PM_SLEEP
830 static int edt_ft5x06_ts_suspend(struct device
*dev
)
832 struct i2c_client
*client
= to_i2c_client(dev
);
834 if (device_may_wakeup(dev
))
835 enable_irq_wake(client
->irq
);
840 static int edt_ft5x06_ts_resume(struct device
*dev
)
842 struct i2c_client
*client
= to_i2c_client(dev
);
844 if (device_may_wakeup(dev
))
845 disable_irq_wake(client
->irq
);
851 static SIMPLE_DEV_PM_OPS(edt_ft5x06_ts_pm_ops
,
852 edt_ft5x06_ts_suspend
, edt_ft5x06_ts_resume
);
854 static const struct i2c_device_id edt_ft5x06_ts_id
[] = {
858 MODULE_DEVICE_TABLE(i2c
, edt_ft5x06_ts_id
);
860 static struct i2c_driver edt_ft5x06_ts_driver
= {
862 .owner
= THIS_MODULE
,
863 .name
= "edt_ft5x06",
864 .pm
= &edt_ft5x06_ts_pm_ops
,
866 .id_table
= edt_ft5x06_ts_id
,
867 .probe
= edt_ft5x06_ts_probe
,
868 .remove
= edt_ft5x06_ts_remove
,
871 module_i2c_driver(edt_ft5x06_ts_driver
);
873 MODULE_AUTHOR("Simon Budig <simon.budig@kernelconcepts.de>");
874 MODULE_DESCRIPTION("EDT FT5x06 I2C Touchscreen Driver");
875 MODULE_LICENSE("GPL");