xref: /linux/drivers/input/touchscreen/edt-ft5x06.c (revision 3503d56cc7233ced602e38a4c13caa64f00ab2aa)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2012 Simon Budig, <simon.budig@kernelconcepts.de>
4  * Daniel Wagener <daniel.wagener@kernelconcepts.de> (M09 firmware support)
5  * Lothar Waßmann <LW@KARO-electronics.de> (DT support)
6  */
7 
8 /*
9  * This is a driver for the EDT "Polytouch" family of touch controllers
10  * based on the FocalTech FT5x06 line of chips.
11  *
12  * Development of this driver has been sponsored by Glyn:
13  *    http://www.glyn.com/Products/Displays
14  */
15 
16 #include <linux/debugfs.h>
17 #include <linux/delay.h>
18 #include <linux/gpio/consumer.h>
19 #include <linux/i2c.h>
20 #include <linux/interrupt.h>
21 #include <linux/input.h>
22 #include <linux/input/mt.h>
23 #include <linux/input/touchscreen.h>
24 #include <linux/irq.h>
25 #include <linux/kernel.h>
26 #include <linux/module.h>
27 #include <linux/ratelimit.h>
28 #include <linux/regulator/consumer.h>
29 #include <linux/slab.h>
30 #include <linux/uaccess.h>
31 
32 #include <asm/unaligned.h>
33 
34 #define WORK_REGISTER_THRESHOLD		0x00
35 #define WORK_REGISTER_REPORT_RATE	0x08
36 #define WORK_REGISTER_GAIN		0x30
37 #define WORK_REGISTER_OFFSET		0x31
38 #define WORK_REGISTER_NUM_X		0x33
39 #define WORK_REGISTER_NUM_Y		0x34
40 
41 #define PMOD_REGISTER_ACTIVE		0x00
42 #define PMOD_REGISTER_HIBERNATE		0x03
43 
44 #define M09_REGISTER_THRESHOLD		0x80
45 #define M09_REGISTER_GAIN		0x92
46 #define M09_REGISTER_OFFSET		0x93
47 #define M09_REGISTER_NUM_X		0x94
48 #define M09_REGISTER_NUM_Y		0x95
49 
50 #define EV_REGISTER_THRESHOLD		0x40
51 #define EV_REGISTER_GAIN		0x41
52 #define EV_REGISTER_OFFSET_Y		0x45
53 #define EV_REGISTER_OFFSET_X		0x46
54 
55 #define NO_REGISTER			0xff
56 
57 #define WORK_REGISTER_OPMODE		0x3c
58 #define FACTORY_REGISTER_OPMODE		0x01
59 #define PMOD_REGISTER_OPMODE		0xa5
60 
61 #define TOUCH_EVENT_DOWN		0x00
62 #define TOUCH_EVENT_UP			0x01
63 #define TOUCH_EVENT_ON			0x02
64 #define TOUCH_EVENT_RESERVED		0x03
65 
66 #define EDT_NAME_LEN			23
67 #define EDT_SWITCH_MODE_RETRIES		10
68 #define EDT_SWITCH_MODE_DELAY		5 /* msec */
69 #define EDT_RAW_DATA_RETRIES		100
70 #define EDT_RAW_DATA_DELAY		1000 /* usec */
71 
72 enum edt_pmode {
73 	EDT_PMODE_NOT_SUPPORTED,
74 	EDT_PMODE_HIBERNATE,
75 	EDT_PMODE_POWEROFF,
76 };
77 
78 enum edt_ver {
79 	EDT_M06,
80 	EDT_M09,
81 	EDT_M12,
82 	EV_FT,
83 	GENERIC_FT,
84 };
85 
86 struct edt_reg_addr {
87 	int reg_threshold;
88 	int reg_report_rate;
89 	int reg_gain;
90 	int reg_offset;
91 	int reg_offset_x;
92 	int reg_offset_y;
93 	int reg_num_x;
94 	int reg_num_y;
95 };
96 
97 struct edt_ft5x06_ts_data {
98 	struct i2c_client *client;
99 	struct input_dev *input;
100 	struct touchscreen_properties prop;
101 	u16 num_x;
102 	u16 num_y;
103 	struct regulator *vcc;
104 
105 	struct gpio_desc *reset_gpio;
106 	struct gpio_desc *wake_gpio;
107 
108 #if defined(CONFIG_DEBUG_FS)
109 	struct dentry *debug_dir;
110 	u8 *raw_buffer;
111 	size_t raw_bufsize;
112 #endif
113 
114 	struct mutex mutex;
115 	bool factory_mode;
116 	enum edt_pmode suspend_mode;
117 	int threshold;
118 	int gain;
119 	int offset;
120 	int offset_x;
121 	int offset_y;
122 	int report_rate;
123 	int max_support_points;
124 
125 	char name[EDT_NAME_LEN];
126 
127 	struct edt_reg_addr reg_addr;
128 	enum edt_ver version;
129 };
130 
131 struct edt_i2c_chip_data {
132 	int  max_support_points;
133 };
134 
135 static int edt_ft5x06_ts_readwrite(struct i2c_client *client,
136 				   u16 wr_len, u8 *wr_buf,
137 				   u16 rd_len, u8 *rd_buf)
138 {
139 	struct i2c_msg wrmsg[2];
140 	int i = 0;
141 	int ret;
142 
143 	if (wr_len) {
144 		wrmsg[i].addr  = client->addr;
145 		wrmsg[i].flags = 0;
146 		wrmsg[i].len = wr_len;
147 		wrmsg[i].buf = wr_buf;
148 		i++;
149 	}
150 	if (rd_len) {
151 		wrmsg[i].addr  = client->addr;
152 		wrmsg[i].flags = I2C_M_RD;
153 		wrmsg[i].len = rd_len;
154 		wrmsg[i].buf = rd_buf;
155 		i++;
156 	}
157 
158 	ret = i2c_transfer(client->adapter, wrmsg, i);
159 	if (ret < 0)
160 		return ret;
161 	if (ret != i)
162 		return -EIO;
163 
164 	return 0;
165 }
166 
167 static bool edt_ft5x06_ts_check_crc(struct edt_ft5x06_ts_data *tsdata,
168 				    u8 *buf, int buflen)
169 {
170 	int i;
171 	u8 crc = 0;
172 
173 	for (i = 0; i < buflen - 1; i++)
174 		crc ^= buf[i];
175 
176 	if (crc != buf[buflen-1]) {
177 		dev_err_ratelimited(&tsdata->client->dev,
178 				    "crc error: 0x%02x expected, got 0x%02x\n",
179 				    crc, buf[buflen-1]);
180 		return false;
181 	}
182 
183 	return true;
184 }
185 
186 static irqreturn_t edt_ft5x06_ts_isr(int irq, void *dev_id)
187 {
188 	struct edt_ft5x06_ts_data *tsdata = dev_id;
189 	struct device *dev = &tsdata->client->dev;
190 	u8 cmd;
191 	u8 rdbuf[63];
192 	int i, type, x, y, id;
193 	int offset, tplen, datalen, crclen;
194 	int error;
195 
196 	switch (tsdata->version) {
197 	case EDT_M06:
198 		cmd = 0xf9; /* tell the controller to send touch data */
199 		offset = 5; /* where the actual touch data starts */
200 		tplen = 4;  /* data comes in so called frames */
201 		crclen = 1; /* length of the crc data */
202 		break;
203 
204 	case EDT_M09:
205 	case EDT_M12:
206 	case EV_FT:
207 	case GENERIC_FT:
208 		cmd = 0x0;
209 		offset = 3;
210 		tplen = 6;
211 		crclen = 0;
212 		break;
213 
214 	default:
215 		goto out;
216 	}
217 
218 	memset(rdbuf, 0, sizeof(rdbuf));
219 	datalen = tplen * tsdata->max_support_points + offset + crclen;
220 
221 	error = edt_ft5x06_ts_readwrite(tsdata->client,
222 					sizeof(cmd), &cmd,
223 					datalen, rdbuf);
224 	if (error) {
225 		dev_err_ratelimited(dev, "Unable to fetch data, error: %d\n",
226 				    error);
227 		goto out;
228 	}
229 
230 	/* M09/M12 does not send header or CRC */
231 	if (tsdata->version == EDT_M06) {
232 		if (rdbuf[0] != 0xaa || rdbuf[1] != 0xaa ||
233 			rdbuf[2] != datalen) {
234 			dev_err_ratelimited(dev,
235 					"Unexpected header: %02x%02x%02x!\n",
236 					rdbuf[0], rdbuf[1], rdbuf[2]);
237 			goto out;
238 		}
239 
240 		if (!edt_ft5x06_ts_check_crc(tsdata, rdbuf, datalen))
241 			goto out;
242 	}
243 
244 	for (i = 0; i < tsdata->max_support_points; i++) {
245 		u8 *buf = &rdbuf[i * tplen + offset];
246 
247 		type = buf[0] >> 6;
248 		/* ignore Reserved events */
249 		if (type == TOUCH_EVENT_RESERVED)
250 			continue;
251 
252 		/* M06 sometimes sends bogus coordinates in TOUCH_DOWN */
253 		if (tsdata->version == EDT_M06 && type == TOUCH_EVENT_DOWN)
254 			continue;
255 
256 		x = get_unaligned_be16(buf) & 0x0fff;
257 		y = get_unaligned_be16(buf + 2) & 0x0fff;
258 		/* The FT5x26 send the y coordinate first */
259 		if (tsdata->version == EV_FT)
260 			swap(x, y);
261 
262 		id = (buf[2] >> 4) & 0x0f;
263 
264 		input_mt_slot(tsdata->input, id);
265 		if (input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER,
266 					       type != TOUCH_EVENT_UP))
267 			touchscreen_report_pos(tsdata->input, &tsdata->prop,
268 					       x, y, true);
269 	}
270 
271 	input_mt_report_pointer_emulation(tsdata->input, true);
272 	input_sync(tsdata->input);
273 
274 out:
275 	return IRQ_HANDLED;
276 }
277 
278 static int edt_ft5x06_register_write(struct edt_ft5x06_ts_data *tsdata,
279 				     u8 addr, u8 value)
280 {
281 	u8 wrbuf[4];
282 
283 	switch (tsdata->version) {
284 	case EDT_M06:
285 		wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
286 		wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
287 		wrbuf[2] = value;
288 		wrbuf[3] = wrbuf[0] ^ wrbuf[1] ^ wrbuf[2];
289 		return edt_ft5x06_ts_readwrite(tsdata->client, 4,
290 					wrbuf, 0, NULL);
291 	/* fallthrough */
292 	case EDT_M09:
293 	case EDT_M12:
294 	case EV_FT:
295 	case GENERIC_FT:
296 		wrbuf[0] = addr;
297 		wrbuf[1] = value;
298 
299 		return edt_ft5x06_ts_readwrite(tsdata->client, 2,
300 					wrbuf, 0, NULL);
301 
302 	default:
303 		return -EINVAL;
304 	}
305 }
306 
307 static int edt_ft5x06_register_read(struct edt_ft5x06_ts_data *tsdata,
308 				    u8 addr)
309 {
310 	u8 wrbuf[2], rdbuf[2];
311 	int error;
312 
313 	switch (tsdata->version) {
314 	case EDT_M06:
315 		wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
316 		wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
317 		wrbuf[1] |= tsdata->factory_mode ? 0x80 : 0x40;
318 
319 		error = edt_ft5x06_ts_readwrite(tsdata->client, 2, wrbuf, 2,
320 						rdbuf);
321 		if (error)
322 			return error;
323 
324 		if ((wrbuf[0] ^ wrbuf[1] ^ rdbuf[0]) != rdbuf[1]) {
325 			dev_err(&tsdata->client->dev,
326 				"crc error: 0x%02x expected, got 0x%02x\n",
327 				wrbuf[0] ^ wrbuf[1] ^ rdbuf[0],
328 				rdbuf[1]);
329 			return -EIO;
330 		}
331 		break;
332 
333 	/* fallthrough */
334 	case EDT_M09:
335 	case EDT_M12:
336 	case EV_FT:
337 	case GENERIC_FT:
338 		wrbuf[0] = addr;
339 		error = edt_ft5x06_ts_readwrite(tsdata->client, 1,
340 						wrbuf, 1, rdbuf);
341 		if (error)
342 			return error;
343 		break;
344 
345 	default:
346 		return -EINVAL;
347 	}
348 
349 	return rdbuf[0];
350 }
351 
352 struct edt_ft5x06_attribute {
353 	struct device_attribute dattr;
354 	size_t field_offset;
355 	u8 limit_low;
356 	u8 limit_high;
357 	u8 addr_m06;
358 	u8 addr_m09;
359 	u8 addr_ev;
360 };
361 
362 #define EDT_ATTR(_field, _mode, _addr_m06, _addr_m09, _addr_ev,		\
363 		_limit_low, _limit_high)				\
364 	struct edt_ft5x06_attribute edt_ft5x06_attr_##_field = {	\
365 		.dattr = __ATTR(_field, _mode,				\
366 				edt_ft5x06_setting_show,		\
367 				edt_ft5x06_setting_store),		\
368 		.field_offset = offsetof(struct edt_ft5x06_ts_data, _field), \
369 		.addr_m06 = _addr_m06,					\
370 		.addr_m09 = _addr_m09,					\
371 		.addr_ev  = _addr_ev,					\
372 		.limit_low = _limit_low,				\
373 		.limit_high = _limit_high,				\
374 	}
375 
376 static ssize_t edt_ft5x06_setting_show(struct device *dev,
377 				       struct device_attribute *dattr,
378 				       char *buf)
379 {
380 	struct i2c_client *client = to_i2c_client(dev);
381 	struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
382 	struct edt_ft5x06_attribute *attr =
383 			container_of(dattr, struct edt_ft5x06_attribute, dattr);
384 	u8 *field = (u8 *)tsdata + attr->field_offset;
385 	int val;
386 	size_t count = 0;
387 	int error = 0;
388 	u8 addr;
389 
390 	mutex_lock(&tsdata->mutex);
391 
392 	if (tsdata->factory_mode) {
393 		error = -EIO;
394 		goto out;
395 	}
396 
397 	switch (tsdata->version) {
398 	case EDT_M06:
399 		addr = attr->addr_m06;
400 		break;
401 
402 	case EDT_M09:
403 	case EDT_M12:
404 	case GENERIC_FT:
405 		addr = attr->addr_m09;
406 		break;
407 
408 	case EV_FT:
409 		addr = attr->addr_ev;
410 		break;
411 
412 	default:
413 		error = -ENODEV;
414 		goto out;
415 	}
416 
417 	if (addr != NO_REGISTER) {
418 		val = edt_ft5x06_register_read(tsdata, addr);
419 		if (val < 0) {
420 			error = val;
421 			dev_err(&tsdata->client->dev,
422 				"Failed to fetch attribute %s, error %d\n",
423 				dattr->attr.name, error);
424 			goto out;
425 		}
426 	} else {
427 		val = *field;
428 	}
429 
430 	if (val != *field) {
431 		dev_warn(&tsdata->client->dev,
432 			 "%s: read (%d) and stored value (%d) differ\n",
433 			 dattr->attr.name, val, *field);
434 		*field = val;
435 	}
436 
437 	count = scnprintf(buf, PAGE_SIZE, "%d\n", val);
438 out:
439 	mutex_unlock(&tsdata->mutex);
440 	return error ?: count;
441 }
442 
443 static ssize_t edt_ft5x06_setting_store(struct device *dev,
444 					struct device_attribute *dattr,
445 					const char *buf, size_t count)
446 {
447 	struct i2c_client *client = to_i2c_client(dev);
448 	struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
449 	struct edt_ft5x06_attribute *attr =
450 			container_of(dattr, struct edt_ft5x06_attribute, dattr);
451 	u8 *field = (u8 *)tsdata + attr->field_offset;
452 	unsigned int val;
453 	int error;
454 	u8 addr;
455 
456 	mutex_lock(&tsdata->mutex);
457 
458 	if (tsdata->factory_mode) {
459 		error = -EIO;
460 		goto out;
461 	}
462 
463 	error = kstrtouint(buf, 0, &val);
464 	if (error)
465 		goto out;
466 
467 	if (val < attr->limit_low || val > attr->limit_high) {
468 		error = -ERANGE;
469 		goto out;
470 	}
471 
472 	switch (tsdata->version) {
473 	case EDT_M06:
474 		addr = attr->addr_m06;
475 		break;
476 
477 	case EDT_M09:
478 	case EDT_M12:
479 	case GENERIC_FT:
480 		addr = attr->addr_m09;
481 		break;
482 
483 	case EV_FT:
484 		addr = attr->addr_ev;
485 		break;
486 
487 	default:
488 		error = -ENODEV;
489 		goto out;
490 	}
491 
492 	if (addr != NO_REGISTER) {
493 		error = edt_ft5x06_register_write(tsdata, addr, val);
494 		if (error) {
495 			dev_err(&tsdata->client->dev,
496 				"Failed to update attribute %s, error: %d\n",
497 				dattr->attr.name, error);
498 			goto out;
499 		}
500 	}
501 	*field = val;
502 
503 out:
504 	mutex_unlock(&tsdata->mutex);
505 	return error ?: count;
506 }
507 
508 /* m06, m09: range 0-31, m12: range 0-5 */
509 static EDT_ATTR(gain, S_IWUSR | S_IRUGO, WORK_REGISTER_GAIN,
510 		M09_REGISTER_GAIN, EV_REGISTER_GAIN, 0, 31);
511 /* m06, m09: range 0-31, m12: range 0-16 */
512 static EDT_ATTR(offset, S_IWUSR | S_IRUGO, WORK_REGISTER_OFFSET,
513 		M09_REGISTER_OFFSET, NO_REGISTER, 0, 31);
514 /* m06, m09, m12: no supported, ev_ft: range 0-80 */
515 static EDT_ATTR(offset_x, S_IWUSR | S_IRUGO, NO_REGISTER, NO_REGISTER,
516 		EV_REGISTER_OFFSET_X, 0, 80);
517 /* m06, m09, m12: no supported, ev_ft: range 0-80 */
518 static EDT_ATTR(offset_y, S_IWUSR | S_IRUGO, NO_REGISTER, NO_REGISTER,
519 		EV_REGISTER_OFFSET_Y, 0, 80);
520 /* m06: range 20 to 80, m09: range 0 to 30, m12: range 1 to 255... */
521 static EDT_ATTR(threshold, S_IWUSR | S_IRUGO, WORK_REGISTER_THRESHOLD,
522 		M09_REGISTER_THRESHOLD, EV_REGISTER_THRESHOLD, 0, 255);
523 /* m06: range 3 to 14, m12: (0x64: 100Hz) */
524 static EDT_ATTR(report_rate, S_IWUSR | S_IRUGO, WORK_REGISTER_REPORT_RATE,
525 		NO_REGISTER, NO_REGISTER, 0, 255);
526 
527 static struct attribute *edt_ft5x06_attrs[] = {
528 	&edt_ft5x06_attr_gain.dattr.attr,
529 	&edt_ft5x06_attr_offset.dattr.attr,
530 	&edt_ft5x06_attr_offset_x.dattr.attr,
531 	&edt_ft5x06_attr_offset_y.dattr.attr,
532 	&edt_ft5x06_attr_threshold.dattr.attr,
533 	&edt_ft5x06_attr_report_rate.dattr.attr,
534 	NULL
535 };
536 
537 static const struct attribute_group edt_ft5x06_attr_group = {
538 	.attrs = edt_ft5x06_attrs,
539 };
540 
541 static void edt_ft5x06_restore_reg_parameters(struct edt_ft5x06_ts_data *tsdata)
542 {
543 	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
544 
545 	edt_ft5x06_register_write(tsdata, reg_addr->reg_threshold,
546 				  tsdata->threshold);
547 	edt_ft5x06_register_write(tsdata, reg_addr->reg_gain,
548 				  tsdata->gain);
549 	if (reg_addr->reg_offset != NO_REGISTER)
550 		edt_ft5x06_register_write(tsdata, reg_addr->reg_offset,
551 					  tsdata->offset);
552 	if (reg_addr->reg_offset_x != NO_REGISTER)
553 		edt_ft5x06_register_write(tsdata, reg_addr->reg_offset_x,
554 					  tsdata->offset_x);
555 	if (reg_addr->reg_offset_y != NO_REGISTER)
556 		edt_ft5x06_register_write(tsdata, reg_addr->reg_offset_y,
557 					  tsdata->offset_y);
558 	if (reg_addr->reg_report_rate != NO_REGISTER)
559 		edt_ft5x06_register_write(tsdata, reg_addr->reg_report_rate,
560 				  tsdata->report_rate);
561 
562 }
563 
564 #ifdef CONFIG_DEBUG_FS
565 static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
566 {
567 	struct i2c_client *client = tsdata->client;
568 	int retries = EDT_SWITCH_MODE_RETRIES;
569 	int ret;
570 	int error;
571 
572 	if (tsdata->version != EDT_M06) {
573 		dev_err(&client->dev,
574 			"No factory mode support for non-M06 devices\n");
575 		return -EINVAL;
576 	}
577 
578 	disable_irq(client->irq);
579 
580 	if (!tsdata->raw_buffer) {
581 		tsdata->raw_bufsize = tsdata->num_x * tsdata->num_y *
582 				      sizeof(u16);
583 		tsdata->raw_buffer = kzalloc(tsdata->raw_bufsize, GFP_KERNEL);
584 		if (!tsdata->raw_buffer) {
585 			error = -ENOMEM;
586 			goto err_out;
587 		}
588 	}
589 
590 	/* mode register is 0x3c when in the work mode */
591 	error = edt_ft5x06_register_write(tsdata, WORK_REGISTER_OPMODE, 0x03);
592 	if (error) {
593 		dev_err(&client->dev,
594 			"failed to switch to factory mode, error %d\n", error);
595 		goto err_out;
596 	}
597 
598 	tsdata->factory_mode = true;
599 	do {
600 		mdelay(EDT_SWITCH_MODE_DELAY);
601 		/* mode register is 0x01 when in factory mode */
602 		ret = edt_ft5x06_register_read(tsdata, FACTORY_REGISTER_OPMODE);
603 		if (ret == 0x03)
604 			break;
605 	} while (--retries > 0);
606 
607 	if (retries == 0) {
608 		dev_err(&client->dev, "not in factory mode after %dms.\n",
609 			EDT_SWITCH_MODE_RETRIES * EDT_SWITCH_MODE_DELAY);
610 		error = -EIO;
611 		goto err_out;
612 	}
613 
614 	return 0;
615 
616 err_out:
617 	kfree(tsdata->raw_buffer);
618 	tsdata->raw_buffer = NULL;
619 	tsdata->factory_mode = false;
620 	enable_irq(client->irq);
621 
622 	return error;
623 }
624 
625 static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata)
626 {
627 	struct i2c_client *client = tsdata->client;
628 	int retries = EDT_SWITCH_MODE_RETRIES;
629 	int ret;
630 	int error;
631 
632 	/* mode register is 0x01 when in the factory mode */
633 	error = edt_ft5x06_register_write(tsdata, FACTORY_REGISTER_OPMODE, 0x1);
634 	if (error) {
635 		dev_err(&client->dev,
636 			"failed to switch to work mode, error: %d\n", error);
637 		return error;
638 	}
639 
640 	tsdata->factory_mode = false;
641 
642 	do {
643 		mdelay(EDT_SWITCH_MODE_DELAY);
644 		/* mode register is 0x01 when in factory mode */
645 		ret = edt_ft5x06_register_read(tsdata, WORK_REGISTER_OPMODE);
646 		if (ret == 0x01)
647 			break;
648 	} while (--retries > 0);
649 
650 	if (retries == 0) {
651 		dev_err(&client->dev, "not in work mode after %dms.\n",
652 			EDT_SWITCH_MODE_RETRIES * EDT_SWITCH_MODE_DELAY);
653 		tsdata->factory_mode = true;
654 		return -EIO;
655 	}
656 
657 	kfree(tsdata->raw_buffer);
658 	tsdata->raw_buffer = NULL;
659 
660 	edt_ft5x06_restore_reg_parameters(tsdata);
661 	enable_irq(client->irq);
662 
663 	return 0;
664 }
665 
666 static int edt_ft5x06_debugfs_mode_get(void *data, u64 *mode)
667 {
668 	struct edt_ft5x06_ts_data *tsdata = data;
669 
670 	*mode = tsdata->factory_mode;
671 
672 	return 0;
673 };
674 
675 static int edt_ft5x06_debugfs_mode_set(void *data, u64 mode)
676 {
677 	struct edt_ft5x06_ts_data *tsdata = data;
678 	int retval = 0;
679 
680 	if (mode > 1)
681 		return -ERANGE;
682 
683 	mutex_lock(&tsdata->mutex);
684 
685 	if (mode != tsdata->factory_mode) {
686 		retval = mode ? edt_ft5x06_factory_mode(tsdata) :
687 				edt_ft5x06_work_mode(tsdata);
688 	}
689 
690 	mutex_unlock(&tsdata->mutex);
691 
692 	return retval;
693 };
694 
695 DEFINE_SIMPLE_ATTRIBUTE(debugfs_mode_fops, edt_ft5x06_debugfs_mode_get,
696 			edt_ft5x06_debugfs_mode_set, "%llu\n");
697 
698 static ssize_t edt_ft5x06_debugfs_raw_data_read(struct file *file,
699 				char __user *buf, size_t count, loff_t *off)
700 {
701 	struct edt_ft5x06_ts_data *tsdata = file->private_data;
702 	struct i2c_client *client = tsdata->client;
703 	int retries  = EDT_RAW_DATA_RETRIES;
704 	int val, i, error;
705 	size_t read = 0;
706 	int colbytes;
707 	char wrbuf[3];
708 	u8 *rdbuf;
709 
710 	if (*off < 0 || *off >= tsdata->raw_bufsize)
711 		return 0;
712 
713 	mutex_lock(&tsdata->mutex);
714 
715 	if (!tsdata->factory_mode || !tsdata->raw_buffer) {
716 		error = -EIO;
717 		goto out;
718 	}
719 
720 	error = edt_ft5x06_register_write(tsdata, 0x08, 0x01);
721 	if (error) {
722 		dev_dbg(&client->dev,
723 			"failed to write 0x08 register, error %d\n", error);
724 		goto out;
725 	}
726 
727 	do {
728 		usleep_range(EDT_RAW_DATA_DELAY, EDT_RAW_DATA_DELAY + 100);
729 		val = edt_ft5x06_register_read(tsdata, 0x08);
730 		if (val < 1)
731 			break;
732 	} while (--retries > 0);
733 
734 	if (val < 0) {
735 		error = val;
736 		dev_dbg(&client->dev,
737 			"failed to read 0x08 register, error %d\n", error);
738 		goto out;
739 	}
740 
741 	if (retries == 0) {
742 		dev_dbg(&client->dev,
743 			"timed out waiting for register to settle\n");
744 		error = -ETIMEDOUT;
745 		goto out;
746 	}
747 
748 	rdbuf = tsdata->raw_buffer;
749 	colbytes = tsdata->num_y * sizeof(u16);
750 
751 	wrbuf[0] = 0xf5;
752 	wrbuf[1] = 0x0e;
753 	for (i = 0; i < tsdata->num_x; i++) {
754 		wrbuf[2] = i;  /* column index */
755 		error = edt_ft5x06_ts_readwrite(tsdata->client,
756 						sizeof(wrbuf), wrbuf,
757 						colbytes, rdbuf);
758 		if (error)
759 			goto out;
760 
761 		rdbuf += colbytes;
762 	}
763 
764 	read = min_t(size_t, count, tsdata->raw_bufsize - *off);
765 	if (copy_to_user(buf, tsdata->raw_buffer + *off, read)) {
766 		error = -EFAULT;
767 		goto out;
768 	}
769 
770 	*off += read;
771 out:
772 	mutex_unlock(&tsdata->mutex);
773 	return error ?: read;
774 };
775 
776 static const struct file_operations debugfs_raw_data_fops = {
777 	.open = simple_open,
778 	.read = edt_ft5x06_debugfs_raw_data_read,
779 };
780 
781 static void edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
782 					  const char *debugfs_name)
783 {
784 	tsdata->debug_dir = debugfs_create_dir(debugfs_name, NULL);
785 
786 	debugfs_create_u16("num_x", S_IRUSR, tsdata->debug_dir, &tsdata->num_x);
787 	debugfs_create_u16("num_y", S_IRUSR, tsdata->debug_dir, &tsdata->num_y);
788 
789 	debugfs_create_file("mode", S_IRUSR | S_IWUSR,
790 			    tsdata->debug_dir, tsdata, &debugfs_mode_fops);
791 	debugfs_create_file("raw_data", S_IRUSR,
792 			    tsdata->debug_dir, tsdata, &debugfs_raw_data_fops);
793 }
794 
795 static void edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
796 {
797 	debugfs_remove_recursive(tsdata->debug_dir);
798 	kfree(tsdata->raw_buffer);
799 }
800 
801 #else
802 
803 static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
804 {
805 	return -ENOSYS;
806 }
807 
808 static void edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
809 					  const char *debugfs_name)
810 {
811 }
812 
813 static void edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
814 {
815 }
816 
817 #endif /* CONFIG_DEBUGFS */
818 
819 static int edt_ft5x06_ts_identify(struct i2c_client *client,
820 					struct edt_ft5x06_ts_data *tsdata,
821 					char *fw_version)
822 {
823 	u8 rdbuf[EDT_NAME_LEN];
824 	char *p;
825 	int error;
826 	char *model_name = tsdata->name;
827 
828 	/* see what we find if we assume it is a M06 *
829 	 * if we get less than EDT_NAME_LEN, we don't want
830 	 * to have garbage in there
831 	 */
832 	memset(rdbuf, 0, sizeof(rdbuf));
833 	error = edt_ft5x06_ts_readwrite(client, 1, "\xBB",
834 					EDT_NAME_LEN - 1, rdbuf);
835 	if (error)
836 		return error;
837 
838 	/* Probe content for something consistent.
839 	 * M06 starts with a response byte, M12 gives the data directly.
840 	 * M09/Generic does not provide model number information.
841 	 */
842 	if (!strncasecmp(rdbuf + 1, "EP0", 3)) {
843 		tsdata->version = EDT_M06;
844 
845 		/* remove last '$' end marker */
846 		rdbuf[EDT_NAME_LEN - 1] = '\0';
847 		if (rdbuf[EDT_NAME_LEN - 2] == '$')
848 			rdbuf[EDT_NAME_LEN - 2] = '\0';
849 
850 		/* look for Model/Version separator */
851 		p = strchr(rdbuf, '*');
852 		if (p)
853 			*p++ = '\0';
854 		strlcpy(model_name, rdbuf + 1, EDT_NAME_LEN);
855 		strlcpy(fw_version, p ? p : "", EDT_NAME_LEN);
856 	} else if (!strncasecmp(rdbuf, "EP0", 3)) {
857 		tsdata->version = EDT_M12;
858 
859 		/* remove last '$' end marker */
860 		rdbuf[EDT_NAME_LEN - 2] = '\0';
861 		if (rdbuf[EDT_NAME_LEN - 3] == '$')
862 			rdbuf[EDT_NAME_LEN - 3] = '\0';
863 
864 		/* look for Model/Version separator */
865 		p = strchr(rdbuf, '*');
866 		if (p)
867 			*p++ = '\0';
868 		strlcpy(model_name, rdbuf, EDT_NAME_LEN);
869 		strlcpy(fw_version, p ? p : "", EDT_NAME_LEN);
870 	} else {
871 		/* If it is not an EDT M06/M12 touchscreen, then the model
872 		 * detection is a bit hairy. The different ft5x06
873 		 * firmares around don't reliably implement the
874 		 * identification registers. Well, we'll take a shot.
875 		 *
876 		 * The main difference between generic focaltec based
877 		 * touches and EDT M09 is that we know how to retrieve
878 		 * the max coordinates for the latter.
879 		 */
880 		tsdata->version = GENERIC_FT;
881 
882 		error = edt_ft5x06_ts_readwrite(client, 1, "\xA6",
883 						2, rdbuf);
884 		if (error)
885 			return error;
886 
887 		strlcpy(fw_version, rdbuf, 2);
888 
889 		error = edt_ft5x06_ts_readwrite(client, 1, "\xA8",
890 						1, rdbuf);
891 		if (error)
892 			return error;
893 
894 		/* This "model identification" is not exact. Unfortunately
895 		 * not all firmwares for the ft5x06 put useful values in
896 		 * the identification registers.
897 		 */
898 		switch (rdbuf[0]) {
899 		case 0x35:   /* EDT EP0350M09 */
900 		case 0x43:   /* EDT EP0430M09 */
901 		case 0x50:   /* EDT EP0500M09 */
902 		case 0x57:   /* EDT EP0570M09 */
903 		case 0x70:   /* EDT EP0700M09 */
904 			tsdata->version = EDT_M09;
905 			snprintf(model_name, EDT_NAME_LEN, "EP0%i%i0M09",
906 				rdbuf[0] >> 4, rdbuf[0] & 0x0F);
907 			break;
908 		case 0xa1:   /* EDT EP1010ML00 */
909 			tsdata->version = EDT_M09;
910 			snprintf(model_name, EDT_NAME_LEN, "EP%i%i0ML00",
911 				rdbuf[0] >> 4, rdbuf[0] & 0x0F);
912 			break;
913 		case 0x5a:   /* Solomon Goldentek Display */
914 			snprintf(model_name, EDT_NAME_LEN, "GKTW50SCED1R0");
915 			break;
916 		case 0x59:  /* Evervision Display with FT5xx6 TS */
917 			tsdata->version = EV_FT;
918 			error = edt_ft5x06_ts_readwrite(client, 1, "\x53",
919 							1, rdbuf);
920 			if (error)
921 				return error;
922 			strlcpy(fw_version, rdbuf, 1);
923 			snprintf(model_name, EDT_NAME_LEN,
924 				 "EVERVISION-FT5726NEi");
925 			break;
926 		default:
927 			snprintf(model_name, EDT_NAME_LEN,
928 				 "generic ft5x06 (%02x)",
929 				 rdbuf[0]);
930 			break;
931 		}
932 	}
933 
934 	return 0;
935 }
936 
937 static void edt_ft5x06_ts_get_defaults(struct device *dev,
938 				       struct edt_ft5x06_ts_data *tsdata)
939 {
940 	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
941 	u32 val;
942 	int error;
943 
944 	error = device_property_read_u32(dev, "threshold", &val);
945 	if (!error) {
946 		edt_ft5x06_register_write(tsdata, reg_addr->reg_threshold, val);
947 		tsdata->threshold = val;
948 	}
949 
950 	error = device_property_read_u32(dev, "gain", &val);
951 	if (!error) {
952 		edt_ft5x06_register_write(tsdata, reg_addr->reg_gain, val);
953 		tsdata->gain = val;
954 	}
955 
956 	error = device_property_read_u32(dev, "offset", &val);
957 	if (!error) {
958 		if (reg_addr->reg_offset != NO_REGISTER)
959 			edt_ft5x06_register_write(tsdata,
960 						  reg_addr->reg_offset, val);
961 		tsdata->offset = val;
962 	}
963 
964 	error = device_property_read_u32(dev, "offset-x", &val);
965 	if (!error) {
966 		if (reg_addr->reg_offset_x != NO_REGISTER)
967 			edt_ft5x06_register_write(tsdata,
968 						  reg_addr->reg_offset_x, val);
969 		tsdata->offset_x = val;
970 	}
971 
972 	error = device_property_read_u32(dev, "offset-y", &val);
973 	if (!error) {
974 		if (reg_addr->reg_offset_y != NO_REGISTER)
975 			edt_ft5x06_register_write(tsdata,
976 						  reg_addr->reg_offset_y, val);
977 		tsdata->offset_y = val;
978 	}
979 }
980 
981 static void
982 edt_ft5x06_ts_get_parameters(struct edt_ft5x06_ts_data *tsdata)
983 {
984 	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
985 
986 	tsdata->threshold = edt_ft5x06_register_read(tsdata,
987 						     reg_addr->reg_threshold);
988 	tsdata->gain = edt_ft5x06_register_read(tsdata, reg_addr->reg_gain);
989 	if (reg_addr->reg_offset != NO_REGISTER)
990 		tsdata->offset =
991 			edt_ft5x06_register_read(tsdata, reg_addr->reg_offset);
992 	if (reg_addr->reg_offset_x != NO_REGISTER)
993 		tsdata->offset_x = edt_ft5x06_register_read(tsdata,
994 						reg_addr->reg_offset_x);
995 	if (reg_addr->reg_offset_y != NO_REGISTER)
996 		tsdata->offset_y = edt_ft5x06_register_read(tsdata,
997 						reg_addr->reg_offset_y);
998 	if (reg_addr->reg_report_rate != NO_REGISTER)
999 		tsdata->report_rate = edt_ft5x06_register_read(tsdata,
1000 						reg_addr->reg_report_rate);
1001 	if (tsdata->version == EDT_M06 ||
1002 	    tsdata->version == EDT_M09 ||
1003 	    tsdata->version == EDT_M12) {
1004 		tsdata->num_x = edt_ft5x06_register_read(tsdata,
1005 							 reg_addr->reg_num_x);
1006 		tsdata->num_y = edt_ft5x06_register_read(tsdata,
1007 							 reg_addr->reg_num_y);
1008 	} else {
1009 		tsdata->num_x = -1;
1010 		tsdata->num_y = -1;
1011 	}
1012 }
1013 
1014 static void
1015 edt_ft5x06_ts_set_regs(struct edt_ft5x06_ts_data *tsdata)
1016 {
1017 	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
1018 
1019 	switch (tsdata->version) {
1020 	case EDT_M06:
1021 		reg_addr->reg_threshold = WORK_REGISTER_THRESHOLD;
1022 		reg_addr->reg_report_rate = WORK_REGISTER_REPORT_RATE;
1023 		reg_addr->reg_gain = WORK_REGISTER_GAIN;
1024 		reg_addr->reg_offset = WORK_REGISTER_OFFSET;
1025 		reg_addr->reg_offset_x = NO_REGISTER;
1026 		reg_addr->reg_offset_y = NO_REGISTER;
1027 		reg_addr->reg_num_x = WORK_REGISTER_NUM_X;
1028 		reg_addr->reg_num_y = WORK_REGISTER_NUM_Y;
1029 		break;
1030 
1031 	case EDT_M09:
1032 	case EDT_M12:
1033 		reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
1034 		reg_addr->reg_report_rate = NO_REGISTER;
1035 		reg_addr->reg_gain = M09_REGISTER_GAIN;
1036 		reg_addr->reg_offset = M09_REGISTER_OFFSET;
1037 		reg_addr->reg_offset_x = NO_REGISTER;
1038 		reg_addr->reg_offset_y = NO_REGISTER;
1039 		reg_addr->reg_num_x = M09_REGISTER_NUM_X;
1040 		reg_addr->reg_num_y = M09_REGISTER_NUM_Y;
1041 		break;
1042 
1043 	case EV_FT:
1044 		reg_addr->reg_threshold = EV_REGISTER_THRESHOLD;
1045 		reg_addr->reg_gain = EV_REGISTER_GAIN;
1046 		reg_addr->reg_offset = NO_REGISTER;
1047 		reg_addr->reg_offset_x = EV_REGISTER_OFFSET_X;
1048 		reg_addr->reg_offset_y = EV_REGISTER_OFFSET_Y;
1049 		reg_addr->reg_num_x = NO_REGISTER;
1050 		reg_addr->reg_num_y = NO_REGISTER;
1051 		reg_addr->reg_report_rate = NO_REGISTER;
1052 		break;
1053 
1054 	case GENERIC_FT:
1055 		/* this is a guesswork */
1056 		reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
1057 		reg_addr->reg_gain = M09_REGISTER_GAIN;
1058 		reg_addr->reg_offset = M09_REGISTER_OFFSET;
1059 		reg_addr->reg_offset_x = NO_REGISTER;
1060 		reg_addr->reg_offset_y = NO_REGISTER;
1061 		break;
1062 	}
1063 }
1064 
1065 static void edt_ft5x06_disable_regulator(void *arg)
1066 {
1067 	struct edt_ft5x06_ts_data *data = arg;
1068 
1069 	regulator_disable(data->vcc);
1070 }
1071 
1072 static int edt_ft5x06_ts_probe(struct i2c_client *client,
1073 					 const struct i2c_device_id *id)
1074 {
1075 	const struct edt_i2c_chip_data *chip_data;
1076 	struct edt_ft5x06_ts_data *tsdata;
1077 	u8 buf[2] = { 0xfc, 0x00 };
1078 	struct input_dev *input;
1079 	unsigned long irq_flags;
1080 	int error;
1081 	char fw_version[EDT_NAME_LEN];
1082 
1083 	dev_dbg(&client->dev, "probing for EDT FT5x06 I2C\n");
1084 
1085 	tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);
1086 	if (!tsdata) {
1087 		dev_err(&client->dev, "failed to allocate driver data.\n");
1088 		return -ENOMEM;
1089 	}
1090 
1091 	chip_data = device_get_match_data(&client->dev);
1092 	if (!chip_data)
1093 		chip_data = (const struct edt_i2c_chip_data *)id->driver_data;
1094 	if (!chip_data || !chip_data->max_support_points) {
1095 		dev_err(&client->dev, "invalid or missing chip data\n");
1096 		return -EINVAL;
1097 	}
1098 
1099 	tsdata->max_support_points = chip_data->max_support_points;
1100 
1101 	tsdata->vcc = devm_regulator_get(&client->dev, "vcc");
1102 	if (IS_ERR(tsdata->vcc)) {
1103 		error = PTR_ERR(tsdata->vcc);
1104 		if (error != -EPROBE_DEFER)
1105 			dev_err(&client->dev,
1106 				"failed to request regulator: %d\n", error);
1107 		return error;
1108 	}
1109 
1110 	error = regulator_enable(tsdata->vcc);
1111 	if (error < 0) {
1112 		dev_err(&client->dev, "failed to enable vcc: %d\n", error);
1113 		return error;
1114 	}
1115 
1116 	error = devm_add_action_or_reset(&client->dev,
1117 					 edt_ft5x06_disable_regulator,
1118 					 tsdata);
1119 	if (error)
1120 		return error;
1121 
1122 	tsdata->reset_gpio = devm_gpiod_get_optional(&client->dev,
1123 						     "reset", GPIOD_OUT_HIGH);
1124 	if (IS_ERR(tsdata->reset_gpio)) {
1125 		error = PTR_ERR(tsdata->reset_gpio);
1126 		dev_err(&client->dev,
1127 			"Failed to request GPIO reset pin, error %d\n", error);
1128 		return error;
1129 	}
1130 
1131 	tsdata->wake_gpio = devm_gpiod_get_optional(&client->dev,
1132 						    "wake", GPIOD_OUT_LOW);
1133 	if (IS_ERR(tsdata->wake_gpio)) {
1134 		error = PTR_ERR(tsdata->wake_gpio);
1135 		dev_err(&client->dev,
1136 			"Failed to request GPIO wake pin, error %d\n", error);
1137 		return error;
1138 	}
1139 
1140 	/*
1141 	 * Check which sleep modes we can support. Power-off requieres the
1142 	 * reset-pin to ensure correct power-down/power-up behaviour. Start with
1143 	 * the EDT_PMODE_POWEROFF test since this is the deepest possible sleep
1144 	 * mode.
1145 	 */
1146 	if (tsdata->reset_gpio)
1147 		tsdata->suspend_mode = EDT_PMODE_POWEROFF;
1148 	else if (tsdata->wake_gpio)
1149 		tsdata->suspend_mode = EDT_PMODE_HIBERNATE;
1150 	else
1151 		tsdata->suspend_mode = EDT_PMODE_NOT_SUPPORTED;
1152 
1153 	if (tsdata->wake_gpio) {
1154 		usleep_range(5000, 6000);
1155 		gpiod_set_value_cansleep(tsdata->wake_gpio, 1);
1156 	}
1157 
1158 	if (tsdata->reset_gpio) {
1159 		usleep_range(5000, 6000);
1160 		gpiod_set_value_cansleep(tsdata->reset_gpio, 0);
1161 		msleep(300);
1162 	}
1163 
1164 	input = devm_input_allocate_device(&client->dev);
1165 	if (!input) {
1166 		dev_err(&client->dev, "failed to allocate input device.\n");
1167 		return -ENOMEM;
1168 	}
1169 
1170 	mutex_init(&tsdata->mutex);
1171 	tsdata->client = client;
1172 	tsdata->input = input;
1173 	tsdata->factory_mode = false;
1174 
1175 	error = edt_ft5x06_ts_identify(client, tsdata, fw_version);
1176 	if (error) {
1177 		dev_err(&client->dev, "touchscreen probe failed\n");
1178 		return error;
1179 	}
1180 
1181 	/*
1182 	 * Dummy read access. EP0700MLP1 returns bogus data on the first
1183 	 * register read access and ignores writes.
1184 	 */
1185 	edt_ft5x06_ts_readwrite(tsdata->client, 2, buf, 2, buf);
1186 
1187 	edt_ft5x06_ts_set_regs(tsdata);
1188 	edt_ft5x06_ts_get_defaults(&client->dev, tsdata);
1189 	edt_ft5x06_ts_get_parameters(tsdata);
1190 
1191 	dev_dbg(&client->dev,
1192 		"Model \"%s\", Rev. \"%s\", %dx%d sensors\n",
1193 		tsdata->name, fw_version, tsdata->num_x, tsdata->num_y);
1194 
1195 	input->name = tsdata->name;
1196 	input->id.bustype = BUS_I2C;
1197 	input->dev.parent = &client->dev;
1198 
1199 	if (tsdata->version == EDT_M06 ||
1200 	    tsdata->version == EDT_M09 ||
1201 	    tsdata->version == EDT_M12) {
1202 		input_set_abs_params(input, ABS_MT_POSITION_X,
1203 				     0, tsdata->num_x * 64 - 1, 0, 0);
1204 		input_set_abs_params(input, ABS_MT_POSITION_Y,
1205 				     0, tsdata->num_y * 64 - 1, 0, 0);
1206 	} else {
1207 		/* Unknown maximum values. Specify via devicetree */
1208 		input_set_abs_params(input, ABS_MT_POSITION_X,
1209 				     0, 65535, 0, 0);
1210 		input_set_abs_params(input, ABS_MT_POSITION_Y,
1211 				     0, 65535, 0, 0);
1212 	}
1213 
1214 	touchscreen_parse_properties(input, true, &tsdata->prop);
1215 
1216 	error = input_mt_init_slots(input, tsdata->max_support_points,
1217 				INPUT_MT_DIRECT);
1218 	if (error) {
1219 		dev_err(&client->dev, "Unable to init MT slots.\n");
1220 		return error;
1221 	}
1222 
1223 	i2c_set_clientdata(client, tsdata);
1224 
1225 	irq_flags = irq_get_trigger_type(client->irq);
1226 	if (irq_flags == IRQF_TRIGGER_NONE)
1227 		irq_flags = IRQF_TRIGGER_FALLING;
1228 	irq_flags |= IRQF_ONESHOT;
1229 
1230 	error = devm_request_threaded_irq(&client->dev, client->irq,
1231 					NULL, edt_ft5x06_ts_isr, irq_flags,
1232 					client->name, tsdata);
1233 	if (error) {
1234 		dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
1235 		return error;
1236 	}
1237 
1238 	error = devm_device_add_group(&client->dev, &edt_ft5x06_attr_group);
1239 	if (error)
1240 		return error;
1241 
1242 	error = input_register_device(input);
1243 	if (error)
1244 		return error;
1245 
1246 	edt_ft5x06_ts_prepare_debugfs(tsdata, dev_driver_string(&client->dev));
1247 
1248 	dev_dbg(&client->dev,
1249 		"EDT FT5x06 initialized: IRQ %d, WAKE pin %d, Reset pin %d.\n",
1250 		client->irq,
1251 		tsdata->wake_gpio ? desc_to_gpio(tsdata->wake_gpio) : -1,
1252 		tsdata->reset_gpio ? desc_to_gpio(tsdata->reset_gpio) : -1);
1253 
1254 	return 0;
1255 }
1256 
1257 static int edt_ft5x06_ts_remove(struct i2c_client *client)
1258 {
1259 	struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
1260 
1261 	edt_ft5x06_ts_teardown_debugfs(tsdata);
1262 
1263 	return 0;
1264 }
1265 
1266 static int __maybe_unused edt_ft5x06_ts_suspend(struct device *dev)
1267 {
1268 	struct i2c_client *client = to_i2c_client(dev);
1269 	struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
1270 	struct gpio_desc *reset_gpio = tsdata->reset_gpio;
1271 	int ret;
1272 
1273 	if (device_may_wakeup(dev))
1274 		return 0;
1275 
1276 	if (tsdata->suspend_mode == EDT_PMODE_NOT_SUPPORTED)
1277 		return 0;
1278 
1279 	/* Enter hibernate mode. */
1280 	ret = edt_ft5x06_register_write(tsdata, PMOD_REGISTER_OPMODE,
1281 					PMOD_REGISTER_HIBERNATE);
1282 	if (ret)
1283 		dev_warn(dev, "Failed to set hibernate mode\n");
1284 
1285 	if (tsdata->suspend_mode == EDT_PMODE_HIBERNATE)
1286 		return 0;
1287 
1288 	/*
1289 	 * Power-off according the datasheet. Cut the power may leaf the irq
1290 	 * line in an undefined state depending on the host pull resistor
1291 	 * settings. Disable the irq to avoid adjusting each host till the
1292 	 * device is back in a full functional state.
1293 	 */
1294 	disable_irq(tsdata->client->irq);
1295 
1296 	gpiod_set_value_cansleep(reset_gpio, 1);
1297 	usleep_range(1000, 2000);
1298 
1299 	ret = regulator_disable(tsdata->vcc);
1300 	if (ret)
1301 		dev_warn(dev, "Failed to disable vcc\n");
1302 
1303 	return 0;
1304 }
1305 
1306 static int __maybe_unused edt_ft5x06_ts_resume(struct device *dev)
1307 {
1308 	struct i2c_client *client = to_i2c_client(dev);
1309 	struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
1310 	int ret = 0;
1311 
1312 	if (device_may_wakeup(dev))
1313 		return 0;
1314 
1315 	if (tsdata->suspend_mode == EDT_PMODE_NOT_SUPPORTED)
1316 		return 0;
1317 
1318 	if (tsdata->suspend_mode == EDT_PMODE_POWEROFF) {
1319 		struct gpio_desc *reset_gpio = tsdata->reset_gpio;
1320 
1321 		/*
1322 		 * We can't check if the regulator is a dummy or a real
1323 		 * regulator. So we need to specify the 5ms reset time (T_rst)
1324 		 * here instead of the 100us T_rtp time. We also need to wait
1325 		 * 300ms in case it was a real supply and the power was cutted
1326 		 * of. Toggle the reset pin is also a way to exit the hibernate
1327 		 * mode.
1328 		 */
1329 		gpiod_set_value_cansleep(reset_gpio, 1);
1330 		usleep_range(5000, 6000);
1331 
1332 		ret = regulator_enable(tsdata->vcc);
1333 		if (ret) {
1334 			dev_err(dev, "Failed to enable vcc\n");
1335 			return ret;
1336 		}
1337 
1338 		usleep_range(1000, 2000);
1339 		gpiod_set_value_cansleep(reset_gpio, 0);
1340 		msleep(300);
1341 
1342 		edt_ft5x06_restore_reg_parameters(tsdata);
1343 		enable_irq(tsdata->client->irq);
1344 
1345 		if (tsdata->factory_mode)
1346 			ret = edt_ft5x06_factory_mode(tsdata);
1347 	} else {
1348 		struct gpio_desc *wake_gpio = tsdata->wake_gpio;
1349 
1350 		gpiod_set_value_cansleep(wake_gpio, 0);
1351 		usleep_range(5000, 6000);
1352 		gpiod_set_value_cansleep(wake_gpio, 1);
1353 	}
1354 
1355 
1356 	return ret;
1357 }
1358 
1359 static SIMPLE_DEV_PM_OPS(edt_ft5x06_ts_pm_ops,
1360 			 edt_ft5x06_ts_suspend, edt_ft5x06_ts_resume);
1361 
1362 static const struct edt_i2c_chip_data edt_ft5x06_data = {
1363 	.max_support_points = 5,
1364 };
1365 
1366 static const struct edt_i2c_chip_data edt_ft5506_data = {
1367 	.max_support_points = 10,
1368 };
1369 
1370 static const struct edt_i2c_chip_data edt_ft6236_data = {
1371 	.max_support_points = 2,
1372 };
1373 
1374 static const struct i2c_device_id edt_ft5x06_ts_id[] = {
1375 	{ .name = "edt-ft5x06", .driver_data = (long)&edt_ft5x06_data },
1376 	{ .name = "edt-ft5506", .driver_data = (long)&edt_ft5506_data },
1377 	{ .name = "ev-ft5726", .driver_data = (long)&edt_ft5506_data },
1378 	/* Note no edt- prefix for compatibility with the ft6236.c driver */
1379 	{ .name = "ft6236", .driver_data = (long)&edt_ft6236_data },
1380 	{ /* sentinel */ }
1381 };
1382 MODULE_DEVICE_TABLE(i2c, edt_ft5x06_ts_id);
1383 
1384 static const struct of_device_id edt_ft5x06_of_match[] = {
1385 	{ .compatible = "edt,edt-ft5206", .data = &edt_ft5x06_data },
1386 	{ .compatible = "edt,edt-ft5306", .data = &edt_ft5x06_data },
1387 	{ .compatible = "edt,edt-ft5406", .data = &edt_ft5x06_data },
1388 	{ .compatible = "edt,edt-ft5506", .data = &edt_ft5506_data },
1389 	{ .compatible = "evervision,ev-ft5726", .data = &edt_ft5506_data },
1390 	/* Note focaltech vendor prefix for compatibility with ft6236.c */
1391 	{ .compatible = "focaltech,ft6236", .data = &edt_ft6236_data },
1392 	{ /* sentinel */ }
1393 };
1394 MODULE_DEVICE_TABLE(of, edt_ft5x06_of_match);
1395 
1396 static struct i2c_driver edt_ft5x06_ts_driver = {
1397 	.driver = {
1398 		.name = "edt_ft5x06",
1399 		.of_match_table = edt_ft5x06_of_match,
1400 		.pm = &edt_ft5x06_ts_pm_ops,
1401 		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
1402 	},
1403 	.id_table = edt_ft5x06_ts_id,
1404 	.probe    = edt_ft5x06_ts_probe,
1405 	.remove   = edt_ft5x06_ts_remove,
1406 };
1407 
1408 module_i2c_driver(edt_ft5x06_ts_driver);
1409 
1410 MODULE_AUTHOR("Simon Budig <simon.budig@kernelconcepts.de>");
1411 MODULE_DESCRIPTION("EDT FT5x06 I2C Touchscreen Driver");
1412 MODULE_LICENSE("GPL v2");
1413