1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Elan Microelectronics touch panels with I2C interface
4  *
5  * Copyright (C) 2014 Elan Microelectronics Corporation.
6  * Scott Liu <scott.liu@emc.com.tw>
7  *
8  * This code is partly based on hid-multitouch.c:
9  *
10  *  Copyright (c) 2010-2012 Stephane Chatty <chatty@enac.fr>
11  *  Copyright (c) 2010-2012 Benjamin Tissoires <benjamin.tissoires@gmail.com>
12  *  Copyright (c) 2010-2012 Ecole Nationale de l'Aviation Civile, France
13  *
14  * This code is partly based on i2c-hid.c:
15  *
16  * Copyright (c) 2012 Benjamin Tissoires <benjamin.tissoires@gmail.com>
17  * Copyright (c) 2012 Ecole Nationale de l'Aviation Civile, France
18  * Copyright (c) 2012 Red Hat, Inc
19  */
20 
21 
22 #include <linux/bits.h>
23 #include <linux/module.h>
24 #include <linux/input.h>
25 #include <linux/interrupt.h>
26 #include <linux/irq.h>
27 #include <linux/platform_device.h>
28 #include <linux/async.h>
29 #include <linux/i2c.h>
30 #include <linux/delay.h>
31 #include <linux/uaccess.h>
32 #include <linux/buffer_head.h>
33 #include <linux/slab.h>
34 #include <linux/firmware.h>
35 #include <linux/input/mt.h>
36 #include <linux/input/touchscreen.h>
37 #include <linux/acpi.h>
38 #include <linux/of.h>
39 #include <linux/gpio/consumer.h>
40 #include <linux/regulator/consumer.h>
41 #include <linux/uuid.h>
42 #include <asm/unaligned.h>
43 
44 /* Device, Driver information */
45 #define DEVICE_NAME	"elants_i2c"
46 
47 /* Convert from rows or columns into resolution */
48 #define ELAN_TS_RESOLUTION(n, m)   (((n) - 1) * (m))
49 
50 /* FW header data */
51 #define HEADER_SIZE		4
52 #define FW_HDR_TYPE		0
53 #define FW_HDR_COUNT		1
54 #define FW_HDR_LENGTH		2
55 
56 /* Buffer mode Queue Header information */
57 #define QUEUE_HEADER_SINGLE	0x62
58 #define QUEUE_HEADER_NORMAL	0X63
59 #define QUEUE_HEADER_WAIT	0x64
60 
61 /* Command header definition */
62 #define CMD_HEADER_WRITE	0x54
63 #define CMD_HEADER_READ		0x53
64 #define CMD_HEADER_6B_READ	0x5B
65 #define CMD_HEADER_ROM_READ	0x96
66 #define CMD_HEADER_RESP		0x52
67 #define CMD_HEADER_6B_RESP	0x9B
68 #define CMD_HEADER_ROM_RESP	0x95
69 #define CMD_HEADER_HELLO	0x55
70 #define CMD_HEADER_REK		0x66
71 
72 /* FW position data */
73 #define PACKET_SIZE		55
74 #define MAX_CONTACT_NUM		10
75 #define FW_POS_HEADER		0
76 #define FW_POS_STATE		1
77 #define FW_POS_TOTAL		2
78 #define FW_POS_XY		3
79 #define FW_POS_TOOL_TYPE	33
80 #define FW_POS_CHECKSUM		34
81 #define FW_POS_WIDTH		35
82 #define FW_POS_PRESSURE		45
83 
84 #define HEADER_REPORT_10_FINGER	0x62
85 
86 /* Header (4 bytes) plus 3 fill 10-finger packets */
87 #define MAX_PACKET_SIZE		169
88 
89 #define BOOT_TIME_DELAY_MS	50
90 
91 /* FW read command, 0x53 0x?? 0x0, 0x01 */
92 #define E_ELAN_INFO_FW_VER	0x00
93 #define E_ELAN_INFO_BC_VER	0x10
94 #define E_ELAN_INFO_REK		0xD0
95 #define E_ELAN_INFO_TEST_VER	0xE0
96 #define E_ELAN_INFO_FW_ID	0xF0
97 #define E_INFO_OSR		0xD6
98 #define E_INFO_PHY_SCAN		0xD7
99 #define E_INFO_PHY_DRIVER	0xD8
100 
101 #define MAX_RETRIES		3
102 #define MAX_FW_UPDATE_RETRIES	30
103 
104 #define ELAN_FW_PAGESIZE	132
105 
106 /* calibration timeout definition */
107 #define ELAN_CALI_TIMEOUT_MSEC	12000
108 
109 #define ELAN_POWERON_DELAY_USEC	500
110 #define ELAN_RESET_DELAY_MSEC	20
111 
112 enum elants_state {
113 	ELAN_STATE_NORMAL,
114 	ELAN_WAIT_QUEUE_HEADER,
115 	ELAN_WAIT_RECALIBRATION,
116 };
117 
118 enum elants_iap_mode {
119 	ELAN_IAP_OPERATIONAL,
120 	ELAN_IAP_RECOVERY,
121 };
122 
123 /* struct elants_data - represents state of Elan touchscreen device */
124 struct elants_data {
125 	struct i2c_client *client;
126 	struct input_dev *input;
127 
128 	struct regulator *vcc33;
129 	struct regulator *vccio;
130 	struct gpio_desc *reset_gpio;
131 
132 	u16 fw_version;
133 	u8 test_version;
134 	u8 solution_version;
135 	u8 bc_version;
136 	u8 iap_version;
137 	u16 hw_version;
138 	u8 major_res;
139 	unsigned int x_res;	/* resolution in units/mm */
140 	unsigned int y_res;
141 	unsigned int x_max;
142 	unsigned int y_max;
143 	struct touchscreen_properties prop;
144 
145 	enum elants_state state;
146 	enum elants_iap_mode iap_mode;
147 
148 	/* Guards against concurrent access to the device via sysfs */
149 	struct mutex sysfs_mutex;
150 
151 	u8 cmd_resp[HEADER_SIZE];
152 	struct completion cmd_done;
153 
154 	bool wake_irq_enabled;
155 	bool keep_power_in_suspend;
156 
157 	/* Must be last to be used for DMA operations */
158 	u8 buf[MAX_PACKET_SIZE] ____cacheline_aligned;
159 };
160 
161 static int elants_i2c_send(struct i2c_client *client,
162 			   const void *data, size_t size)
163 {
164 	int ret;
165 
166 	ret = i2c_master_send(client, data, size);
167 	if (ret == size)
168 		return 0;
169 
170 	if (ret >= 0)
171 		ret = -EIO;
172 
173 	dev_err(&client->dev, "%s failed (%*ph): %d\n",
174 		__func__, (int)size, data, ret);
175 
176 	return ret;
177 }
178 
179 static int elants_i2c_read(struct i2c_client *client, void *data, size_t size)
180 {
181 	int ret;
182 
183 	ret = i2c_master_recv(client, data, size);
184 	if (ret == size)
185 		return 0;
186 
187 	if (ret >= 0)
188 		ret = -EIO;
189 
190 	dev_err(&client->dev, "%s failed: %d\n", __func__, ret);
191 
192 	return ret;
193 }
194 
195 static int elants_i2c_execute_command(struct i2c_client *client,
196 				      const u8 *cmd, size_t cmd_size,
197 				      u8 *resp, size_t resp_size,
198 				      int retries, const char *cmd_name)
199 {
200 	struct i2c_msg msgs[2];
201 	int ret;
202 	u8 expected_response;
203 
204 	switch (cmd[0]) {
205 	case CMD_HEADER_READ:
206 		expected_response = CMD_HEADER_RESP;
207 		break;
208 
209 	case CMD_HEADER_6B_READ:
210 		expected_response = CMD_HEADER_6B_RESP;
211 		break;
212 
213 	case CMD_HEADER_ROM_READ:
214 		expected_response = CMD_HEADER_ROM_RESP;
215 		break;
216 
217 	default:
218 		dev_err(&client->dev, "(%s): invalid command: %*ph\n",
219 			cmd_name, (int)cmd_size, cmd);
220 		return -EINVAL;
221 	}
222 
223 	for (;;) {
224 		msgs[0].addr = client->addr;
225 		msgs[0].flags = client->flags & I2C_M_TEN;
226 		msgs[0].len = cmd_size;
227 		msgs[0].buf = (u8 *)cmd;
228 
229 		msgs[1].addr = client->addr;
230 		msgs[1].flags = (client->flags & I2C_M_TEN) | I2C_M_RD;
231 		msgs[1].flags |= I2C_M_RD;
232 		msgs[1].len = resp_size;
233 		msgs[1].buf = resp;
234 
235 		ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
236 		if (ret < 0) {
237 			if (--retries > 0) {
238 				dev_dbg(&client->dev,
239 					"(%s) I2C transfer failed: %pe (retrying)\n",
240 					cmd_name, ERR_PTR(ret));
241 				continue;
242 			}
243 
244 			dev_err(&client->dev,
245 				"(%s) I2C transfer failed: %pe\n",
246 				cmd_name, ERR_PTR(ret));
247 			return ret;
248 		}
249 
250 		if (ret != ARRAY_SIZE(msgs) ||
251 		    resp[FW_HDR_TYPE] != expected_response) {
252 			if (--retries > 0) {
253 				dev_dbg(&client->dev,
254 					"(%s) unexpected response: %*ph (retrying)\n",
255 					cmd_name, ret, resp);
256 				continue;
257 			}
258 
259 			dev_err(&client->dev,
260 				"(%s) unexpected response: %*ph\n",
261 				cmd_name, ret, resp);
262 			return -EIO;
263 		}
264 
265 		return 0;
266 	}
267 }
268 
269 static int elants_i2c_calibrate(struct elants_data *ts)
270 {
271 	struct i2c_client *client = ts->client;
272 	int ret, error;
273 	static const u8 w_flashkey[] = { 0x54, 0xC0, 0xE1, 0x5A };
274 	static const u8 rek[] = { 0x54, 0x29, 0x00, 0x01 };
275 	static const u8 rek_resp[] = { CMD_HEADER_REK, 0x66, 0x66, 0x66 };
276 
277 	disable_irq(client->irq);
278 
279 	ts->state = ELAN_WAIT_RECALIBRATION;
280 	reinit_completion(&ts->cmd_done);
281 
282 	elants_i2c_send(client, w_flashkey, sizeof(w_flashkey));
283 	elants_i2c_send(client, rek, sizeof(rek));
284 
285 	enable_irq(client->irq);
286 
287 	ret = wait_for_completion_interruptible_timeout(&ts->cmd_done,
288 				msecs_to_jiffies(ELAN_CALI_TIMEOUT_MSEC));
289 
290 	ts->state = ELAN_STATE_NORMAL;
291 
292 	if (ret <= 0) {
293 		error = ret < 0 ? ret : -ETIMEDOUT;
294 		dev_err(&client->dev,
295 			"error while waiting for calibration to complete: %d\n",
296 			error);
297 		return error;
298 	}
299 
300 	if (memcmp(rek_resp, ts->cmd_resp, sizeof(rek_resp))) {
301 		dev_err(&client->dev,
302 			"unexpected calibration response: %*ph\n",
303 			(int)sizeof(ts->cmd_resp), ts->cmd_resp);
304 		return -EINVAL;
305 	}
306 
307 	return 0;
308 }
309 
310 static int elants_i2c_sw_reset(struct i2c_client *client)
311 {
312 	const u8 soft_rst_cmd[] = { 0x77, 0x77, 0x77, 0x77 };
313 	int error;
314 
315 	error = elants_i2c_send(client, soft_rst_cmd,
316 				sizeof(soft_rst_cmd));
317 	if (error) {
318 		dev_err(&client->dev, "software reset failed: %d\n", error);
319 		return error;
320 	}
321 
322 	/*
323 	 * We should wait at least 10 msec (but no more than 40) before
324 	 * sending fastboot or IAP command to the device.
325 	 */
326 	msleep(30);
327 
328 	return 0;
329 }
330 
331 static u16 elants_i2c_parse_version(u8 *buf)
332 {
333 	return get_unaligned_be32(buf) >> 4;
334 }
335 
336 static int elants_i2c_query_hw_version(struct elants_data *ts)
337 {
338 	struct i2c_client *client = ts->client;
339 	int retry_cnt = MAX_RETRIES;
340 	const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_FW_ID, 0x00, 0x01 };
341 	u8 resp[HEADER_SIZE];
342 	int error;
343 
344 	while (retry_cnt--) {
345 		error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
346 						   resp, sizeof(resp), 1,
347 						   "read fw id");
348 		if (error)
349 			return error;
350 
351 		ts->hw_version = elants_i2c_parse_version(resp);
352 		if (ts->hw_version != 0xffff)
353 			return 0;
354 	}
355 
356 	dev_err(&client->dev, "Invalid fw id: %#04x\n", ts->hw_version);
357 
358 	return -EINVAL;
359 }
360 
361 static int elants_i2c_query_fw_version(struct elants_data *ts)
362 {
363 	struct i2c_client *client = ts->client;
364 	int retry_cnt = MAX_RETRIES;
365 	const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_FW_VER, 0x00, 0x01 };
366 	u8 resp[HEADER_SIZE];
367 	int error;
368 
369 	while (retry_cnt--) {
370 		error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
371 						   resp, sizeof(resp), 1,
372 						   "read fw version");
373 		if (error)
374 			return error;
375 
376 		ts->fw_version = elants_i2c_parse_version(resp);
377 		if (ts->fw_version != 0x0000 && ts->fw_version != 0xffff)
378 			return 0;
379 
380 		dev_dbg(&client->dev, "(read fw version) resp %*phC\n",
381 			(int)sizeof(resp), resp);
382 	}
383 
384 	dev_err(&client->dev, "Invalid fw ver: %#04x\n", ts->fw_version);
385 
386 	return -EINVAL;
387 }
388 
389 static int elants_i2c_query_test_version(struct elants_data *ts)
390 {
391 	struct i2c_client *client = ts->client;
392 	int error;
393 	u16 version;
394 	const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_TEST_VER, 0x00, 0x01 };
395 	u8 resp[HEADER_SIZE];
396 
397 	error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
398 					   resp, sizeof(resp), MAX_RETRIES,
399 					   "read test version");
400 	if (error) {
401 		dev_err(&client->dev, "Failed to read test version\n");
402 		return error;
403 	}
404 
405 	version = elants_i2c_parse_version(resp);
406 	ts->test_version = version >> 8;
407 	ts->solution_version = version & 0xff;
408 
409 	return 0;
410 }
411 
412 static int elants_i2c_query_bc_version(struct elants_data *ts)
413 {
414 	struct i2c_client *client = ts->client;
415 	const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_BC_VER, 0x00, 0x01 };
416 	u8 resp[HEADER_SIZE];
417 	u16 version;
418 	int error;
419 
420 	error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
421 					   resp, sizeof(resp), 1,
422 					   "read BC version");
423 	if (error)
424 		return error;
425 
426 	version = elants_i2c_parse_version(resp);
427 	ts->bc_version = version >> 8;
428 	ts->iap_version = version & 0xff;
429 
430 	return 0;
431 }
432 
433 static int elants_i2c_query_ts_info(struct elants_data *ts)
434 {
435 	struct i2c_client *client = ts->client;
436 	int error;
437 	u8 resp[17];
438 	u16 phy_x, phy_y, rows, cols, osr;
439 	const u8 get_resolution_cmd[] = {
440 		CMD_HEADER_6B_READ, 0x00, 0x00, 0x00, 0x00, 0x00
441 	};
442 	const u8 get_osr_cmd[] = {
443 		CMD_HEADER_READ, E_INFO_OSR, 0x00, 0x01
444 	};
445 	const u8 get_physical_scan_cmd[] = {
446 		CMD_HEADER_READ, E_INFO_PHY_SCAN, 0x00, 0x01
447 	};
448 	const u8 get_physical_drive_cmd[] = {
449 		CMD_HEADER_READ, E_INFO_PHY_DRIVER, 0x00, 0x01
450 	};
451 
452 	/* Get trace number */
453 	error = elants_i2c_execute_command(client,
454 					   get_resolution_cmd,
455 					   sizeof(get_resolution_cmd),
456 					   resp, sizeof(resp), 1,
457 					   "get resolution");
458 	if (error)
459 		return error;
460 
461 	rows = resp[2] + resp[6] + resp[10];
462 	cols = resp[3] + resp[7] + resp[11];
463 
464 	/* Get report resolution value of ABS_MT_TOUCH_MAJOR */
465 	ts->major_res = resp[16];
466 
467 	/* Process mm_to_pixel information */
468 	error = elants_i2c_execute_command(client,
469 					   get_osr_cmd, sizeof(get_osr_cmd),
470 					   resp, sizeof(resp), 1, "get osr");
471 	if (error)
472 		return error;
473 
474 	osr = resp[3];
475 
476 	error = elants_i2c_execute_command(client,
477 					   get_physical_scan_cmd,
478 					   sizeof(get_physical_scan_cmd),
479 					   resp, sizeof(resp), 1,
480 					   "get physical scan");
481 	if (error)
482 		return error;
483 
484 	phy_x = get_unaligned_be16(&resp[2]);
485 
486 	error = elants_i2c_execute_command(client,
487 					   get_physical_drive_cmd,
488 					   sizeof(get_physical_drive_cmd),
489 					   resp, sizeof(resp), 1,
490 					   "get physical drive");
491 	if (error)
492 		return error;
493 
494 	phy_y = get_unaligned_be16(&resp[2]);
495 
496 	dev_dbg(&client->dev, "phy_x=%d, phy_y=%d\n", phy_x, phy_y);
497 
498 	if (rows == 0 || cols == 0 || osr == 0) {
499 		dev_warn(&client->dev,
500 			 "invalid trace number data: %d, %d, %d\n",
501 			 rows, cols, osr);
502 	} else {
503 		/* translate trace number to TS resolution */
504 		ts->x_max = ELAN_TS_RESOLUTION(rows, osr);
505 		ts->x_res = DIV_ROUND_CLOSEST(ts->x_max, phy_x);
506 		ts->y_max = ELAN_TS_RESOLUTION(cols, osr);
507 		ts->y_res = DIV_ROUND_CLOSEST(ts->y_max, phy_y);
508 	}
509 
510 	return 0;
511 }
512 
513 static int elants_i2c_fastboot(struct i2c_client *client)
514 {
515 	const u8 boot_cmd[] = { 0x4D, 0x61, 0x69, 0x6E };
516 	int error;
517 
518 	error = elants_i2c_send(client, boot_cmd, sizeof(boot_cmd));
519 	if (error) {
520 		dev_err(&client->dev, "boot failed: %d\n", error);
521 		return error;
522 	}
523 
524 	dev_dbg(&client->dev, "boot success -- 0x%x\n", client->addr);
525 	return 0;
526 }
527 
528 static int elants_i2c_initialize(struct elants_data *ts)
529 {
530 	struct i2c_client *client = ts->client;
531 	int error, error2, retry_cnt;
532 	const u8 hello_packet[] = { 0x55, 0x55, 0x55, 0x55 };
533 	const u8 recov_packet[] = { 0x55, 0x55, 0x80, 0x80 };
534 	u8 buf[HEADER_SIZE];
535 
536 	for (retry_cnt = 0; retry_cnt < MAX_RETRIES; retry_cnt++) {
537 		error = elants_i2c_sw_reset(client);
538 		if (error) {
539 			/* Continue initializing if it's the last try */
540 			if (retry_cnt < MAX_RETRIES - 1)
541 				continue;
542 		}
543 
544 		error = elants_i2c_fastboot(client);
545 		if (error) {
546 			/* Continue initializing if it's the last try */
547 			if (retry_cnt < MAX_RETRIES - 1)
548 				continue;
549 		}
550 
551 		/* Wait for Hello packet */
552 		msleep(BOOT_TIME_DELAY_MS);
553 
554 		error = elants_i2c_read(client, buf, sizeof(buf));
555 		if (error) {
556 			dev_err(&client->dev,
557 				"failed to read 'hello' packet: %d\n", error);
558 		} else if (!memcmp(buf, hello_packet, sizeof(hello_packet))) {
559 			ts->iap_mode = ELAN_IAP_OPERATIONAL;
560 			break;
561 		} else if (!memcmp(buf, recov_packet, sizeof(recov_packet))) {
562 			/*
563 			 * Setting error code will mark device
564 			 * in recovery mode below.
565 			 */
566 			error = -EIO;
567 			break;
568 		} else {
569 			error = -EINVAL;
570 			dev_err(&client->dev,
571 				"invalid 'hello' packet: %*ph\n",
572 				(int)sizeof(buf), buf);
573 		}
574 	}
575 
576 	/* hw version is available even if device in recovery state */
577 	error2 = elants_i2c_query_hw_version(ts);
578 	if (!error2)
579 		error2 = elants_i2c_query_bc_version(ts);
580 	if (!error)
581 		error = error2;
582 
583 	if (!error)
584 		error = elants_i2c_query_fw_version(ts);
585 	if (!error)
586 		error = elants_i2c_query_test_version(ts);
587 	if (!error)
588 		error = elants_i2c_query_ts_info(ts);
589 
590 	if (error)
591 		ts->iap_mode = ELAN_IAP_RECOVERY;
592 
593 	return 0;
594 }
595 
596 /*
597  * Firmware update interface.
598  */
599 
600 static int elants_i2c_fw_write_page(struct i2c_client *client,
601 				    const void *page)
602 {
603 	const u8 ack_ok[] = { 0xaa, 0xaa };
604 	u8 buf[2];
605 	int retry;
606 	int error;
607 
608 	for (retry = 0; retry < MAX_FW_UPDATE_RETRIES; retry++) {
609 		error = elants_i2c_send(client, page, ELAN_FW_PAGESIZE);
610 		if (error) {
611 			dev_err(&client->dev,
612 				"IAP Write Page failed: %d\n", error);
613 			continue;
614 		}
615 
616 		error = elants_i2c_read(client, buf, 2);
617 		if (error) {
618 			dev_err(&client->dev,
619 				"IAP Ack read failed: %d\n", error);
620 			return error;
621 		}
622 
623 		if (!memcmp(buf, ack_ok, sizeof(ack_ok)))
624 			return 0;
625 
626 		error = -EIO;
627 		dev_err(&client->dev,
628 			"IAP Get Ack Error [%02x:%02x]\n",
629 			buf[0], buf[1]);
630 	}
631 
632 	return error;
633 }
634 
635 static int elants_i2c_validate_remark_id(struct elants_data *ts,
636 					 const struct firmware *fw)
637 {
638 	struct i2c_client *client = ts->client;
639 	int error;
640 	const u8 cmd[] = { CMD_HEADER_ROM_READ, 0x80, 0x1F, 0x00, 0x00, 0x21 };
641 	u8 resp[6] = { 0 };
642 	u16 ts_remark_id = 0;
643 	u16 fw_remark_id = 0;
644 
645 	/* Compare TS Remark ID and FW Remark ID */
646 	error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
647 					   resp, sizeof(resp),
648 					   1, "read Remark ID");
649 	if (error)
650 		return error;
651 
652 	ts_remark_id = get_unaligned_be16(&resp[3]);
653 
654 	fw_remark_id = get_unaligned_le16(&fw->data[fw->size - 4]);
655 
656 	if (fw_remark_id != ts_remark_id) {
657 		dev_err(&client->dev,
658 			"Remark ID Mismatched: ts_remark_id=0x%04x, fw_remark_id=0x%04x.\n",
659 			ts_remark_id, fw_remark_id);
660 		return -EINVAL;
661 	}
662 
663 	return 0;
664 }
665 
666 static int elants_i2c_do_update_firmware(struct i2c_client *client,
667 					 const struct firmware *fw,
668 					 bool force)
669 {
670 	struct elants_data *ts = i2c_get_clientdata(client);
671 	const u8 enter_iap[] = { 0x45, 0x49, 0x41, 0x50 };
672 	const u8 enter_iap2[] = { 0x54, 0x00, 0x12, 0x34 };
673 	const u8 iap_ack[] = { 0x55, 0xaa, 0x33, 0xcc };
674 	const u8 close_idle[] = { 0x54, 0x2c, 0x01, 0x01 };
675 	u8 buf[HEADER_SIZE];
676 	u16 send_id;
677 	int page, n_fw_pages;
678 	int error;
679 	bool check_remark_id = ts->iap_version >= 0x60;
680 
681 	/* Recovery mode detection! */
682 	if (force) {
683 		dev_dbg(&client->dev, "Recovery mode procedure\n");
684 
685 		if (check_remark_id) {
686 			error = elants_i2c_validate_remark_id(ts, fw);
687 			if (error)
688 				return error;
689 		}
690 
691 		error = elants_i2c_send(client, enter_iap2, sizeof(enter_iap2));
692 		if (error) {
693 			dev_err(&client->dev, "failed to enter IAP mode: %d\n",
694 				error);
695 			return error;
696 		}
697 	} else {
698 		/* Start IAP Procedure */
699 		dev_dbg(&client->dev, "Normal IAP procedure\n");
700 
701 		/* Close idle mode */
702 		error = elants_i2c_send(client, close_idle, sizeof(close_idle));
703 		if (error)
704 			dev_err(&client->dev, "Failed close idle: %d\n", error);
705 		msleep(60);
706 
707 		elants_i2c_sw_reset(client);
708 		msleep(20);
709 
710 		if (check_remark_id) {
711 			error = elants_i2c_validate_remark_id(ts, fw);
712 			if (error)
713 				return error;
714 		}
715 
716 		error = elants_i2c_send(client, enter_iap, sizeof(enter_iap));
717 		if (error) {
718 			dev_err(&client->dev, "failed to enter IAP mode: %d\n",
719 				error);
720 			return error;
721 		}
722 	}
723 
724 	msleep(20);
725 
726 	/* check IAP state */
727 	error = elants_i2c_read(client, buf, 4);
728 	if (error) {
729 		dev_err(&client->dev,
730 			"failed to read IAP acknowledgement: %d\n",
731 			error);
732 		return error;
733 	}
734 
735 	if (memcmp(buf, iap_ack, sizeof(iap_ack))) {
736 		dev_err(&client->dev,
737 			"failed to enter IAP: %*ph (expected %*ph)\n",
738 			(int)sizeof(buf), buf, (int)sizeof(iap_ack), iap_ack);
739 		return -EIO;
740 	}
741 
742 	dev_info(&client->dev, "successfully entered IAP mode");
743 
744 	send_id = client->addr;
745 	error = elants_i2c_send(client, &send_id, 1);
746 	if (error) {
747 		dev_err(&client->dev, "sending dummy byte failed: %d\n",
748 			error);
749 		return error;
750 	}
751 
752 	/* Clear the last page of Master */
753 	error = elants_i2c_send(client, fw->data, ELAN_FW_PAGESIZE);
754 	if (error) {
755 		dev_err(&client->dev, "clearing of the last page failed: %d\n",
756 			error);
757 		return error;
758 	}
759 
760 	error = elants_i2c_read(client, buf, 2);
761 	if (error) {
762 		dev_err(&client->dev,
763 			"failed to read ACK for clearing the last page: %d\n",
764 			error);
765 		return error;
766 	}
767 
768 	n_fw_pages = fw->size / ELAN_FW_PAGESIZE;
769 	dev_dbg(&client->dev, "IAP Pages = %d\n", n_fw_pages);
770 
771 	for (page = 0; page < n_fw_pages; page++) {
772 		error = elants_i2c_fw_write_page(client,
773 					fw->data + page * ELAN_FW_PAGESIZE);
774 		if (error) {
775 			dev_err(&client->dev,
776 				"failed to write FW page %d: %d\n",
777 				page, error);
778 			return error;
779 		}
780 	}
781 
782 	/* Old iap needs to wait 200ms for WDT and rest is for hello packets */
783 	msleep(300);
784 
785 	dev_info(&client->dev, "firmware update completed\n");
786 	return 0;
787 }
788 
789 static int elants_i2c_fw_update(struct elants_data *ts)
790 {
791 	struct i2c_client *client = ts->client;
792 	const struct firmware *fw;
793 	char *fw_name;
794 	int error;
795 
796 	fw_name = kasprintf(GFP_KERNEL, "elants_i2c_%04x.bin", ts->hw_version);
797 	if (!fw_name)
798 		return -ENOMEM;
799 
800 	dev_info(&client->dev, "requesting fw name = %s\n", fw_name);
801 	error = request_firmware(&fw, fw_name, &client->dev);
802 	kfree(fw_name);
803 	if (error) {
804 		dev_err(&client->dev, "failed to request firmware: %d\n",
805 			error);
806 		return error;
807 	}
808 
809 	if (fw->size % ELAN_FW_PAGESIZE) {
810 		dev_err(&client->dev, "invalid firmware length: %zu\n",
811 			fw->size);
812 		error = -EINVAL;
813 		goto out;
814 	}
815 
816 	disable_irq(client->irq);
817 
818 	error = elants_i2c_do_update_firmware(client, fw,
819 					ts->iap_mode == ELAN_IAP_RECOVERY);
820 	if (error) {
821 		dev_err(&client->dev, "firmware update failed: %d\n", error);
822 		ts->iap_mode = ELAN_IAP_RECOVERY;
823 		goto out_enable_irq;
824 	}
825 
826 	error = elants_i2c_initialize(ts);
827 	if (error) {
828 		dev_err(&client->dev,
829 			"failed to initialize device after firmware update: %d\n",
830 			error);
831 		ts->iap_mode = ELAN_IAP_RECOVERY;
832 		goto out_enable_irq;
833 	}
834 
835 	ts->iap_mode = ELAN_IAP_OPERATIONAL;
836 
837 out_enable_irq:
838 	ts->state = ELAN_STATE_NORMAL;
839 	enable_irq(client->irq);
840 	msleep(100);
841 
842 	if (!error)
843 		elants_i2c_calibrate(ts);
844 out:
845 	release_firmware(fw);
846 	return error;
847 }
848 
849 /*
850  * Event reporting.
851  */
852 
853 static void elants_i2c_mt_event(struct elants_data *ts, u8 *buf)
854 {
855 	struct input_dev *input = ts->input;
856 	unsigned int n_fingers;
857 	unsigned int tool_type;
858 	u16 finger_state;
859 	int i;
860 
861 	n_fingers = buf[FW_POS_STATE + 1] & 0x0f;
862 	finger_state = ((buf[FW_POS_STATE + 1] & 0x30) << 4) |
863 			buf[FW_POS_STATE];
864 
865 	dev_dbg(&ts->client->dev,
866 		"n_fingers: %u, state: %04x\n",  n_fingers, finger_state);
867 
868 	/* Note: all fingers have the same tool type */
869 	tool_type = buf[FW_POS_TOOL_TYPE] & BIT(0) ?
870 			MT_TOOL_FINGER : MT_TOOL_PALM;
871 
872 	for (i = 0; i < MAX_CONTACT_NUM && n_fingers; i++) {
873 		if (finger_state & 1) {
874 			unsigned int x, y, p, w;
875 			u8 *pos;
876 
877 			pos = &buf[FW_POS_XY + i * 3];
878 			x = (((u16)pos[0] & 0xf0) << 4) | pos[1];
879 			y = (((u16)pos[0] & 0x0f) << 8) | pos[2];
880 			p = buf[FW_POS_PRESSURE + i];
881 			w = buf[FW_POS_WIDTH + i];
882 
883 			dev_dbg(&ts->client->dev, "i=%d x=%d y=%d p=%d w=%d\n",
884 				i, x, y, p, w);
885 
886 			input_mt_slot(input, i);
887 			input_mt_report_slot_state(input, tool_type, true);
888 			touchscreen_report_pos(input, &ts->prop, x, y, true);
889 			input_event(input, EV_ABS, ABS_MT_PRESSURE, p);
890 			input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, w);
891 
892 			n_fingers--;
893 		}
894 
895 		finger_state >>= 1;
896 	}
897 
898 	input_mt_sync_frame(input);
899 	input_sync(input);
900 }
901 
902 static u8 elants_i2c_calculate_checksum(u8 *buf)
903 {
904 	u8 checksum = 0;
905 	u8 i;
906 
907 	for (i = 0; i < FW_POS_CHECKSUM; i++)
908 		checksum += buf[i];
909 
910 	return checksum;
911 }
912 
913 static void elants_i2c_event(struct elants_data *ts, u8 *buf)
914 {
915 	u8 checksum = elants_i2c_calculate_checksum(buf);
916 
917 	if (unlikely(buf[FW_POS_CHECKSUM] != checksum))
918 		dev_warn(&ts->client->dev,
919 			 "%s: invalid checksum for packet %02x: %02x vs. %02x\n",
920 			 __func__, buf[FW_POS_HEADER],
921 			 checksum, buf[FW_POS_CHECKSUM]);
922 	else if (unlikely(buf[FW_POS_HEADER] != HEADER_REPORT_10_FINGER))
923 		dev_warn(&ts->client->dev,
924 			 "%s: unknown packet type: %02x\n",
925 			 __func__, buf[FW_POS_HEADER]);
926 	else
927 		elants_i2c_mt_event(ts, buf);
928 }
929 
930 static irqreturn_t elants_i2c_irq(int irq, void *_dev)
931 {
932 	const u8 wait_packet[] = { 0x64, 0x64, 0x64, 0x64 };
933 	struct elants_data *ts = _dev;
934 	struct i2c_client *client = ts->client;
935 	int report_count, report_len;
936 	int i;
937 	int len;
938 
939 	len = i2c_master_recv_dmasafe(client, ts->buf, sizeof(ts->buf));
940 	if (len < 0) {
941 		dev_err(&client->dev, "%s: failed to read data: %d\n",
942 			__func__, len);
943 		goto out;
944 	}
945 
946 	dev_dbg(&client->dev, "%s: packet %*ph\n",
947 		__func__, HEADER_SIZE, ts->buf);
948 
949 	switch (ts->state) {
950 	case ELAN_WAIT_RECALIBRATION:
951 		if (ts->buf[FW_HDR_TYPE] == CMD_HEADER_REK) {
952 			memcpy(ts->cmd_resp, ts->buf, sizeof(ts->cmd_resp));
953 			complete(&ts->cmd_done);
954 			ts->state = ELAN_STATE_NORMAL;
955 		}
956 		break;
957 
958 	case ELAN_WAIT_QUEUE_HEADER:
959 		if (ts->buf[FW_HDR_TYPE] != QUEUE_HEADER_NORMAL)
960 			break;
961 
962 		ts->state = ELAN_STATE_NORMAL;
963 		fallthrough;
964 
965 	case ELAN_STATE_NORMAL:
966 
967 		switch (ts->buf[FW_HDR_TYPE]) {
968 		case CMD_HEADER_HELLO:
969 		case CMD_HEADER_RESP:
970 		case CMD_HEADER_REK:
971 			break;
972 
973 		case QUEUE_HEADER_WAIT:
974 			if (memcmp(ts->buf, wait_packet, sizeof(wait_packet))) {
975 				dev_err(&client->dev,
976 					"invalid wait packet %*ph\n",
977 					HEADER_SIZE, ts->buf);
978 			} else {
979 				ts->state = ELAN_WAIT_QUEUE_HEADER;
980 				udelay(30);
981 			}
982 			break;
983 
984 		case QUEUE_HEADER_SINGLE:
985 			elants_i2c_event(ts, &ts->buf[HEADER_SIZE]);
986 			break;
987 
988 		case QUEUE_HEADER_NORMAL:
989 			report_count = ts->buf[FW_HDR_COUNT];
990 			if (report_count == 0 || report_count > 3) {
991 				dev_err(&client->dev,
992 					"bad report count: %*ph\n",
993 					HEADER_SIZE, ts->buf);
994 				break;
995 			}
996 
997 			report_len = ts->buf[FW_HDR_LENGTH] / report_count;
998 			if (report_len != PACKET_SIZE) {
999 				dev_err(&client->dev,
1000 					"mismatching report length: %*ph\n",
1001 					HEADER_SIZE, ts->buf);
1002 				break;
1003 			}
1004 
1005 			for (i = 0; i < report_count; i++) {
1006 				u8 *buf = ts->buf + HEADER_SIZE +
1007 							i * PACKET_SIZE;
1008 				elants_i2c_event(ts, buf);
1009 			}
1010 			break;
1011 
1012 		default:
1013 			dev_err(&client->dev, "unknown packet %*ph\n",
1014 				HEADER_SIZE, ts->buf);
1015 			break;
1016 		}
1017 		break;
1018 	}
1019 
1020 out:
1021 	return IRQ_HANDLED;
1022 }
1023 
1024 /*
1025  * sysfs interface
1026  */
1027 static ssize_t calibrate_store(struct device *dev,
1028 			       struct device_attribute *attr,
1029 			       const char *buf, size_t count)
1030 {
1031 	struct i2c_client *client = to_i2c_client(dev);
1032 	struct elants_data *ts = i2c_get_clientdata(client);
1033 	int error;
1034 
1035 	error = mutex_lock_interruptible(&ts->sysfs_mutex);
1036 	if (error)
1037 		return error;
1038 
1039 	error = elants_i2c_calibrate(ts);
1040 
1041 	mutex_unlock(&ts->sysfs_mutex);
1042 	return error ?: count;
1043 }
1044 
1045 static ssize_t write_update_fw(struct device *dev,
1046 			       struct device_attribute *attr,
1047 			       const char *buf, size_t count)
1048 {
1049 	struct i2c_client *client = to_i2c_client(dev);
1050 	struct elants_data *ts = i2c_get_clientdata(client);
1051 	int error;
1052 
1053 	error = mutex_lock_interruptible(&ts->sysfs_mutex);
1054 	if (error)
1055 		return error;
1056 
1057 	error = elants_i2c_fw_update(ts);
1058 	dev_dbg(dev, "firmware update result: %d\n", error);
1059 
1060 	mutex_unlock(&ts->sysfs_mutex);
1061 	return error ?: count;
1062 }
1063 
1064 static ssize_t show_iap_mode(struct device *dev,
1065 			     struct device_attribute *attr, char *buf)
1066 {
1067 	struct i2c_client *client = to_i2c_client(dev);
1068 	struct elants_data *ts = i2c_get_clientdata(client);
1069 
1070 	return sprintf(buf, "%s\n",
1071 		       ts->iap_mode == ELAN_IAP_OPERATIONAL ?
1072 				"Normal" : "Recovery");
1073 }
1074 
1075 static ssize_t show_calibration_count(struct device *dev,
1076 				      struct device_attribute *attr, char *buf)
1077 {
1078 	struct i2c_client *client = to_i2c_client(dev);
1079 	const u8 cmd[] = { CMD_HEADER_READ, E_ELAN_INFO_REK, 0x00, 0x01 };
1080 	u8 resp[HEADER_SIZE];
1081 	u16 rek_count;
1082 	int error;
1083 
1084 	error = elants_i2c_execute_command(client, cmd, sizeof(cmd),
1085 					   resp, sizeof(resp), 1,
1086 					   "read ReK status");
1087 	if (error)
1088 		return sprintf(buf, "%d\n", error);
1089 
1090 	rek_count = get_unaligned_be16(&resp[2]);
1091 	return sprintf(buf, "0x%04x\n", rek_count);
1092 }
1093 
1094 static DEVICE_ATTR_WO(calibrate);
1095 static DEVICE_ATTR(iap_mode, S_IRUGO, show_iap_mode, NULL);
1096 static DEVICE_ATTR(calibration_count, S_IRUGO, show_calibration_count, NULL);
1097 static DEVICE_ATTR(update_fw, S_IWUSR, NULL, write_update_fw);
1098 
1099 struct elants_version_attribute {
1100 	struct device_attribute dattr;
1101 	size_t field_offset;
1102 	size_t field_size;
1103 };
1104 
1105 #define __ELANTS_FIELD_SIZE(_field)					\
1106 	sizeof(((struct elants_data *)NULL)->_field)
1107 #define __ELANTS_VERIFY_SIZE(_field)					\
1108 	(BUILD_BUG_ON_ZERO(__ELANTS_FIELD_SIZE(_field) > 2) +		\
1109 	 __ELANTS_FIELD_SIZE(_field))
1110 #define ELANTS_VERSION_ATTR(_field)					\
1111 	struct elants_version_attribute elants_ver_attr_##_field = {	\
1112 		.dattr = __ATTR(_field, S_IRUGO,			\
1113 				elants_version_attribute_show, NULL),	\
1114 		.field_offset = offsetof(struct elants_data, _field),	\
1115 		.field_size = __ELANTS_VERIFY_SIZE(_field),		\
1116 	}
1117 
1118 static ssize_t elants_version_attribute_show(struct device *dev,
1119 					     struct device_attribute *dattr,
1120 					     char *buf)
1121 {
1122 	struct i2c_client *client = to_i2c_client(dev);
1123 	struct elants_data *ts = i2c_get_clientdata(client);
1124 	struct elants_version_attribute *attr =
1125 		container_of(dattr, struct elants_version_attribute, dattr);
1126 	u8 *field = (u8 *)((char *)ts + attr->field_offset);
1127 	unsigned int fmt_size;
1128 	unsigned int val;
1129 
1130 	if (attr->field_size == 1) {
1131 		val = *field;
1132 		fmt_size = 2; /* 2 HEX digits */
1133 	} else {
1134 		val = *(u16 *)field;
1135 		fmt_size = 4; /* 4 HEX digits */
1136 	}
1137 
1138 	return sprintf(buf, "%0*x\n", fmt_size, val);
1139 }
1140 
1141 static ELANTS_VERSION_ATTR(fw_version);
1142 static ELANTS_VERSION_ATTR(hw_version);
1143 static ELANTS_VERSION_ATTR(test_version);
1144 static ELANTS_VERSION_ATTR(solution_version);
1145 static ELANTS_VERSION_ATTR(bc_version);
1146 static ELANTS_VERSION_ATTR(iap_version);
1147 
1148 static struct attribute *elants_attributes[] = {
1149 	&dev_attr_calibrate.attr,
1150 	&dev_attr_update_fw.attr,
1151 	&dev_attr_iap_mode.attr,
1152 	&dev_attr_calibration_count.attr,
1153 
1154 	&elants_ver_attr_fw_version.dattr.attr,
1155 	&elants_ver_attr_hw_version.dattr.attr,
1156 	&elants_ver_attr_test_version.dattr.attr,
1157 	&elants_ver_attr_solution_version.dattr.attr,
1158 	&elants_ver_attr_bc_version.dattr.attr,
1159 	&elants_ver_attr_iap_version.dattr.attr,
1160 	NULL
1161 };
1162 
1163 static const struct attribute_group elants_attribute_group = {
1164 	.attrs = elants_attributes,
1165 };
1166 
1167 static int elants_i2c_power_on(struct elants_data *ts)
1168 {
1169 	int error;
1170 
1171 	/*
1172 	 * If we do not have reset gpio assume platform firmware
1173 	 * controls regulators and does power them on for us.
1174 	 */
1175 	if (IS_ERR_OR_NULL(ts->reset_gpio))
1176 		return 0;
1177 
1178 	gpiod_set_value_cansleep(ts->reset_gpio, 1);
1179 
1180 	error = regulator_enable(ts->vcc33);
1181 	if (error) {
1182 		dev_err(&ts->client->dev,
1183 			"failed to enable vcc33 regulator: %d\n",
1184 			error);
1185 		goto release_reset_gpio;
1186 	}
1187 
1188 	error = regulator_enable(ts->vccio);
1189 	if (error) {
1190 		dev_err(&ts->client->dev,
1191 			"failed to enable vccio regulator: %d\n",
1192 			error);
1193 		regulator_disable(ts->vcc33);
1194 		goto release_reset_gpio;
1195 	}
1196 
1197 	/*
1198 	 * We need to wait a bit after powering on controller before
1199 	 * we are allowed to release reset GPIO.
1200 	 */
1201 	udelay(ELAN_POWERON_DELAY_USEC);
1202 
1203 release_reset_gpio:
1204 	gpiod_set_value_cansleep(ts->reset_gpio, 0);
1205 	if (error)
1206 		return error;
1207 
1208 	msleep(ELAN_RESET_DELAY_MSEC);
1209 
1210 	return 0;
1211 }
1212 
1213 static void elants_i2c_power_off(void *_data)
1214 {
1215 	struct elants_data *ts = _data;
1216 
1217 	if (!IS_ERR_OR_NULL(ts->reset_gpio)) {
1218 		/*
1219 		 * Activate reset gpio to prevent leakage through the
1220 		 * pin once we shut off power to the controller.
1221 		 */
1222 		gpiod_set_value_cansleep(ts->reset_gpio, 1);
1223 		regulator_disable(ts->vccio);
1224 		regulator_disable(ts->vcc33);
1225 	}
1226 }
1227 
1228 #ifdef CONFIG_ACPI
1229 static const struct acpi_device_id i2c_hid_ids[] = {
1230 	{"ACPI0C50", 0 },
1231 	{"PNP0C50", 0 },
1232 	{ },
1233 };
1234 
1235 static const guid_t i2c_hid_guid =
1236 	GUID_INIT(0x3CDFF6F7, 0x4267, 0x4555,
1237 		  0xAD, 0x05, 0xB3, 0x0A, 0x3D, 0x89, 0x38, 0xDE);
1238 
1239 static bool elants_acpi_is_hid_device(struct device *dev)
1240 {
1241 	acpi_handle handle = ACPI_HANDLE(dev);
1242 	union acpi_object *obj;
1243 
1244 	if (acpi_match_device_ids(ACPI_COMPANION(dev), i2c_hid_ids))
1245 		return false;
1246 
1247 	obj = acpi_evaluate_dsm_typed(handle, &i2c_hid_guid, 1, 1, NULL, ACPI_TYPE_INTEGER);
1248 	if (obj) {
1249 		ACPI_FREE(obj);
1250 		return true;
1251 	}
1252 
1253 	return false;
1254 }
1255 #else
1256 static bool elants_acpi_is_hid_device(struct device *dev)
1257 {
1258 	return false;
1259 }
1260 #endif
1261 
1262 static int elants_i2c_probe(struct i2c_client *client,
1263 			    const struct i2c_device_id *id)
1264 {
1265 	union i2c_smbus_data dummy;
1266 	struct elants_data *ts;
1267 	unsigned long irqflags;
1268 	int error;
1269 
1270 	/* Don't bind to i2c-hid compatible devices, these are handled by the i2c-hid drv. */
1271 	if (elants_acpi_is_hid_device(&client->dev)) {
1272 		dev_warn(&client->dev, "This device appears to be an I2C-HID device, not binding\n");
1273 		return -ENODEV;
1274 	}
1275 
1276 	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1277 		dev_err(&client->dev, "I2C check functionality error\n");
1278 		return -ENXIO;
1279 	}
1280 
1281 	ts = devm_kzalloc(&client->dev, sizeof(struct elants_data), GFP_KERNEL);
1282 	if (!ts)
1283 		return -ENOMEM;
1284 
1285 	mutex_init(&ts->sysfs_mutex);
1286 	init_completion(&ts->cmd_done);
1287 
1288 	ts->client = client;
1289 	i2c_set_clientdata(client, ts);
1290 
1291 	ts->vcc33 = devm_regulator_get(&client->dev, "vcc33");
1292 	if (IS_ERR(ts->vcc33)) {
1293 		error = PTR_ERR(ts->vcc33);
1294 		if (error != -EPROBE_DEFER)
1295 			dev_err(&client->dev,
1296 				"Failed to get 'vcc33' regulator: %d\n",
1297 				error);
1298 		return error;
1299 	}
1300 
1301 	ts->vccio = devm_regulator_get(&client->dev, "vccio");
1302 	if (IS_ERR(ts->vccio)) {
1303 		error = PTR_ERR(ts->vccio);
1304 		if (error != -EPROBE_DEFER)
1305 			dev_err(&client->dev,
1306 				"Failed to get 'vccio' regulator: %d\n",
1307 				error);
1308 		return error;
1309 	}
1310 
1311 	ts->reset_gpio = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_LOW);
1312 	if (IS_ERR(ts->reset_gpio)) {
1313 		error = PTR_ERR(ts->reset_gpio);
1314 
1315 		if (error == -EPROBE_DEFER)
1316 			return error;
1317 
1318 		if (error != -ENOENT && error != -ENOSYS) {
1319 			dev_err(&client->dev,
1320 				"failed to get reset gpio: %d\n",
1321 				error);
1322 			return error;
1323 		}
1324 
1325 		ts->keep_power_in_suspend = true;
1326 	}
1327 
1328 	error = elants_i2c_power_on(ts);
1329 	if (error)
1330 		return error;
1331 
1332 	error = devm_add_action(&client->dev, elants_i2c_power_off, ts);
1333 	if (error) {
1334 		dev_err(&client->dev,
1335 			"failed to install power off action: %d\n", error);
1336 		elants_i2c_power_off(ts);
1337 		return error;
1338 	}
1339 
1340 	/* Make sure there is something at this address */
1341 	if (i2c_smbus_xfer(client->adapter, client->addr, 0,
1342 			   I2C_SMBUS_READ, 0, I2C_SMBUS_BYTE, &dummy) < 0) {
1343 		dev_err(&client->dev, "nothing at this address\n");
1344 		return -ENXIO;
1345 	}
1346 
1347 	error = elants_i2c_initialize(ts);
1348 	if (error) {
1349 		dev_err(&client->dev, "failed to initialize: %d\n", error);
1350 		return error;
1351 	}
1352 
1353 	ts->input = devm_input_allocate_device(&client->dev);
1354 	if (!ts->input) {
1355 		dev_err(&client->dev, "Failed to allocate input device\n");
1356 		return -ENOMEM;
1357 	}
1358 
1359 	ts->input->name = "Elan Touchscreen";
1360 	ts->input->id.bustype = BUS_I2C;
1361 
1362 	/* Multitouch input params setup */
1363 
1364 	input_set_abs_params(ts->input, ABS_MT_POSITION_X, 0, ts->x_max, 0, 0);
1365 	input_set_abs_params(ts->input, ABS_MT_POSITION_Y, 0, ts->y_max, 0, 0);
1366 	input_set_abs_params(ts->input, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
1367 	input_set_abs_params(ts->input, ABS_MT_PRESSURE, 0, 255, 0, 0);
1368 	input_set_abs_params(ts->input, ABS_MT_TOOL_TYPE,
1369 			     0, MT_TOOL_PALM, 0, 0);
1370 	input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->x_res);
1371 	input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->y_res);
1372 	if (ts->major_res > 0)
1373 		input_abs_set_res(ts->input, ABS_MT_TOUCH_MAJOR, ts->major_res);
1374 
1375 	touchscreen_parse_properties(ts->input, true, &ts->prop);
1376 
1377 	error = input_mt_init_slots(ts->input, MAX_CONTACT_NUM,
1378 				    INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
1379 	if (error) {
1380 		dev_err(&client->dev,
1381 			"failed to initialize MT slots: %d\n", error);
1382 		return error;
1383 	}
1384 
1385 	error = input_register_device(ts->input);
1386 	if (error) {
1387 		dev_err(&client->dev,
1388 			"unable to register input device: %d\n", error);
1389 		return error;
1390 	}
1391 
1392 	/*
1393 	 * Platform code (ACPI, DTS) should normally set up interrupt
1394 	 * for us, but in case it did not let's fall back to using falling
1395 	 * edge to be compatible with older Chromebooks.
1396 	 */
1397 	irqflags = irq_get_trigger_type(client->irq);
1398 	if (!irqflags)
1399 		irqflags = IRQF_TRIGGER_FALLING;
1400 
1401 	error = devm_request_threaded_irq(&client->dev, client->irq,
1402 					  NULL, elants_i2c_irq,
1403 					  irqflags | IRQF_ONESHOT,
1404 					  client->name, ts);
1405 	if (error) {
1406 		dev_err(&client->dev, "Failed to register interrupt\n");
1407 		return error;
1408 	}
1409 
1410 	/*
1411 	 * Systems using device tree should set up wakeup via DTS,
1412 	 * the rest will configure device as wakeup source by default.
1413 	 */
1414 	if (!client->dev.of_node)
1415 		device_init_wakeup(&client->dev, true);
1416 
1417 	error = devm_device_add_group(&client->dev, &elants_attribute_group);
1418 	if (error) {
1419 		dev_err(&client->dev, "failed to create sysfs attributes: %d\n",
1420 			error);
1421 		return error;
1422 	}
1423 
1424 	return 0;
1425 }
1426 
1427 static int __maybe_unused elants_i2c_suspend(struct device *dev)
1428 {
1429 	struct i2c_client *client = to_i2c_client(dev);
1430 	struct elants_data *ts = i2c_get_clientdata(client);
1431 	const u8 set_sleep_cmd[] = { 0x54, 0x50, 0x00, 0x01 };
1432 	int retry_cnt;
1433 	int error;
1434 
1435 	/* Command not support in IAP recovery mode */
1436 	if (ts->iap_mode != ELAN_IAP_OPERATIONAL)
1437 		return -EBUSY;
1438 
1439 	disable_irq(client->irq);
1440 
1441 	if (device_may_wakeup(dev)) {
1442 		/*
1443 		 * The device will automatically enter idle mode
1444 		 * that has reduced power consumption.
1445 		 */
1446 		ts->wake_irq_enabled = (enable_irq_wake(client->irq) == 0);
1447 	} else if (ts->keep_power_in_suspend) {
1448 		for (retry_cnt = 0; retry_cnt < MAX_RETRIES; retry_cnt++) {
1449 			error = elants_i2c_send(client, set_sleep_cmd,
1450 						sizeof(set_sleep_cmd));
1451 			if (!error)
1452 				break;
1453 
1454 			dev_err(&client->dev,
1455 				"suspend command failed: %d\n", error);
1456 		}
1457 	} else {
1458 		elants_i2c_power_off(ts);
1459 	}
1460 
1461 	return 0;
1462 }
1463 
1464 static int __maybe_unused elants_i2c_resume(struct device *dev)
1465 {
1466 	struct i2c_client *client = to_i2c_client(dev);
1467 	struct elants_data *ts = i2c_get_clientdata(client);
1468 	const u8 set_active_cmd[] = { 0x54, 0x58, 0x00, 0x01 };
1469 	int retry_cnt;
1470 	int error;
1471 
1472 	if (device_may_wakeup(dev)) {
1473 		if (ts->wake_irq_enabled)
1474 			disable_irq_wake(client->irq);
1475 		elants_i2c_sw_reset(client);
1476 	} else if (ts->keep_power_in_suspend) {
1477 		for (retry_cnt = 0; retry_cnt < MAX_RETRIES; retry_cnt++) {
1478 			error = elants_i2c_send(client, set_active_cmd,
1479 						sizeof(set_active_cmd));
1480 			if (!error)
1481 				break;
1482 
1483 			dev_err(&client->dev,
1484 				"resume command failed: %d\n", error);
1485 		}
1486 	} else {
1487 		elants_i2c_power_on(ts);
1488 		elants_i2c_initialize(ts);
1489 	}
1490 
1491 	ts->state = ELAN_STATE_NORMAL;
1492 	enable_irq(client->irq);
1493 
1494 	return 0;
1495 }
1496 
1497 static SIMPLE_DEV_PM_OPS(elants_i2c_pm_ops,
1498 			 elants_i2c_suspend, elants_i2c_resume);
1499 
1500 static const struct i2c_device_id elants_i2c_id[] = {
1501 	{ DEVICE_NAME, 0 },
1502 	{ }
1503 };
1504 MODULE_DEVICE_TABLE(i2c, elants_i2c_id);
1505 
1506 #ifdef CONFIG_ACPI
1507 static const struct acpi_device_id elants_acpi_id[] = {
1508 	{ "ELAN0001", 0 },
1509 	{ }
1510 };
1511 MODULE_DEVICE_TABLE(acpi, elants_acpi_id);
1512 #endif
1513 
1514 #ifdef CONFIG_OF
1515 static const struct of_device_id elants_of_match[] = {
1516 	{ .compatible = "elan,ekth3500" },
1517 	{ /* sentinel */ }
1518 };
1519 MODULE_DEVICE_TABLE(of, elants_of_match);
1520 #endif
1521 
1522 static struct i2c_driver elants_i2c_driver = {
1523 	.probe = elants_i2c_probe,
1524 	.id_table = elants_i2c_id,
1525 	.driver = {
1526 		.name = DEVICE_NAME,
1527 		.pm = &elants_i2c_pm_ops,
1528 		.acpi_match_table = ACPI_PTR(elants_acpi_id),
1529 		.of_match_table = of_match_ptr(elants_of_match),
1530 		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
1531 	},
1532 };
1533 module_i2c_driver(elants_i2c_driver);
1534 
1535 MODULE_AUTHOR("Scott Liu <scott.liu@emc.com.tw>");
1536 MODULE_DESCRIPTION("Elan I2c Touchscreen driver");
1537 MODULE_LICENSE("GPL");
1538