1 /*
2  * Atmel maXTouch Touchscreen driver
3  *
4  * Copyright (C) 2010 Samsung Electronics Co.Ltd
5  * Author: Joonyoung Shim <jy0922.shim@samsung.com>
6  *
7  * This program is free software; you can redistribute  it and/or modify it
8  * under  the terms of  the GNU General  Public License as published by the
9  * Free Software Foundation;  either version 2 of the  License, or (at your
10  * option) any later version.
11  *
12  */
13 
14 #include <linux/module.h>
15 #include <linux/init.h>
16 #include <linux/delay.h>
17 #include <linux/firmware.h>
18 #include <linux/i2c.h>
19 #include <linux/i2c/atmel_mxt_ts.h>
20 #include <linux/input/mt.h>
21 #include <linux/interrupt.h>
22 #include <linux/slab.h>
23 
24 /* Version */
25 #define MXT_VER_20		20
26 #define MXT_VER_21		21
27 #define MXT_VER_22		22
28 
29 /* Slave addresses */
30 #define MXT_APP_LOW		0x4a
31 #define MXT_APP_HIGH		0x4b
32 #define MXT_BOOT_LOW		0x24
33 #define MXT_BOOT_HIGH		0x25
34 
35 /* Firmware */
36 #define MXT_FW_NAME		"maxtouch.fw"
37 
38 /* Registers */
39 #define MXT_INFO		0x00
40 #define MXT_FAMILY_ID		0x00
41 #define MXT_VARIANT_ID		0x01
42 #define MXT_VERSION		0x02
43 #define MXT_BUILD		0x03
44 #define MXT_MATRIX_X_SIZE	0x04
45 #define MXT_MATRIX_Y_SIZE	0x05
46 #define MXT_OBJECT_NUM		0x06
47 #define MXT_OBJECT_START	0x07
48 
49 #define MXT_OBJECT_SIZE		6
50 
51 /* Object types */
52 #define MXT_DEBUG_DIAGNOSTIC_T37	37
53 #define MXT_GEN_MESSAGE_T5		5
54 #define MXT_GEN_COMMAND_T6		6
55 #define MXT_GEN_POWER_T7		7
56 #define MXT_GEN_ACQUIRE_T8		8
57 #define MXT_GEN_DATASOURCE_T53		53
58 #define MXT_TOUCH_MULTI_T9		9
59 #define MXT_TOUCH_KEYARRAY_T15		15
60 #define MXT_TOUCH_PROXIMITY_T23		23
61 #define MXT_TOUCH_PROXKEY_T52		52
62 #define MXT_PROCI_GRIPFACE_T20		20
63 #define MXT_PROCG_NOISE_T22		22
64 #define MXT_PROCI_ONETOUCH_T24		24
65 #define MXT_PROCI_TWOTOUCH_T27		27
66 #define MXT_PROCI_GRIP_T40		40
67 #define MXT_PROCI_PALM_T41		41
68 #define MXT_PROCI_TOUCHSUPPRESSION_T42	42
69 #define MXT_PROCI_STYLUS_T47		47
70 #define MXT_PROCG_NOISESUPPRESSION_T48	48
71 #define MXT_SPT_COMMSCONFIG_T18		18
72 #define MXT_SPT_GPIOPWM_T19		19
73 #define MXT_SPT_SELFTEST_T25		25
74 #define MXT_SPT_CTECONFIG_T28		28
75 #define MXT_SPT_USERDATA_T38		38
76 #define MXT_SPT_DIGITIZER_T43		43
77 #define MXT_SPT_MESSAGECOUNT_T44	44
78 #define MXT_SPT_CTECONFIG_T46		46
79 
80 /* MXT_GEN_COMMAND_T6 field */
81 #define MXT_COMMAND_RESET	0
82 #define MXT_COMMAND_BACKUPNV	1
83 #define MXT_COMMAND_CALIBRATE	2
84 #define MXT_COMMAND_REPORTALL	3
85 #define MXT_COMMAND_DIAGNOSTIC	5
86 
87 /* MXT_GEN_POWER_T7 field */
88 #define MXT_POWER_IDLEACQINT	0
89 #define MXT_POWER_ACTVACQINT	1
90 #define MXT_POWER_ACTV2IDLETO	2
91 
92 /* MXT_GEN_ACQUIRE_T8 field */
93 #define MXT_ACQUIRE_CHRGTIME	0
94 #define MXT_ACQUIRE_TCHDRIFT	2
95 #define MXT_ACQUIRE_DRIFTST	3
96 #define MXT_ACQUIRE_TCHAUTOCAL	4
97 #define MXT_ACQUIRE_SYNC	5
98 #define MXT_ACQUIRE_ATCHCALST	6
99 #define MXT_ACQUIRE_ATCHCALSTHR	7
100 
101 /* MXT_TOUCH_MULTI_T9 field */
102 #define MXT_TOUCH_CTRL		0
103 #define MXT_TOUCH_XORIGIN	1
104 #define MXT_TOUCH_YORIGIN	2
105 #define MXT_TOUCH_XSIZE		3
106 #define MXT_TOUCH_YSIZE		4
107 #define MXT_TOUCH_BLEN		6
108 #define MXT_TOUCH_TCHTHR	7
109 #define MXT_TOUCH_TCHDI		8
110 #define MXT_TOUCH_ORIENT	9
111 #define MXT_TOUCH_MOVHYSTI	11
112 #define MXT_TOUCH_MOVHYSTN	12
113 #define MXT_TOUCH_NUMTOUCH	14
114 #define MXT_TOUCH_MRGHYST	15
115 #define MXT_TOUCH_MRGTHR	16
116 #define MXT_TOUCH_AMPHYST	17
117 #define MXT_TOUCH_XRANGE_LSB	18
118 #define MXT_TOUCH_XRANGE_MSB	19
119 #define MXT_TOUCH_YRANGE_LSB	20
120 #define MXT_TOUCH_YRANGE_MSB	21
121 #define MXT_TOUCH_XLOCLIP	22
122 #define MXT_TOUCH_XHICLIP	23
123 #define MXT_TOUCH_YLOCLIP	24
124 #define MXT_TOUCH_YHICLIP	25
125 #define MXT_TOUCH_XEDGECTRL	26
126 #define MXT_TOUCH_XEDGEDIST	27
127 #define MXT_TOUCH_YEDGECTRL	28
128 #define MXT_TOUCH_YEDGEDIST	29
129 #define MXT_TOUCH_JUMPLIMIT	30
130 
131 /* MXT_PROCI_GRIPFACE_T20 field */
132 #define MXT_GRIPFACE_CTRL	0
133 #define MXT_GRIPFACE_XLOGRIP	1
134 #define MXT_GRIPFACE_XHIGRIP	2
135 #define MXT_GRIPFACE_YLOGRIP	3
136 #define MXT_GRIPFACE_YHIGRIP	4
137 #define MXT_GRIPFACE_MAXTCHS	5
138 #define MXT_GRIPFACE_SZTHR1	7
139 #define MXT_GRIPFACE_SZTHR2	8
140 #define MXT_GRIPFACE_SHPTHR1	9
141 #define MXT_GRIPFACE_SHPTHR2	10
142 #define MXT_GRIPFACE_SUPEXTTO	11
143 
144 /* MXT_PROCI_NOISE field */
145 #define MXT_NOISE_CTRL		0
146 #define MXT_NOISE_OUTFLEN	1
147 #define MXT_NOISE_GCAFUL_LSB	3
148 #define MXT_NOISE_GCAFUL_MSB	4
149 #define MXT_NOISE_GCAFLL_LSB	5
150 #define MXT_NOISE_GCAFLL_MSB	6
151 #define MXT_NOISE_ACTVGCAFVALID	7
152 #define MXT_NOISE_NOISETHR	8
153 #define MXT_NOISE_FREQHOPSCALE	10
154 #define MXT_NOISE_FREQ0		11
155 #define MXT_NOISE_FREQ1		12
156 #define MXT_NOISE_FREQ2		13
157 #define MXT_NOISE_FREQ3		14
158 #define MXT_NOISE_FREQ4		15
159 #define MXT_NOISE_IDLEGCAFVALID	16
160 
161 /* MXT_SPT_COMMSCONFIG_T18 */
162 #define MXT_COMMS_CTRL		0
163 #define MXT_COMMS_CMD		1
164 
165 /* MXT_SPT_CTECONFIG_T28 field */
166 #define MXT_CTE_CTRL		0
167 #define MXT_CTE_CMD		1
168 #define MXT_CTE_MODE		2
169 #define MXT_CTE_IDLEGCAFDEPTH	3
170 #define MXT_CTE_ACTVGCAFDEPTH	4
171 #define MXT_CTE_VOLTAGE		5
172 
173 #define MXT_VOLTAGE_DEFAULT	2700000
174 #define MXT_VOLTAGE_STEP	10000
175 
176 /* Define for MXT_GEN_COMMAND_T6 */
177 #define MXT_BOOT_VALUE		0xa5
178 #define MXT_BACKUP_VALUE	0x55
179 #define MXT_BACKUP_TIME		50	/* msec */
180 #define MXT_RESET_TIME		200	/* msec */
181 
182 #define MXT_FWRESET_TIME	175	/* msec */
183 
184 /* MXT_SPT_GPIOPWM_T19 field */
185 #define MXT_GPIO0_MASK		0x04
186 #define MXT_GPIO1_MASK		0x08
187 #define MXT_GPIO2_MASK		0x10
188 #define MXT_GPIO3_MASK		0x20
189 
190 /* Command to unlock bootloader */
191 #define MXT_UNLOCK_CMD_MSB	0xaa
192 #define MXT_UNLOCK_CMD_LSB	0xdc
193 
194 /* Bootloader mode status */
195 #define MXT_WAITING_BOOTLOAD_CMD	0xc0	/* valid 7 6 bit only */
196 #define MXT_WAITING_FRAME_DATA	0x80	/* valid 7 6 bit only */
197 #define MXT_FRAME_CRC_CHECK	0x02
198 #define MXT_FRAME_CRC_FAIL	0x03
199 #define MXT_FRAME_CRC_PASS	0x04
200 #define MXT_APP_CRC_FAIL	0x40	/* valid 7 8 bit only */
201 #define MXT_BOOT_STATUS_MASK	0x3f
202 
203 /* Touch status */
204 #define MXT_UNGRIP		(1 << 0)
205 #define MXT_SUPPRESS		(1 << 1)
206 #define MXT_AMP			(1 << 2)
207 #define MXT_VECTOR		(1 << 3)
208 #define MXT_MOVE		(1 << 4)
209 #define MXT_RELEASE		(1 << 5)
210 #define MXT_PRESS		(1 << 6)
211 #define MXT_DETECT		(1 << 7)
212 
213 /* Touch orient bits */
214 #define MXT_XY_SWITCH		(1 << 0)
215 #define MXT_X_INVERT		(1 << 1)
216 #define MXT_Y_INVERT		(1 << 2)
217 
218 /* Touchscreen absolute values */
219 #define MXT_MAX_AREA		0xff
220 
221 #define MXT_PIXELS_PER_MM	20
222 
223 struct mxt_info {
224 	u8 family_id;
225 	u8 variant_id;
226 	u8 version;
227 	u8 build;
228 	u8 matrix_xsize;
229 	u8 matrix_ysize;
230 	u8 object_num;
231 };
232 
233 struct mxt_object {
234 	u8 type;
235 	u16 start_address;
236 	u8 size;		/* Size of each instance - 1 */
237 	u8 instances;		/* Number of instances - 1 */
238 	u8 num_report_ids;
239 } __packed;
240 
241 struct mxt_message {
242 	u8 reportid;
243 	u8 message[7];
244 };
245 
246 /* Each client has this additional data */
247 struct mxt_data {
248 	struct i2c_client *client;
249 	struct input_dev *input_dev;
250 	char phys[64];		/* device physical location */
251 	const struct mxt_platform_data *pdata;
252 	struct mxt_object *object_table;
253 	struct mxt_info info;
254 	bool is_tp;
255 
256 	unsigned int irq;
257 	unsigned int max_x;
258 	unsigned int max_y;
259 
260 	/* Cached parameters from object table */
261 	u8 T6_reportid;
262 	u8 T9_reportid_min;
263 	u8 T9_reportid_max;
264 	u8 T19_reportid;
265 };
266 
267 static bool mxt_object_readable(unsigned int type)
268 {
269 	switch (type) {
270 	case MXT_GEN_COMMAND_T6:
271 	case MXT_GEN_POWER_T7:
272 	case MXT_GEN_ACQUIRE_T8:
273 	case MXT_GEN_DATASOURCE_T53:
274 	case MXT_TOUCH_MULTI_T9:
275 	case MXT_TOUCH_KEYARRAY_T15:
276 	case MXT_TOUCH_PROXIMITY_T23:
277 	case MXT_TOUCH_PROXKEY_T52:
278 	case MXT_PROCI_GRIPFACE_T20:
279 	case MXT_PROCG_NOISE_T22:
280 	case MXT_PROCI_ONETOUCH_T24:
281 	case MXT_PROCI_TWOTOUCH_T27:
282 	case MXT_PROCI_GRIP_T40:
283 	case MXT_PROCI_PALM_T41:
284 	case MXT_PROCI_TOUCHSUPPRESSION_T42:
285 	case MXT_PROCI_STYLUS_T47:
286 	case MXT_PROCG_NOISESUPPRESSION_T48:
287 	case MXT_SPT_COMMSCONFIG_T18:
288 	case MXT_SPT_GPIOPWM_T19:
289 	case MXT_SPT_SELFTEST_T25:
290 	case MXT_SPT_CTECONFIG_T28:
291 	case MXT_SPT_USERDATA_T38:
292 	case MXT_SPT_DIGITIZER_T43:
293 	case MXT_SPT_CTECONFIG_T46:
294 		return true;
295 	default:
296 		return false;
297 	}
298 }
299 
300 static bool mxt_object_writable(unsigned int type)
301 {
302 	switch (type) {
303 	case MXT_GEN_COMMAND_T6:
304 	case MXT_GEN_POWER_T7:
305 	case MXT_GEN_ACQUIRE_T8:
306 	case MXT_TOUCH_MULTI_T9:
307 	case MXT_TOUCH_KEYARRAY_T15:
308 	case MXT_TOUCH_PROXIMITY_T23:
309 	case MXT_TOUCH_PROXKEY_T52:
310 	case MXT_PROCI_GRIPFACE_T20:
311 	case MXT_PROCG_NOISE_T22:
312 	case MXT_PROCI_ONETOUCH_T24:
313 	case MXT_PROCI_TWOTOUCH_T27:
314 	case MXT_PROCI_GRIP_T40:
315 	case MXT_PROCI_PALM_T41:
316 	case MXT_PROCI_TOUCHSUPPRESSION_T42:
317 	case MXT_PROCI_STYLUS_T47:
318 	case MXT_PROCG_NOISESUPPRESSION_T48:
319 	case MXT_SPT_COMMSCONFIG_T18:
320 	case MXT_SPT_GPIOPWM_T19:
321 	case MXT_SPT_SELFTEST_T25:
322 	case MXT_SPT_CTECONFIG_T28:
323 	case MXT_SPT_DIGITIZER_T43:
324 	case MXT_SPT_CTECONFIG_T46:
325 		return true;
326 	default:
327 		return false;
328 	}
329 }
330 
331 static void mxt_dump_message(struct device *dev,
332 			     struct mxt_message *message)
333 {
334 	dev_dbg(dev, "reportid: %u\tmessage: %*ph\n",
335 		message->reportid, 7, message->message);
336 }
337 
338 static int mxt_check_bootloader(struct i2c_client *client,
339 				     unsigned int state)
340 {
341 	u8 val;
342 
343 recheck:
344 	if (i2c_master_recv(client, &val, 1) != 1) {
345 		dev_err(&client->dev, "%s: i2c recv failed\n", __func__);
346 		return -EIO;
347 	}
348 
349 	switch (state) {
350 	case MXT_WAITING_BOOTLOAD_CMD:
351 	case MXT_WAITING_FRAME_DATA:
352 		val &= ~MXT_BOOT_STATUS_MASK;
353 		break;
354 	case MXT_FRAME_CRC_PASS:
355 		if (val == MXT_FRAME_CRC_CHECK)
356 			goto recheck;
357 		break;
358 	default:
359 		return -EINVAL;
360 	}
361 
362 	if (val != state) {
363 		dev_err(&client->dev, "Unvalid bootloader mode state\n");
364 		return -EINVAL;
365 	}
366 
367 	return 0;
368 }
369 
370 static int mxt_unlock_bootloader(struct i2c_client *client)
371 {
372 	u8 buf[2];
373 
374 	buf[0] = MXT_UNLOCK_CMD_LSB;
375 	buf[1] = MXT_UNLOCK_CMD_MSB;
376 
377 	if (i2c_master_send(client, buf, 2) != 2) {
378 		dev_err(&client->dev, "%s: i2c send failed\n", __func__);
379 		return -EIO;
380 	}
381 
382 	return 0;
383 }
384 
385 static int mxt_fw_write(struct i2c_client *client,
386 			     const u8 *data, unsigned int frame_size)
387 {
388 	if (i2c_master_send(client, data, frame_size) != frame_size) {
389 		dev_err(&client->dev, "%s: i2c send failed\n", __func__);
390 		return -EIO;
391 	}
392 
393 	return 0;
394 }
395 
396 static int __mxt_read_reg(struct i2c_client *client,
397 			       u16 reg, u16 len, void *val)
398 {
399 	struct i2c_msg xfer[2];
400 	u8 buf[2];
401 	int ret;
402 
403 	buf[0] = reg & 0xff;
404 	buf[1] = (reg >> 8) & 0xff;
405 
406 	/* Write register */
407 	xfer[0].addr = client->addr;
408 	xfer[0].flags = 0;
409 	xfer[0].len = 2;
410 	xfer[0].buf = buf;
411 
412 	/* Read data */
413 	xfer[1].addr = client->addr;
414 	xfer[1].flags = I2C_M_RD;
415 	xfer[1].len = len;
416 	xfer[1].buf = val;
417 
418 	ret = i2c_transfer(client->adapter, xfer, 2);
419 	if (ret == 2) {
420 		ret = 0;
421 	} else {
422 		if (ret >= 0)
423 			ret = -EIO;
424 		dev_err(&client->dev, "%s: i2c transfer failed (%d)\n",
425 			__func__, ret);
426 	}
427 
428 	return ret;
429 }
430 
431 static int mxt_read_reg(struct i2c_client *client, u16 reg, u8 *val)
432 {
433 	return __mxt_read_reg(client, reg, 1, val);
434 }
435 
436 static int __mxt_write_reg(struct i2c_client *client, u16 reg, u16 len,
437 			   const void *val)
438 {
439 	u8 *buf;
440 	size_t count;
441 	int ret;
442 
443 	count = len + 2;
444 	buf = kmalloc(count, GFP_KERNEL);
445 	if (!buf)
446 		return -ENOMEM;
447 
448 	buf[0] = reg & 0xff;
449 	buf[1] = (reg >> 8) & 0xff;
450 	memcpy(&buf[2], val, len);
451 
452 	ret = i2c_master_send(client, buf, count);
453 	if (ret == count) {
454 		ret = 0;
455 	} else {
456 		if (ret >= 0)
457 			ret = -EIO;
458 		dev_err(&client->dev, "%s: i2c send failed (%d)\n",
459 			__func__, ret);
460 	}
461 
462 	kfree(buf);
463 	return ret;
464 }
465 
466 static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val)
467 {
468 	return __mxt_write_reg(client, reg, 1, &val);
469 }
470 
471 static struct mxt_object *
472 mxt_get_object(struct mxt_data *data, u8 type)
473 {
474 	struct mxt_object *object;
475 	int i;
476 
477 	for (i = 0; i < data->info.object_num; i++) {
478 		object = data->object_table + i;
479 		if (object->type == type)
480 			return object;
481 	}
482 
483 	dev_err(&data->client->dev, "Invalid object type\n");
484 	return NULL;
485 }
486 
487 static int mxt_read_message(struct mxt_data *data,
488 				 struct mxt_message *message)
489 {
490 	struct mxt_object *object;
491 	u16 reg;
492 
493 	object = mxt_get_object(data, MXT_GEN_MESSAGE_T5);
494 	if (!object)
495 		return -EINVAL;
496 
497 	reg = object->start_address;
498 	return __mxt_read_reg(data->client, reg,
499 			sizeof(struct mxt_message), message);
500 }
501 
502 static int mxt_write_object(struct mxt_data *data,
503 				 u8 type, u8 offset, u8 val)
504 {
505 	struct mxt_object *object;
506 	u16 reg;
507 
508 	object = mxt_get_object(data, type);
509 	if (!object || offset >= object->size + 1)
510 		return -EINVAL;
511 
512 	reg = object->start_address;
513 	return mxt_write_reg(data->client, reg + offset, val);
514 }
515 
516 static void mxt_input_button(struct mxt_data *data, struct mxt_message *message)
517 {
518 	struct input_dev *input = data->input_dev;
519 	bool button;
520 	int i;
521 
522 	/* Active-low switch */
523 	for (i = 0; i < MXT_NUM_GPIO; i++) {
524 		if (data->pdata->key_map[i] == KEY_RESERVED)
525 			continue;
526 		button = !(message->message[0] & MXT_GPIO0_MASK << i);
527 		input_report_key(input, data->pdata->key_map[i], button);
528 	}
529 }
530 
531 static void mxt_input_touchevent(struct mxt_data *data,
532 				      struct mxt_message *message, int id)
533 {
534 	struct device *dev = &data->client->dev;
535 	u8 status = message->message[0];
536 	struct input_dev *input_dev = data->input_dev;
537 	int x;
538 	int y;
539 	int area;
540 	int pressure;
541 
542 	x = (message->message[1] << 4) | ((message->message[3] >> 4) & 0xf);
543 	y = (message->message[2] << 4) | ((message->message[3] & 0xf));
544 	if (data->max_x < 1024)
545 		x = x >> 2;
546 	if (data->max_y < 1024)
547 		y = y >> 2;
548 
549 	area = message->message[4];
550 	pressure = message->message[5];
551 
552 	dev_dbg(dev,
553 		"[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n",
554 		id,
555 		(status & MXT_DETECT) ? 'D' : '.',
556 		(status & MXT_PRESS) ? 'P' : '.',
557 		(status & MXT_RELEASE) ? 'R' : '.',
558 		(status & MXT_MOVE) ? 'M' : '.',
559 		(status & MXT_VECTOR) ? 'V' : '.',
560 		(status & MXT_AMP) ? 'A' : '.',
561 		(status & MXT_SUPPRESS) ? 'S' : '.',
562 		(status & MXT_UNGRIP) ? 'U' : '.',
563 		x, y, area, pressure);
564 
565 	input_mt_slot(input_dev, id);
566 	input_mt_report_slot_state(input_dev, MT_TOOL_FINGER,
567 				   status & MXT_DETECT);
568 
569 	if (status & MXT_DETECT) {
570 		input_report_abs(input_dev, ABS_MT_POSITION_X, x);
571 		input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
572 		input_report_abs(input_dev, ABS_MT_PRESSURE, pressure);
573 		input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area);
574 	}
575 }
576 
577 static unsigned mxt_extract_T6_csum(const u8 *csum)
578 {
579 	return csum[0] | (csum[1] << 8) | (csum[2] << 16);
580 }
581 
582 static bool mxt_is_T9_message(struct mxt_data *data, struct mxt_message *msg)
583 {
584 	u8 id = msg->reportid;
585 	return (id >= data->T9_reportid_min && id <= data->T9_reportid_max);
586 }
587 
588 static irqreturn_t mxt_interrupt(int irq, void *dev_id)
589 {
590 	struct mxt_data *data = dev_id;
591 	struct mxt_message message;
592 	const u8 *payload = &message.message[0];
593 	struct device *dev = &data->client->dev;
594 	u8 reportid;
595 	bool update_input = false;
596 
597 	do {
598 		if (mxt_read_message(data, &message)) {
599 			dev_err(dev, "Failed to read message\n");
600 			goto end;
601 		}
602 
603 		reportid = message.reportid;
604 
605 		if (reportid == data->T6_reportid) {
606 			u8 status = payload[0];
607 			unsigned csum = mxt_extract_T6_csum(&payload[1]);
608 			dev_dbg(dev, "Status: %02x Config Checksum: %06x\n",
609 				status, csum);
610 		} else if (mxt_is_T9_message(data, &message)) {
611 			int id = reportid - data->T9_reportid_min;
612 			mxt_input_touchevent(data, &message, id);
613 			update_input = true;
614 		} else if (message.reportid == data->T19_reportid) {
615 			mxt_input_button(data, &message);
616 			update_input = true;
617 		} else {
618 			mxt_dump_message(dev, &message);
619 		}
620 	} while (reportid != 0xff);
621 
622 	if (update_input) {
623 		input_mt_report_pointer_emulation(data->input_dev, false);
624 		input_sync(data->input_dev);
625 	}
626 
627 end:
628 	return IRQ_HANDLED;
629 }
630 
631 static int mxt_check_reg_init(struct mxt_data *data)
632 {
633 	const struct mxt_platform_data *pdata = data->pdata;
634 	struct mxt_object *object;
635 	struct device *dev = &data->client->dev;
636 	int index = 0;
637 	int i, size;
638 	int ret;
639 
640 	if (!pdata->config) {
641 		dev_dbg(dev, "No cfg data defined, skipping reg init\n");
642 		return 0;
643 	}
644 
645 	for (i = 0; i < data->info.object_num; i++) {
646 		object = data->object_table + i;
647 
648 		if (!mxt_object_writable(object->type))
649 			continue;
650 
651 		size = (object->size + 1) * (object->instances + 1);
652 		if (index + size > pdata->config_length) {
653 			dev_err(dev, "Not enough config data!\n");
654 			return -EINVAL;
655 		}
656 
657 		ret = __mxt_write_reg(data->client, object->start_address,
658 				size, &pdata->config[index]);
659 		if (ret)
660 			return ret;
661 		index += size;
662 	}
663 
664 	return 0;
665 }
666 
667 static int mxt_make_highchg(struct mxt_data *data)
668 {
669 	struct device *dev = &data->client->dev;
670 	struct mxt_message message;
671 	int count = 10;
672 	int error;
673 
674 	/* Read dummy message to make high CHG pin */
675 	do {
676 		error = mxt_read_message(data, &message);
677 		if (error)
678 			return error;
679 	} while (message.reportid != 0xff && --count);
680 
681 	if (!count) {
682 		dev_err(dev, "CHG pin isn't cleared\n");
683 		return -EBUSY;
684 	}
685 
686 	return 0;
687 }
688 
689 static void mxt_handle_pdata(struct mxt_data *data)
690 {
691 	const struct mxt_platform_data *pdata = data->pdata;
692 	u8 voltage;
693 
694 	/* Set touchscreen lines */
695 	mxt_write_object(data, MXT_TOUCH_MULTI_T9, MXT_TOUCH_XSIZE,
696 			pdata->x_line);
697 	mxt_write_object(data, MXT_TOUCH_MULTI_T9, MXT_TOUCH_YSIZE,
698 			pdata->y_line);
699 
700 	/* Set touchscreen orient */
701 	mxt_write_object(data, MXT_TOUCH_MULTI_T9, MXT_TOUCH_ORIENT,
702 			pdata->orient);
703 
704 	/* Set touchscreen burst length */
705 	mxt_write_object(data, MXT_TOUCH_MULTI_T9,
706 			MXT_TOUCH_BLEN, pdata->blen);
707 
708 	/* Set touchscreen threshold */
709 	mxt_write_object(data, MXT_TOUCH_MULTI_T9,
710 			MXT_TOUCH_TCHTHR, pdata->threshold);
711 
712 	/* Set touchscreen resolution */
713 	mxt_write_object(data, MXT_TOUCH_MULTI_T9,
714 			MXT_TOUCH_XRANGE_LSB, (pdata->x_size - 1) & 0xff);
715 	mxt_write_object(data, MXT_TOUCH_MULTI_T9,
716 			MXT_TOUCH_XRANGE_MSB, (pdata->x_size - 1) >> 8);
717 	mxt_write_object(data, MXT_TOUCH_MULTI_T9,
718 			MXT_TOUCH_YRANGE_LSB, (pdata->y_size - 1) & 0xff);
719 	mxt_write_object(data, MXT_TOUCH_MULTI_T9,
720 			MXT_TOUCH_YRANGE_MSB, (pdata->y_size - 1) >> 8);
721 
722 	/* Set touchscreen voltage */
723 	if (pdata->voltage) {
724 		if (pdata->voltage < MXT_VOLTAGE_DEFAULT) {
725 			voltage = (MXT_VOLTAGE_DEFAULT - pdata->voltage) /
726 				MXT_VOLTAGE_STEP;
727 			voltage = 0xff - voltage + 1;
728 		} else
729 			voltage = (pdata->voltage - MXT_VOLTAGE_DEFAULT) /
730 				MXT_VOLTAGE_STEP;
731 
732 		mxt_write_object(data, MXT_SPT_CTECONFIG_T28,
733 				MXT_CTE_VOLTAGE, voltage);
734 	}
735 }
736 
737 static int mxt_get_info(struct mxt_data *data)
738 {
739 	struct i2c_client *client = data->client;
740 	struct mxt_info *info = &data->info;
741 	int error;
742 
743 	/* Read 7-byte info block starting at address 0 */
744 	error = __mxt_read_reg(client, MXT_INFO, sizeof(*info), info);
745 	if (error)
746 		return error;
747 
748 	return 0;
749 }
750 
751 static int mxt_get_object_table(struct mxt_data *data)
752 {
753 	struct i2c_client *client = data->client;
754 	size_t table_size;
755 	int error;
756 	int i;
757 	u8 reportid;
758 
759 	table_size = data->info.object_num * sizeof(struct mxt_object);
760 	error = __mxt_read_reg(client, MXT_OBJECT_START, table_size,
761 			data->object_table);
762 	if (error)
763 		return error;
764 
765 	/* Valid Report IDs start counting from 1 */
766 	reportid = 1;
767 	for (i = 0; i < data->info.object_num; i++) {
768 		struct mxt_object *object = data->object_table + i;
769 		u8 min_id, max_id;
770 
771 		le16_to_cpus(&object->start_address);
772 
773 		if (object->num_report_ids) {
774 			min_id = reportid;
775 			reportid += object->num_report_ids *
776 					(object->instances + 1);
777 			max_id = reportid - 1;
778 		} else {
779 			min_id = 0;
780 			max_id = 0;
781 		}
782 
783 		dev_dbg(&data->client->dev,
784 			"Type %2d Start %3d Size %3d Instances %2d ReportIDs %3u : %3u\n",
785 			object->type, object->start_address, object->size + 1,
786 			object->instances + 1, min_id, max_id);
787 
788 		switch (object->type) {
789 		case MXT_GEN_COMMAND_T6:
790 			data->T6_reportid = min_id;
791 			break;
792 		case MXT_TOUCH_MULTI_T9:
793 			data->T9_reportid_min = min_id;
794 			data->T9_reportid_max = max_id;
795 			break;
796 		case MXT_SPT_GPIOPWM_T19:
797 			data->T19_reportid = min_id;
798 			break;
799 		}
800 	}
801 
802 	return 0;
803 }
804 
805 static void mxt_free_object_table(struct mxt_data *data)
806 {
807 	kfree(data->object_table);
808 	data->object_table = NULL;
809 	data->T6_reportid = 0;
810 	data->T9_reportid_min = 0;
811 	data->T9_reportid_max = 0;
812 	data->T19_reportid = 0;
813 }
814 
815 static int mxt_initialize(struct mxt_data *data)
816 {
817 	struct i2c_client *client = data->client;
818 	struct mxt_info *info = &data->info;
819 	int error;
820 	u8 val;
821 
822 	error = mxt_get_info(data);
823 	if (error)
824 		return error;
825 
826 	data->object_table = kcalloc(info->object_num,
827 				     sizeof(struct mxt_object),
828 				     GFP_KERNEL);
829 	if (!data->object_table) {
830 		dev_err(&client->dev, "Failed to allocate memory\n");
831 		return -ENOMEM;
832 	}
833 
834 	/* Get object table information */
835 	error = mxt_get_object_table(data);
836 	if (error)
837 		goto err_free_object_table;
838 
839 	/* Check register init values */
840 	error = mxt_check_reg_init(data);
841 	if (error)
842 		goto err_free_object_table;
843 
844 	mxt_handle_pdata(data);
845 
846 	/* Backup to memory */
847 	mxt_write_object(data, MXT_GEN_COMMAND_T6,
848 			MXT_COMMAND_BACKUPNV,
849 			MXT_BACKUP_VALUE);
850 	msleep(MXT_BACKUP_TIME);
851 
852 	/* Soft reset */
853 	mxt_write_object(data, MXT_GEN_COMMAND_T6,
854 			MXT_COMMAND_RESET, 1);
855 	msleep(MXT_RESET_TIME);
856 
857 	/* Update matrix size at info struct */
858 	error = mxt_read_reg(client, MXT_MATRIX_X_SIZE, &val);
859 	if (error)
860 		goto err_free_object_table;
861 	info->matrix_xsize = val;
862 
863 	error = mxt_read_reg(client, MXT_MATRIX_Y_SIZE, &val);
864 	if (error)
865 		goto err_free_object_table;
866 	info->matrix_ysize = val;
867 
868 	dev_info(&client->dev,
869 			"Family ID: %u Variant ID: %u Major.Minor.Build: %u.%u.%02X\n",
870 			info->family_id, info->variant_id, info->version >> 4,
871 			info->version & 0xf, info->build);
872 
873 	dev_info(&client->dev,
874 			"Matrix X Size: %u Matrix Y Size: %u Object Num: %u\n",
875 			info->matrix_xsize, info->matrix_ysize,
876 			info->object_num);
877 
878 	return 0;
879 
880 err_free_object_table:
881 	mxt_free_object_table(data);
882 	return error;
883 }
884 
885 static void mxt_calc_resolution(struct mxt_data *data)
886 {
887 	unsigned int max_x = data->pdata->x_size - 1;
888 	unsigned int max_y = data->pdata->y_size - 1;
889 
890 	if (data->pdata->orient & MXT_XY_SWITCH) {
891 		data->max_x = max_y;
892 		data->max_y = max_x;
893 	} else {
894 		data->max_x = max_x;
895 		data->max_y = max_y;
896 	}
897 }
898 
899 /* Firmware Version is returned as Major.Minor.Build */
900 static ssize_t mxt_fw_version_show(struct device *dev,
901 				   struct device_attribute *attr, char *buf)
902 {
903 	struct mxt_data *data = dev_get_drvdata(dev);
904 	struct mxt_info *info = &data->info;
905 	return scnprintf(buf, PAGE_SIZE, "%u.%u.%02X\n",
906 			 info->version >> 4, info->version & 0xf, info->build);
907 }
908 
909 /* Hardware Version is returned as FamilyID.VariantID */
910 static ssize_t mxt_hw_version_show(struct device *dev,
911 				   struct device_attribute *attr, char *buf)
912 {
913 	struct mxt_data *data = dev_get_drvdata(dev);
914 	struct mxt_info *info = &data->info;
915 	return scnprintf(buf, PAGE_SIZE, "%u.%u\n",
916 			 info->family_id, info->variant_id);
917 }
918 
919 static ssize_t mxt_show_instance(char *buf, int count,
920 				 struct mxt_object *object, int instance,
921 				 const u8 *val)
922 {
923 	int i;
924 
925 	if (object->instances > 0)
926 		count += scnprintf(buf + count, PAGE_SIZE - count,
927 				   "Instance %u\n", instance);
928 
929 	for (i = 0; i < object->size + 1; i++)
930 		count += scnprintf(buf + count, PAGE_SIZE - count,
931 				"\t[%2u]: %02x (%d)\n", i, val[i], val[i]);
932 	count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
933 
934 	return count;
935 }
936 
937 static ssize_t mxt_object_show(struct device *dev,
938 				    struct device_attribute *attr, char *buf)
939 {
940 	struct mxt_data *data = dev_get_drvdata(dev);
941 	struct mxt_object *object;
942 	int count = 0;
943 	int i, j;
944 	int error;
945 	u8 *obuf;
946 
947 	/* Pre-allocate buffer large enough to hold max sized object. */
948 	obuf = kmalloc(256, GFP_KERNEL);
949 	if (!obuf)
950 		return -ENOMEM;
951 
952 	error = 0;
953 	for (i = 0; i < data->info.object_num; i++) {
954 		object = data->object_table + i;
955 
956 		if (!mxt_object_readable(object->type))
957 			continue;
958 
959 		count += scnprintf(buf + count, PAGE_SIZE - count,
960 				"T%u:\n", object->type);
961 
962 		for (j = 0; j < object->instances + 1; j++) {
963 			u16 size = object->size + 1;
964 			u16 addr = object->start_address + j * size;
965 
966 			error = __mxt_read_reg(data->client, addr, size, obuf);
967 			if (error)
968 				goto done;
969 
970 			count = mxt_show_instance(buf, count, object, j, obuf);
971 		}
972 	}
973 
974 done:
975 	kfree(obuf);
976 	return error ?: count;
977 }
978 
979 static int mxt_load_fw(struct device *dev, const char *fn)
980 {
981 	struct mxt_data *data = dev_get_drvdata(dev);
982 	struct i2c_client *client = data->client;
983 	const struct firmware *fw = NULL;
984 	unsigned int frame_size;
985 	unsigned int pos = 0;
986 	int ret;
987 
988 	ret = request_firmware(&fw, fn, dev);
989 	if (ret) {
990 		dev_err(dev, "Unable to open firmware %s\n", fn);
991 		return ret;
992 	}
993 
994 	/* Change to the bootloader mode */
995 	mxt_write_object(data, MXT_GEN_COMMAND_T6,
996 			MXT_COMMAND_RESET, MXT_BOOT_VALUE);
997 	msleep(MXT_RESET_TIME);
998 
999 	/* Change to slave address of bootloader */
1000 	if (client->addr == MXT_APP_LOW)
1001 		client->addr = MXT_BOOT_LOW;
1002 	else
1003 		client->addr = MXT_BOOT_HIGH;
1004 
1005 	ret = mxt_check_bootloader(client, MXT_WAITING_BOOTLOAD_CMD);
1006 	if (ret)
1007 		goto out;
1008 
1009 	/* Unlock bootloader */
1010 	mxt_unlock_bootloader(client);
1011 
1012 	while (pos < fw->size) {
1013 		ret = mxt_check_bootloader(client,
1014 						MXT_WAITING_FRAME_DATA);
1015 		if (ret)
1016 			goto out;
1017 
1018 		frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1));
1019 
1020 		/* We should add 2 at frame size as the the firmware data is not
1021 		 * included the CRC bytes.
1022 		 */
1023 		frame_size += 2;
1024 
1025 		/* Write one frame to device */
1026 		mxt_fw_write(client, fw->data + pos, frame_size);
1027 
1028 		ret = mxt_check_bootloader(client,
1029 						MXT_FRAME_CRC_PASS);
1030 		if (ret)
1031 			goto out;
1032 
1033 		pos += frame_size;
1034 
1035 		dev_dbg(dev, "Updated %d bytes / %zd bytes\n", pos, fw->size);
1036 	}
1037 
1038 out:
1039 	release_firmware(fw);
1040 
1041 	/* Change to slave address of application */
1042 	if (client->addr == MXT_BOOT_LOW)
1043 		client->addr = MXT_APP_LOW;
1044 	else
1045 		client->addr = MXT_APP_HIGH;
1046 
1047 	return ret;
1048 }
1049 
1050 static ssize_t mxt_update_fw_store(struct device *dev,
1051 					struct device_attribute *attr,
1052 					const char *buf, size_t count)
1053 {
1054 	struct mxt_data *data = dev_get_drvdata(dev);
1055 	int error;
1056 
1057 	disable_irq(data->irq);
1058 
1059 	error = mxt_load_fw(dev, MXT_FW_NAME);
1060 	if (error) {
1061 		dev_err(dev, "The firmware update failed(%d)\n", error);
1062 		count = error;
1063 	} else {
1064 		dev_dbg(dev, "The firmware update succeeded\n");
1065 
1066 		/* Wait for reset */
1067 		msleep(MXT_FWRESET_TIME);
1068 
1069 		mxt_free_object_table(data);
1070 
1071 		mxt_initialize(data);
1072 	}
1073 
1074 	enable_irq(data->irq);
1075 
1076 	error = mxt_make_highchg(data);
1077 	if (error)
1078 		return error;
1079 
1080 	return count;
1081 }
1082 
1083 static DEVICE_ATTR(fw_version, S_IRUGO, mxt_fw_version_show, NULL);
1084 static DEVICE_ATTR(hw_version, S_IRUGO, mxt_hw_version_show, NULL);
1085 static DEVICE_ATTR(object, S_IRUGO, mxt_object_show, NULL);
1086 static DEVICE_ATTR(update_fw, S_IWUSR, NULL, mxt_update_fw_store);
1087 
1088 static struct attribute *mxt_attrs[] = {
1089 	&dev_attr_fw_version.attr,
1090 	&dev_attr_hw_version.attr,
1091 	&dev_attr_object.attr,
1092 	&dev_attr_update_fw.attr,
1093 	NULL
1094 };
1095 
1096 static const struct attribute_group mxt_attr_group = {
1097 	.attrs = mxt_attrs,
1098 };
1099 
1100 static void mxt_start(struct mxt_data *data)
1101 {
1102 	/* Touch enable */
1103 	mxt_write_object(data,
1104 			MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0x83);
1105 }
1106 
1107 static void mxt_stop(struct mxt_data *data)
1108 {
1109 	/* Touch disable */
1110 	mxt_write_object(data,
1111 			MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0);
1112 }
1113 
1114 static int mxt_input_open(struct input_dev *dev)
1115 {
1116 	struct mxt_data *data = input_get_drvdata(dev);
1117 
1118 	mxt_start(data);
1119 
1120 	return 0;
1121 }
1122 
1123 static void mxt_input_close(struct input_dev *dev)
1124 {
1125 	struct mxt_data *data = input_get_drvdata(dev);
1126 
1127 	mxt_stop(data);
1128 }
1129 
1130 static int mxt_probe(struct i2c_client *client,
1131 		const struct i2c_device_id *id)
1132 {
1133 	const struct mxt_platform_data *pdata = client->dev.platform_data;
1134 	struct mxt_data *data;
1135 	struct input_dev *input_dev;
1136 	int error;
1137 	unsigned int num_mt_slots;
1138 
1139 	if (!pdata)
1140 		return -EINVAL;
1141 
1142 	data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
1143 	input_dev = input_allocate_device();
1144 	if (!data || !input_dev) {
1145 		dev_err(&client->dev, "Failed to allocate memory\n");
1146 		error = -ENOMEM;
1147 		goto err_free_mem;
1148 	}
1149 
1150 	data->is_tp = pdata && pdata->is_tp;
1151 
1152 	input_dev->name = (data->is_tp) ? "Atmel maXTouch Touchpad" :
1153 					  "Atmel maXTouch Touchscreen";
1154 	snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0",
1155 		 client->adapter->nr, client->addr);
1156 
1157 	input_dev->phys = data->phys;
1158 
1159 	input_dev->id.bustype = BUS_I2C;
1160 	input_dev->dev.parent = &client->dev;
1161 	input_dev->open = mxt_input_open;
1162 	input_dev->close = mxt_input_close;
1163 
1164 	data->client = client;
1165 	data->input_dev = input_dev;
1166 	data->pdata = pdata;
1167 	data->irq = client->irq;
1168 
1169 	mxt_calc_resolution(data);
1170 
1171 	error = mxt_initialize(data);
1172 	if (error)
1173 		goto err_free_mem;
1174 
1175 	__set_bit(EV_ABS, input_dev->evbit);
1176 	__set_bit(EV_KEY, input_dev->evbit);
1177 	__set_bit(BTN_TOUCH, input_dev->keybit);
1178 
1179 	if (data->is_tp) {
1180 		int i;
1181 		__set_bit(INPUT_PROP_POINTER, input_dev->propbit);
1182 		__set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
1183 
1184 		for (i = 0; i < MXT_NUM_GPIO; i++)
1185 			if (pdata->key_map[i] != KEY_RESERVED)
1186 				__set_bit(pdata->key_map[i], input_dev->keybit);
1187 
1188 		__set_bit(BTN_TOOL_FINGER, input_dev->keybit);
1189 		__set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
1190 		__set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
1191 		__set_bit(BTN_TOOL_QUADTAP, input_dev->keybit);
1192 		__set_bit(BTN_TOOL_QUINTTAP, input_dev->keybit);
1193 
1194 		input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
1195 		input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
1196 		input_abs_set_res(input_dev, ABS_MT_POSITION_X,
1197 				  MXT_PIXELS_PER_MM);
1198 		input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
1199 				  MXT_PIXELS_PER_MM);
1200 	}
1201 
1202 	/* For single touch */
1203 	input_set_abs_params(input_dev, ABS_X,
1204 			     0, data->max_x, 0, 0);
1205 	input_set_abs_params(input_dev, ABS_Y,
1206 			     0, data->max_y, 0, 0);
1207 	input_set_abs_params(input_dev, ABS_PRESSURE,
1208 			     0, 255, 0, 0);
1209 
1210 	/* For multi touch */
1211 	num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
1212 	error = input_mt_init_slots(input_dev, num_mt_slots, 0);
1213 	if (error)
1214 		goto err_free_object;
1215 	input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
1216 			     0, MXT_MAX_AREA, 0, 0);
1217 	input_set_abs_params(input_dev, ABS_MT_POSITION_X,
1218 			     0, data->max_x, 0, 0);
1219 	input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
1220 			     0, data->max_y, 0, 0);
1221 	input_set_abs_params(input_dev, ABS_MT_PRESSURE,
1222 			     0, 255, 0, 0);
1223 
1224 	input_set_drvdata(input_dev, data);
1225 	i2c_set_clientdata(client, data);
1226 
1227 	error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
1228 				     pdata->irqflags | IRQF_ONESHOT,
1229 				     client->name, data);
1230 	if (error) {
1231 		dev_err(&client->dev, "Failed to register interrupt\n");
1232 		goto err_free_object;
1233 	}
1234 
1235 	error = mxt_make_highchg(data);
1236 	if (error)
1237 		goto err_free_irq;
1238 
1239 	error = input_register_device(input_dev);
1240 	if (error)
1241 		goto err_free_irq;
1242 
1243 	error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group);
1244 	if (error)
1245 		goto err_unregister_device;
1246 
1247 	return 0;
1248 
1249 err_unregister_device:
1250 	input_unregister_device(input_dev);
1251 	input_dev = NULL;
1252 err_free_irq:
1253 	free_irq(client->irq, data);
1254 err_free_object:
1255 	kfree(data->object_table);
1256 err_free_mem:
1257 	input_free_device(input_dev);
1258 	kfree(data);
1259 	return error;
1260 }
1261 
1262 static int mxt_remove(struct i2c_client *client)
1263 {
1264 	struct mxt_data *data = i2c_get_clientdata(client);
1265 
1266 	sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
1267 	free_irq(data->irq, data);
1268 	input_unregister_device(data->input_dev);
1269 	kfree(data->object_table);
1270 	kfree(data);
1271 
1272 	return 0;
1273 }
1274 
1275 #ifdef CONFIG_PM_SLEEP
1276 static int mxt_suspend(struct device *dev)
1277 {
1278 	struct i2c_client *client = to_i2c_client(dev);
1279 	struct mxt_data *data = i2c_get_clientdata(client);
1280 	struct input_dev *input_dev = data->input_dev;
1281 
1282 	mutex_lock(&input_dev->mutex);
1283 
1284 	if (input_dev->users)
1285 		mxt_stop(data);
1286 
1287 	mutex_unlock(&input_dev->mutex);
1288 
1289 	return 0;
1290 }
1291 
1292 static int mxt_resume(struct device *dev)
1293 {
1294 	struct i2c_client *client = to_i2c_client(dev);
1295 	struct mxt_data *data = i2c_get_clientdata(client);
1296 	struct input_dev *input_dev = data->input_dev;
1297 
1298 	/* Soft reset */
1299 	mxt_write_object(data, MXT_GEN_COMMAND_T6,
1300 			MXT_COMMAND_RESET, 1);
1301 
1302 	msleep(MXT_RESET_TIME);
1303 
1304 	mutex_lock(&input_dev->mutex);
1305 
1306 	if (input_dev->users)
1307 		mxt_start(data);
1308 
1309 	mutex_unlock(&input_dev->mutex);
1310 
1311 	return 0;
1312 }
1313 #endif
1314 
1315 static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume);
1316 
1317 static const struct i2c_device_id mxt_id[] = {
1318 	{ "qt602240_ts", 0 },
1319 	{ "atmel_mxt_ts", 0 },
1320 	{ "atmel_mxt_tp", 0 },
1321 	{ "mXT224", 0 },
1322 	{ }
1323 };
1324 MODULE_DEVICE_TABLE(i2c, mxt_id);
1325 
1326 static struct i2c_driver mxt_driver = {
1327 	.driver = {
1328 		.name	= "atmel_mxt_ts",
1329 		.owner	= THIS_MODULE,
1330 		.pm	= &mxt_pm_ops,
1331 	},
1332 	.probe		= mxt_probe,
1333 	.remove		= mxt_remove,
1334 	.id_table	= mxt_id,
1335 };
1336 
1337 module_i2c_driver(mxt_driver);
1338 
1339 /* Module information */
1340 MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
1341 MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver");
1342 MODULE_LICENSE("GPL");
1343