xref: /linux/drivers/input/touchscreen/atmel_mxt_ts.c (revision b2058cd93d930d7b9f76f34590c0d432cd6470c7)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Atmel maXTouch Touchscreen driver
4  *
5  * Copyright (C) 2010 Samsung Electronics Co.Ltd
6  * Copyright (C) 2011-2014 Atmel Corporation
7  * Copyright (C) 2012 Google, Inc.
8  * Copyright (C) 2016 Zodiac Inflight Innovations
9  *
10  * Author: Joonyoung Shim <jy0922.shim@samsung.com>
11  */
12 
13 #include <linux/acpi.h>
14 #include <linux/dmi.h>
15 #include <linux/module.h>
16 #include <linux/init.h>
17 #include <linux/completion.h>
18 #include <linux/delay.h>
19 #include <linux/firmware.h>
20 #include <linux/i2c.h>
21 #include <linux/input/mt.h>
22 #include <linux/interrupt.h>
23 #include <linux/irq.h>
24 #include <linux/of.h>
25 #include <linux/property.h>
26 #include <linux/slab.h>
27 #include <linux/regulator/consumer.h>
28 #include <linux/gpio/consumer.h>
29 #include <asm/unaligned.h>
30 #include <media/v4l2-device.h>
31 #include <media/v4l2-ioctl.h>
32 #include <media/videobuf2-v4l2.h>
33 #include <media/videobuf2-vmalloc.h>
34 
35 /* Firmware files */
36 #define MXT_FW_NAME		"maxtouch.fw"
37 #define MXT_CFG_NAME		"maxtouch.cfg"
38 #define MXT_CFG_MAGIC		"OBP_RAW V1"
39 
40 /* Registers */
41 #define MXT_OBJECT_START	0x07
42 #define MXT_OBJECT_SIZE		6
43 #define MXT_INFO_CHECKSUM_SIZE	3
44 #define MXT_MAX_BLOCK_WRITE	256
45 
46 /* Object types */
47 #define MXT_DEBUG_DIAGNOSTIC_T37	37
48 #define MXT_GEN_MESSAGE_T5		5
49 #define MXT_GEN_COMMAND_T6		6
50 #define MXT_GEN_POWER_T7		7
51 #define MXT_GEN_ACQUIRE_T8		8
52 #define MXT_GEN_DATASOURCE_T53		53
53 #define MXT_TOUCH_MULTI_T9		9
54 #define MXT_TOUCH_KEYARRAY_T15		15
55 #define MXT_TOUCH_PROXIMITY_T23		23
56 #define MXT_TOUCH_PROXKEY_T52		52
57 #define MXT_PROCI_GRIPFACE_T20		20
58 #define MXT_PROCG_NOISE_T22		22
59 #define MXT_PROCI_ONETOUCH_T24		24
60 #define MXT_PROCI_TWOTOUCH_T27		27
61 #define MXT_PROCI_GRIP_T40		40
62 #define MXT_PROCI_PALM_T41		41
63 #define MXT_PROCI_TOUCHSUPPRESSION_T42	42
64 #define MXT_PROCI_STYLUS_T47		47
65 #define MXT_PROCG_NOISESUPPRESSION_T48	48
66 #define MXT_SPT_COMMSCONFIG_T18		18
67 #define MXT_SPT_GPIOPWM_T19		19
68 #define MXT_SPT_SELFTEST_T25		25
69 #define MXT_SPT_CTECONFIG_T28		28
70 #define MXT_SPT_USERDATA_T38		38
71 #define MXT_SPT_DIGITIZER_T43		43
72 #define MXT_SPT_MESSAGECOUNT_T44	44
73 #define MXT_SPT_CTECONFIG_T46		46
74 #define MXT_SPT_DYNAMICCONFIGURATIONCONTAINER_T71 71
75 #define MXT_TOUCH_MULTITOUCHSCREEN_T100 100
76 
77 /* MXT_GEN_MESSAGE_T5 object */
78 #define MXT_RPTID_NOMSG		0xff
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 /* Define for T6 status byte */
88 #define MXT_T6_STATUS_RESET	BIT(7)
89 #define MXT_T6_STATUS_OFL	BIT(6)
90 #define MXT_T6_STATUS_SIGERR	BIT(5)
91 #define MXT_T6_STATUS_CAL	BIT(4)
92 #define MXT_T6_STATUS_CFGERR	BIT(3)
93 #define MXT_T6_STATUS_COMSERR	BIT(2)
94 
95 /* MXT_GEN_POWER_T7 field */
96 struct t7_config {
97 	u8 idle;
98 	u8 active;
99 } __packed;
100 
101 #define MXT_POWER_CFG_RUN		0
102 #define MXT_POWER_CFG_DEEPSLEEP		1
103 
104 /* MXT_TOUCH_MULTI_T9 field */
105 #define MXT_T9_CTRL		0
106 #define MXT_T9_XSIZE		3
107 #define MXT_T9_YSIZE		4
108 #define MXT_T9_ORIENT		9
109 #define MXT_T9_RANGE		18
110 
111 /* MXT_TOUCH_MULTI_T9 status */
112 #define MXT_T9_UNGRIP		BIT(0)
113 #define MXT_T9_SUPPRESS		BIT(1)
114 #define MXT_T9_AMP		BIT(2)
115 #define MXT_T9_VECTOR		BIT(3)
116 #define MXT_T9_MOVE		BIT(4)
117 #define MXT_T9_RELEASE		BIT(5)
118 #define MXT_T9_PRESS		BIT(6)
119 #define MXT_T9_DETECT		BIT(7)
120 
121 struct t9_range {
122 	__le16 x;
123 	__le16 y;
124 } __packed;
125 
126 /* MXT_TOUCH_MULTI_T9 orient */
127 #define MXT_T9_ORIENT_SWITCH	BIT(0)
128 #define MXT_T9_ORIENT_INVERTX	BIT(1)
129 #define MXT_T9_ORIENT_INVERTY	BIT(2)
130 
131 /* MXT_SPT_COMMSCONFIG_T18 */
132 #define MXT_COMMS_CTRL		0
133 #define MXT_COMMS_CMD		1
134 #define MXT_COMMS_RETRIGEN	BIT(6)
135 
136 /* MXT_DEBUG_DIAGNOSTIC_T37 */
137 #define MXT_DIAGNOSTIC_PAGEUP	0x01
138 #define MXT_DIAGNOSTIC_DELTAS	0x10
139 #define MXT_DIAGNOSTIC_REFS	0x11
140 #define MXT_DIAGNOSTIC_SIZE	128
141 
142 #define MXT_FAMILY_1386			160
143 #define MXT1386_COLUMNS			3
144 #define MXT1386_PAGES_PER_COLUMN	8
145 
146 struct t37_debug {
147 #ifdef CONFIG_TOUCHSCREEN_ATMEL_MXT_T37
148 	u8 mode;
149 	u8 page;
150 	u8 data[MXT_DIAGNOSTIC_SIZE];
151 #endif
152 };
153 
154 /* Define for MXT_GEN_COMMAND_T6 */
155 #define MXT_BOOT_VALUE		0xa5
156 #define MXT_RESET_VALUE		0x01
157 #define MXT_BACKUP_VALUE	0x55
158 
159 /* T100 Multiple Touch Touchscreen */
160 #define MXT_T100_CTRL		0
161 #define MXT_T100_CFG1		1
162 #define MXT_T100_TCHAUX		3
163 #define MXT_T100_XSIZE		9
164 #define MXT_T100_XRANGE		13
165 #define MXT_T100_YSIZE		20
166 #define MXT_T100_YRANGE		24
167 
168 #define MXT_T100_CFG_SWITCHXY	BIT(5)
169 #define MXT_T100_CFG_INVERTY	BIT(6)
170 #define MXT_T100_CFG_INVERTX	BIT(7)
171 
172 #define MXT_T100_TCHAUX_VECT	BIT(0)
173 #define MXT_T100_TCHAUX_AMPL	BIT(1)
174 #define MXT_T100_TCHAUX_AREA	BIT(2)
175 
176 #define MXT_T100_DETECT		BIT(7)
177 #define MXT_T100_TYPE_MASK	0x70
178 
179 enum t100_type {
180 	MXT_T100_TYPE_FINGER		= 1,
181 	MXT_T100_TYPE_PASSIVE_STYLUS	= 2,
182 	MXT_T100_TYPE_HOVERING_FINGER	= 4,
183 	MXT_T100_TYPE_GLOVE		= 5,
184 	MXT_T100_TYPE_LARGE_TOUCH	= 6,
185 };
186 
187 #define MXT_DISTANCE_ACTIVE_TOUCH	0
188 #define MXT_DISTANCE_HOVERING		1
189 
190 #define MXT_TOUCH_MAJOR_DEFAULT		1
191 #define MXT_PRESSURE_DEFAULT		1
192 
193 /* Delay times */
194 #define MXT_BACKUP_TIME		50	/* msec */
195 #define MXT_RESET_GPIO_TIME	20	/* msec */
196 #define MXT_RESET_INVALID_CHG	100	/* msec */
197 #define MXT_RESET_TIME		200	/* msec */
198 #define MXT_RESET_TIMEOUT	3000	/* msec */
199 #define MXT_CRC_TIMEOUT		1000	/* msec */
200 #define MXT_FW_RESET_TIME	3000	/* msec */
201 #define MXT_FW_CHG_TIMEOUT	300	/* msec */
202 
203 /* Command to unlock bootloader */
204 #define MXT_UNLOCK_CMD_MSB	0xaa
205 #define MXT_UNLOCK_CMD_LSB	0xdc
206 
207 /* Bootloader mode status */
208 #define MXT_WAITING_BOOTLOAD_CMD	0xc0	/* valid 7 6 bit only */
209 #define MXT_WAITING_FRAME_DATA	0x80	/* valid 7 6 bit only */
210 #define MXT_FRAME_CRC_CHECK	0x02
211 #define MXT_FRAME_CRC_FAIL	0x03
212 #define MXT_FRAME_CRC_PASS	0x04
213 #define MXT_APP_CRC_FAIL	0x40	/* valid 7 8 bit only */
214 #define MXT_BOOT_STATUS_MASK	0x3f
215 #define MXT_BOOT_EXTENDED_ID	BIT(5)
216 #define MXT_BOOT_ID_MASK	0x1f
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_minus_one;
237 	u8 instances_minus_one;
238 	u8 num_report_ids;
239 } __packed;
240 
241 struct mxt_dbg {
242 	u16 t37_address;
243 	u16 diag_cmd_address;
244 	struct t37_debug *t37_buf;
245 	unsigned int t37_pages;
246 	unsigned int t37_nodes;
247 
248 	struct v4l2_device v4l2;
249 	struct v4l2_pix_format format;
250 	struct video_device vdev;
251 	struct vb2_queue queue;
252 	struct mutex lock;
253 	int input;
254 };
255 
256 enum v4l_dbg_inputs {
257 	MXT_V4L_INPUT_DELTAS,
258 	MXT_V4L_INPUT_REFS,
259 	MXT_V4L_INPUT_MAX,
260 };
261 
262 enum mxt_suspend_mode {
263 	MXT_SUSPEND_DEEP_SLEEP	= 0,
264 	MXT_SUSPEND_T9_CTRL	= 1,
265 };
266 
267 /* Config update context */
268 struct mxt_cfg {
269 	u8 *raw;
270 	size_t raw_size;
271 	off_t raw_pos;
272 
273 	u8 *mem;
274 	size_t mem_size;
275 	int start_ofs;
276 
277 	struct mxt_info info;
278 };
279 
280 /* Each client has this additional data */
281 struct mxt_data {
282 	struct i2c_client *client;
283 	struct input_dev *input_dev;
284 	char phys[64];		/* device physical location */
285 	struct mxt_object *object_table;
286 	struct mxt_info *info;
287 	void *raw_info_block;
288 	unsigned int irq;
289 	unsigned int max_x;
290 	unsigned int max_y;
291 	bool invertx;
292 	bool inverty;
293 	bool xy_switch;
294 	u8 xsize;
295 	u8 ysize;
296 	bool in_bootloader;
297 	u16 mem_size;
298 	u8 t100_aux_ampl;
299 	u8 t100_aux_area;
300 	u8 t100_aux_vect;
301 	u8 max_reportid;
302 	u32 config_crc;
303 	u32 info_crc;
304 	u8 bootloader_addr;
305 	u8 *msg_buf;
306 	u8 t6_status;
307 	bool update_input;
308 	u8 last_message_count;
309 	u8 num_touchids;
310 	u8 multitouch;
311 	struct t7_config t7_cfg;
312 	struct mxt_dbg dbg;
313 	struct regulator_bulk_data regulators[2];
314 	struct gpio_desc *reset_gpio;
315 	bool use_retrigen_workaround;
316 
317 	/* Cached parameters from object table */
318 	u16 T5_address;
319 	u8 T5_msg_size;
320 	u8 T6_reportid;
321 	u16 T6_address;
322 	u16 T7_address;
323 	u16 T71_address;
324 	u8 T9_reportid_min;
325 	u8 T9_reportid_max;
326 	u16 T18_address;
327 	u8 T19_reportid;
328 	u16 T44_address;
329 	u8 T100_reportid_min;
330 	u8 T100_reportid_max;
331 
332 	/* for fw update in bootloader */
333 	struct completion bl_completion;
334 
335 	/* for reset handling */
336 	struct completion reset_completion;
337 
338 	/* for config update handling */
339 	struct completion crc_completion;
340 
341 	u32 *t19_keymap;
342 	unsigned int t19_num_keys;
343 
344 	enum mxt_suspend_mode suspend_mode;
345 };
346 
347 struct mxt_vb2_buffer {
348 	struct vb2_buffer	vb;
349 	struct list_head	list;
350 };
351 
352 static size_t mxt_obj_size(const struct mxt_object *obj)
353 {
354 	return obj->size_minus_one + 1;
355 }
356 
357 static size_t mxt_obj_instances(const struct mxt_object *obj)
358 {
359 	return obj->instances_minus_one + 1;
360 }
361 
362 static bool mxt_object_readable(unsigned int type)
363 {
364 	switch (type) {
365 	case MXT_GEN_COMMAND_T6:
366 	case MXT_GEN_POWER_T7:
367 	case MXT_GEN_ACQUIRE_T8:
368 	case MXT_GEN_DATASOURCE_T53:
369 	case MXT_TOUCH_MULTI_T9:
370 	case MXT_TOUCH_KEYARRAY_T15:
371 	case MXT_TOUCH_PROXIMITY_T23:
372 	case MXT_TOUCH_PROXKEY_T52:
373 	case MXT_TOUCH_MULTITOUCHSCREEN_T100:
374 	case MXT_PROCI_GRIPFACE_T20:
375 	case MXT_PROCG_NOISE_T22:
376 	case MXT_PROCI_ONETOUCH_T24:
377 	case MXT_PROCI_TWOTOUCH_T27:
378 	case MXT_PROCI_GRIP_T40:
379 	case MXT_PROCI_PALM_T41:
380 	case MXT_PROCI_TOUCHSUPPRESSION_T42:
381 	case MXT_PROCI_STYLUS_T47:
382 	case MXT_PROCG_NOISESUPPRESSION_T48:
383 	case MXT_SPT_COMMSCONFIG_T18:
384 	case MXT_SPT_GPIOPWM_T19:
385 	case MXT_SPT_SELFTEST_T25:
386 	case MXT_SPT_CTECONFIG_T28:
387 	case MXT_SPT_USERDATA_T38:
388 	case MXT_SPT_DIGITIZER_T43:
389 	case MXT_SPT_CTECONFIG_T46:
390 	case MXT_SPT_DYNAMICCONFIGURATIONCONTAINER_T71:
391 		return true;
392 	default:
393 		return false;
394 	}
395 }
396 
397 static void mxt_dump_message(struct mxt_data *data, u8 *message)
398 {
399 	dev_dbg(&data->client->dev, "message: %*ph\n",
400 		data->T5_msg_size, message);
401 }
402 
403 static int mxt_wait_for_completion(struct mxt_data *data,
404 				   struct completion *comp,
405 				   unsigned int timeout_ms)
406 {
407 	struct device *dev = &data->client->dev;
408 	unsigned long timeout = msecs_to_jiffies(timeout_ms);
409 	long ret;
410 
411 	ret = wait_for_completion_interruptible_timeout(comp, timeout);
412 	if (ret < 0) {
413 		return ret;
414 	} else if (ret == 0) {
415 		dev_err(dev, "Wait for completion timed out.\n");
416 		return -ETIMEDOUT;
417 	}
418 	return 0;
419 }
420 
421 static int mxt_bootloader_read(struct mxt_data *data,
422 			       u8 *val, unsigned int count)
423 {
424 	int ret;
425 	struct i2c_msg msg;
426 
427 	msg.addr = data->bootloader_addr;
428 	msg.flags = data->client->flags & I2C_M_TEN;
429 	msg.flags |= I2C_M_RD;
430 	msg.len = count;
431 	msg.buf = val;
432 
433 	ret = i2c_transfer(data->client->adapter, &msg, 1);
434 	if (ret == 1) {
435 		ret = 0;
436 	} else {
437 		ret = ret < 0 ? ret : -EIO;
438 		dev_err(&data->client->dev, "%s: i2c recv failed (%d)\n",
439 			__func__, ret);
440 	}
441 
442 	return ret;
443 }
444 
445 static int mxt_bootloader_write(struct mxt_data *data,
446 				const u8 * const val, unsigned int count)
447 {
448 	int ret;
449 	struct i2c_msg msg;
450 
451 	msg.addr = data->bootloader_addr;
452 	msg.flags = data->client->flags & I2C_M_TEN;
453 	msg.len = count;
454 	msg.buf = (u8 *)val;
455 
456 	ret = i2c_transfer(data->client->adapter, &msg, 1);
457 	if (ret == 1) {
458 		ret = 0;
459 	} else {
460 		ret = ret < 0 ? ret : -EIO;
461 		dev_err(&data->client->dev, "%s: i2c send failed (%d)\n",
462 			__func__, ret);
463 	}
464 
465 	return ret;
466 }
467 
468 static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
469 {
470 	u8 appmode = data->client->addr;
471 	u8 bootloader;
472 	u8 family_id = data->info ? data->info->family_id : 0;
473 
474 	switch (appmode) {
475 	case 0x4a:
476 	case 0x4b:
477 		/* Chips after 1664S use different scheme */
478 		if (retry || family_id >= 0xa2) {
479 			bootloader = appmode - 0x24;
480 			break;
481 		}
482 		fallthrough;	/* for normal case */
483 	case 0x4c:
484 	case 0x4d:
485 	case 0x5a:
486 	case 0x5b:
487 		bootloader = appmode - 0x26;
488 		break;
489 
490 	default:
491 		dev_err(&data->client->dev,
492 			"Appmode i2c address 0x%02x not found\n",
493 			appmode);
494 		return -EINVAL;
495 	}
496 
497 	data->bootloader_addr = bootloader;
498 	return 0;
499 }
500 
501 static int mxt_probe_bootloader(struct mxt_data *data, bool alt_address)
502 {
503 	struct device *dev = &data->client->dev;
504 	int error;
505 	u8 val;
506 	bool crc_failure;
507 
508 	error = mxt_lookup_bootloader_address(data, alt_address);
509 	if (error)
510 		return error;
511 
512 	error = mxt_bootloader_read(data, &val, 1);
513 	if (error)
514 		return error;
515 
516 	/* Check app crc fail mode */
517 	crc_failure = (val & ~MXT_BOOT_STATUS_MASK) == MXT_APP_CRC_FAIL;
518 
519 	dev_err(dev, "Detected bootloader, status:%02X%s\n",
520 			val, crc_failure ? ", APP_CRC_FAIL" : "");
521 
522 	return 0;
523 }
524 
525 static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val)
526 {
527 	struct device *dev = &data->client->dev;
528 	u8 buf[3];
529 
530 	if (val & MXT_BOOT_EXTENDED_ID) {
531 		if (mxt_bootloader_read(data, &buf[0], 3) != 0) {
532 			dev_err(dev, "%s: i2c failure\n", __func__);
533 			return val;
534 		}
535 
536 		dev_dbg(dev, "Bootloader ID:%d Version:%d\n", buf[1], buf[2]);
537 
538 		return buf[0];
539 	} else {
540 		dev_dbg(dev, "Bootloader ID:%d\n", val & MXT_BOOT_ID_MASK);
541 
542 		return val;
543 	}
544 }
545 
546 static int mxt_check_bootloader(struct mxt_data *data, unsigned int state,
547 				bool wait)
548 {
549 	struct device *dev = &data->client->dev;
550 	u8 val;
551 	int ret;
552 
553 recheck:
554 	if (wait) {
555 		/*
556 		 * In application update mode, the interrupt
557 		 * line signals state transitions. We must wait for the
558 		 * CHG assertion before reading the status byte.
559 		 * Once the status byte has been read, the line is deasserted.
560 		 */
561 		ret = mxt_wait_for_completion(data, &data->bl_completion,
562 					      MXT_FW_CHG_TIMEOUT);
563 		if (ret) {
564 			/*
565 			 * TODO: handle -ERESTARTSYS better by terminating
566 			 * fw update process before returning to userspace
567 			 * by writing length 0x000 to device (iff we are in
568 			 * WAITING_FRAME_DATA state).
569 			 */
570 			dev_err(dev, "Update wait error %d\n", ret);
571 			return ret;
572 		}
573 	}
574 
575 	ret = mxt_bootloader_read(data, &val, 1);
576 	if (ret)
577 		return ret;
578 
579 	if (state == MXT_WAITING_BOOTLOAD_CMD)
580 		val = mxt_get_bootloader_version(data, val);
581 
582 	switch (state) {
583 	case MXT_WAITING_BOOTLOAD_CMD:
584 	case MXT_WAITING_FRAME_DATA:
585 	case MXT_APP_CRC_FAIL:
586 		val &= ~MXT_BOOT_STATUS_MASK;
587 		break;
588 	case MXT_FRAME_CRC_PASS:
589 		if (val == MXT_FRAME_CRC_CHECK) {
590 			goto recheck;
591 		} else if (val == MXT_FRAME_CRC_FAIL) {
592 			dev_err(dev, "Bootloader CRC fail\n");
593 			return -EINVAL;
594 		}
595 		break;
596 	default:
597 		return -EINVAL;
598 	}
599 
600 	if (val != state) {
601 		dev_err(dev, "Invalid bootloader state %02X != %02X\n",
602 			val, state);
603 		return -EINVAL;
604 	}
605 
606 	return 0;
607 }
608 
609 static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock)
610 {
611 	int ret;
612 	u8 buf[2];
613 
614 	if (unlock) {
615 		buf[0] = MXT_UNLOCK_CMD_LSB;
616 		buf[1] = MXT_UNLOCK_CMD_MSB;
617 	} else {
618 		buf[0] = 0x01;
619 		buf[1] = 0x01;
620 	}
621 
622 	ret = mxt_bootloader_write(data, buf, 2);
623 	if (ret)
624 		return ret;
625 
626 	return 0;
627 }
628 
629 static int __mxt_read_reg(struct i2c_client *client,
630 			       u16 reg, u16 len, void *val)
631 {
632 	struct i2c_msg xfer[2];
633 	u8 buf[2];
634 	int ret;
635 
636 	buf[0] = reg & 0xff;
637 	buf[1] = (reg >> 8) & 0xff;
638 
639 	/* Write register */
640 	xfer[0].addr = client->addr;
641 	xfer[0].flags = 0;
642 	xfer[0].len = 2;
643 	xfer[0].buf = buf;
644 
645 	/* Read data */
646 	xfer[1].addr = client->addr;
647 	xfer[1].flags = I2C_M_RD;
648 	xfer[1].len = len;
649 	xfer[1].buf = val;
650 
651 	ret = i2c_transfer(client->adapter, xfer, 2);
652 	if (ret == 2) {
653 		ret = 0;
654 	} else {
655 		if (ret >= 0)
656 			ret = -EIO;
657 		dev_err(&client->dev, "%s: i2c transfer failed (%d)\n",
658 			__func__, ret);
659 	}
660 
661 	return ret;
662 }
663 
664 static int __mxt_write_reg(struct i2c_client *client, u16 reg, u16 len,
665 			   const void *val)
666 {
667 	u8 *buf;
668 	size_t count;
669 	int ret;
670 
671 	count = len + 2;
672 	buf = kmalloc(count, GFP_KERNEL);
673 	if (!buf)
674 		return -ENOMEM;
675 
676 	buf[0] = reg & 0xff;
677 	buf[1] = (reg >> 8) & 0xff;
678 	memcpy(&buf[2], val, len);
679 
680 	ret = i2c_master_send(client, buf, count);
681 	if (ret == count) {
682 		ret = 0;
683 	} else {
684 		if (ret >= 0)
685 			ret = -EIO;
686 		dev_err(&client->dev, "%s: i2c send failed (%d)\n",
687 			__func__, ret);
688 	}
689 
690 	kfree(buf);
691 	return ret;
692 }
693 
694 static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val)
695 {
696 	return __mxt_write_reg(client, reg, 1, &val);
697 }
698 
699 static struct mxt_object *
700 mxt_get_object(struct mxt_data *data, u8 type)
701 {
702 	struct mxt_object *object;
703 	int i;
704 
705 	for (i = 0; i < data->info->object_num; i++) {
706 		object = data->object_table + i;
707 		if (object->type == type)
708 			return object;
709 	}
710 
711 	dev_warn(&data->client->dev, "Invalid object type T%u\n", type);
712 	return NULL;
713 }
714 
715 static void mxt_proc_t6_messages(struct mxt_data *data, u8 *msg)
716 {
717 	struct device *dev = &data->client->dev;
718 	u8 status = msg[1];
719 	u32 crc = msg[2] | (msg[3] << 8) | (msg[4] << 16);
720 
721 	if (crc != data->config_crc) {
722 		data->config_crc = crc;
723 		dev_dbg(dev, "T6 Config Checksum: 0x%06X\n", crc);
724 	}
725 
726 	complete(&data->crc_completion);
727 
728 	/* Detect reset */
729 	if (status & MXT_T6_STATUS_RESET)
730 		complete(&data->reset_completion);
731 
732 	/* Output debug if status has changed */
733 	if (status != data->t6_status)
734 		dev_dbg(dev, "T6 Status 0x%02X%s%s%s%s%s%s%s\n",
735 			status,
736 			status == 0 ? " OK" : "",
737 			status & MXT_T6_STATUS_RESET ? " RESET" : "",
738 			status & MXT_T6_STATUS_OFL ? " OFL" : "",
739 			status & MXT_T6_STATUS_SIGERR ? " SIGERR" : "",
740 			status & MXT_T6_STATUS_CAL ? " CAL" : "",
741 			status & MXT_T6_STATUS_CFGERR ? " CFGERR" : "",
742 			status & MXT_T6_STATUS_COMSERR ? " COMSERR" : "");
743 
744 	/* Save current status */
745 	data->t6_status = status;
746 }
747 
748 static int mxt_write_object(struct mxt_data *data,
749 				 u8 type, u8 offset, u8 val)
750 {
751 	struct mxt_object *object;
752 	u16 reg;
753 
754 	object = mxt_get_object(data, type);
755 	if (!object || offset >= mxt_obj_size(object))
756 		return -EINVAL;
757 
758 	reg = object->start_address;
759 	return mxt_write_reg(data->client, reg + offset, val);
760 }
761 
762 static void mxt_input_button(struct mxt_data *data, u8 *message)
763 {
764 	struct input_dev *input = data->input_dev;
765 	int i;
766 
767 	for (i = 0; i < data->t19_num_keys; i++) {
768 		if (data->t19_keymap[i] == KEY_RESERVED)
769 			continue;
770 
771 		/* Active-low switch */
772 		input_report_key(input, data->t19_keymap[i],
773 				 !(message[1] & BIT(i)));
774 	}
775 }
776 
777 static void mxt_input_sync(struct mxt_data *data)
778 {
779 	input_mt_report_pointer_emulation(data->input_dev,
780 					  data->t19_num_keys);
781 	input_sync(data->input_dev);
782 }
783 
784 static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
785 {
786 	struct device *dev = &data->client->dev;
787 	struct input_dev *input_dev = data->input_dev;
788 	int id;
789 	u8 status;
790 	int x;
791 	int y;
792 	int area;
793 	int amplitude;
794 
795 	id = message[0] - data->T9_reportid_min;
796 	status = message[1];
797 	x = (message[2] << 4) | ((message[4] >> 4) & 0xf);
798 	y = (message[3] << 4) | ((message[4] & 0xf));
799 
800 	/* Handle 10/12 bit switching */
801 	if (data->max_x < 1024)
802 		x >>= 2;
803 	if (data->max_y < 1024)
804 		y >>= 2;
805 
806 	area = message[5];
807 	amplitude = message[6];
808 
809 	dev_dbg(dev,
810 		"[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n",
811 		id,
812 		(status & MXT_T9_DETECT) ? 'D' : '.',
813 		(status & MXT_T9_PRESS) ? 'P' : '.',
814 		(status & MXT_T9_RELEASE) ? 'R' : '.',
815 		(status & MXT_T9_MOVE) ? 'M' : '.',
816 		(status & MXT_T9_VECTOR) ? 'V' : '.',
817 		(status & MXT_T9_AMP) ? 'A' : '.',
818 		(status & MXT_T9_SUPPRESS) ? 'S' : '.',
819 		(status & MXT_T9_UNGRIP) ? 'U' : '.',
820 		x, y, area, amplitude);
821 
822 	input_mt_slot(input_dev, id);
823 
824 	if (status & MXT_T9_DETECT) {
825 		/*
826 		 * Multiple bits may be set if the host is slow to read
827 		 * the status messages, indicating all the events that
828 		 * have happened.
829 		 */
830 		if (status & MXT_T9_RELEASE) {
831 			input_mt_report_slot_inactive(input_dev);
832 			mxt_input_sync(data);
833 		}
834 
835 		/* if active, pressure must be non-zero */
836 		if (!amplitude)
837 			amplitude = MXT_PRESSURE_DEFAULT;
838 
839 		/* Touch active */
840 		input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 1);
841 		input_report_abs(input_dev, ABS_MT_POSITION_X, x);
842 		input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
843 		input_report_abs(input_dev, ABS_MT_PRESSURE, amplitude);
844 		input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area);
845 	} else {
846 		/* Touch no longer active, close out slot */
847 		input_mt_report_slot_inactive(input_dev);
848 	}
849 
850 	data->update_input = true;
851 }
852 
853 static void mxt_proc_t100_message(struct mxt_data *data, u8 *message)
854 {
855 	struct device *dev = &data->client->dev;
856 	struct input_dev *input_dev = data->input_dev;
857 	int id;
858 	u8 status;
859 	u8 type = 0;
860 	u16 x;
861 	u16 y;
862 	int distance = 0;
863 	int tool = 0;
864 	u8 major = 0;
865 	u8 pressure = 0;
866 	u8 orientation = 0;
867 
868 	id = message[0] - data->T100_reportid_min - 2;
869 
870 	/* ignore SCRSTATUS events */
871 	if (id < 0)
872 		return;
873 
874 	status = message[1];
875 	x = get_unaligned_le16(&message[2]);
876 	y = get_unaligned_le16(&message[4]);
877 
878 	if (status & MXT_T100_DETECT) {
879 		type = (status & MXT_T100_TYPE_MASK) >> 4;
880 
881 		switch (type) {
882 		case MXT_T100_TYPE_HOVERING_FINGER:
883 			tool = MT_TOOL_FINGER;
884 			distance = MXT_DISTANCE_HOVERING;
885 
886 			if (data->t100_aux_vect)
887 				orientation = message[data->t100_aux_vect];
888 
889 			break;
890 
891 		case MXT_T100_TYPE_FINGER:
892 		case MXT_T100_TYPE_GLOVE:
893 			tool = MT_TOOL_FINGER;
894 			distance = MXT_DISTANCE_ACTIVE_TOUCH;
895 
896 			if (data->t100_aux_area)
897 				major = message[data->t100_aux_area];
898 
899 			if (data->t100_aux_ampl)
900 				pressure = message[data->t100_aux_ampl];
901 
902 			if (data->t100_aux_vect)
903 				orientation = message[data->t100_aux_vect];
904 
905 			break;
906 
907 		case MXT_T100_TYPE_PASSIVE_STYLUS:
908 			tool = MT_TOOL_PEN;
909 
910 			/*
911 			 * Passive stylus is reported with size zero so
912 			 * hardcode.
913 			 */
914 			major = MXT_TOUCH_MAJOR_DEFAULT;
915 
916 			if (data->t100_aux_ampl)
917 				pressure = message[data->t100_aux_ampl];
918 
919 			break;
920 
921 		case MXT_T100_TYPE_LARGE_TOUCH:
922 			/* Ignore suppressed touch */
923 			break;
924 
925 		default:
926 			dev_dbg(dev, "Unexpected T100 type\n");
927 			return;
928 		}
929 	}
930 
931 	/*
932 	 * Values reported should be non-zero if tool is touching the
933 	 * device
934 	 */
935 	if (!pressure && type != MXT_T100_TYPE_HOVERING_FINGER)
936 		pressure = MXT_PRESSURE_DEFAULT;
937 
938 	input_mt_slot(input_dev, id);
939 
940 	if (status & MXT_T100_DETECT) {
941 		dev_dbg(dev, "[%u] type:%u x:%u y:%u a:%02X p:%02X v:%02X\n",
942 			id, type, x, y, major, pressure, orientation);
943 
944 		input_mt_report_slot_state(input_dev, tool, 1);
945 		input_report_abs(input_dev, ABS_MT_POSITION_X, x);
946 		input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
947 		input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, major);
948 		input_report_abs(input_dev, ABS_MT_PRESSURE, pressure);
949 		input_report_abs(input_dev, ABS_MT_DISTANCE, distance);
950 		input_report_abs(input_dev, ABS_MT_ORIENTATION, orientation);
951 	} else {
952 		dev_dbg(dev, "[%u] release\n", id);
953 
954 		/* close out slot */
955 		input_mt_report_slot_inactive(input_dev);
956 	}
957 
958 	data->update_input = true;
959 }
960 
961 static int mxt_proc_message(struct mxt_data *data, u8 *message)
962 {
963 	u8 report_id = message[0];
964 
965 	if (report_id == MXT_RPTID_NOMSG)
966 		return 0;
967 
968 	if (report_id == data->T6_reportid) {
969 		mxt_proc_t6_messages(data, message);
970 	} else if (!data->input_dev) {
971 		/*
972 		 * Do not report events if input device
973 		 * is not yet registered.
974 		 */
975 		mxt_dump_message(data, message);
976 	} else if (report_id >= data->T9_reportid_min &&
977 		   report_id <= data->T9_reportid_max) {
978 		mxt_proc_t9_message(data, message);
979 	} else if (report_id >= data->T100_reportid_min &&
980 		   report_id <= data->T100_reportid_max) {
981 		mxt_proc_t100_message(data, message);
982 	} else if (report_id == data->T19_reportid) {
983 		mxt_input_button(data, message);
984 		data->update_input = true;
985 	} else {
986 		mxt_dump_message(data, message);
987 	}
988 
989 	return 1;
990 }
991 
992 static int mxt_read_and_process_messages(struct mxt_data *data, u8 count)
993 {
994 	struct device *dev = &data->client->dev;
995 	int ret;
996 	int i;
997 	u8 num_valid = 0;
998 
999 	/* Safety check for msg_buf */
1000 	if (count > data->max_reportid)
1001 		return -EINVAL;
1002 
1003 	/* Process remaining messages if necessary */
1004 	ret = __mxt_read_reg(data->client, data->T5_address,
1005 				data->T5_msg_size * count, data->msg_buf);
1006 	if (ret) {
1007 		dev_err(dev, "Failed to read %u messages (%d)\n", count, ret);
1008 		return ret;
1009 	}
1010 
1011 	for (i = 0;  i < count; i++) {
1012 		ret = mxt_proc_message(data,
1013 			data->msg_buf + data->T5_msg_size * i);
1014 
1015 		if (ret == 1)
1016 			num_valid++;
1017 	}
1018 
1019 	/* return number of messages read */
1020 	return num_valid;
1021 }
1022 
1023 static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
1024 {
1025 	struct device *dev = &data->client->dev;
1026 	int ret;
1027 	u8 count, num_left;
1028 
1029 	/* Read T44 and T5 together */
1030 	ret = __mxt_read_reg(data->client, data->T44_address,
1031 		data->T5_msg_size + 1, data->msg_buf);
1032 	if (ret) {
1033 		dev_err(dev, "Failed to read T44 and T5 (%d)\n", ret);
1034 		return IRQ_NONE;
1035 	}
1036 
1037 	count = data->msg_buf[0];
1038 
1039 	/*
1040 	 * This condition may be caused by the CHG line being configured in
1041 	 * Mode 0. It results in unnecessary I2C operations but it is benign.
1042 	 */
1043 	if (count == 0)
1044 		return IRQ_NONE;
1045 
1046 	if (count > data->max_reportid) {
1047 		dev_warn(dev, "T44 count %d exceeded max report id\n", count);
1048 		count = data->max_reportid;
1049 	}
1050 
1051 	/* Process first message */
1052 	ret = mxt_proc_message(data, data->msg_buf + 1);
1053 	if (ret < 0) {
1054 		dev_warn(dev, "Unexpected invalid message\n");
1055 		return IRQ_NONE;
1056 	}
1057 
1058 	num_left = count - 1;
1059 
1060 	/* Process remaining messages if necessary */
1061 	if (num_left) {
1062 		ret = mxt_read_and_process_messages(data, num_left);
1063 		if (ret < 0)
1064 			goto end;
1065 		else if (ret != num_left)
1066 			dev_warn(dev, "Unexpected invalid message\n");
1067 	}
1068 
1069 end:
1070 	if (data->update_input) {
1071 		mxt_input_sync(data);
1072 		data->update_input = false;
1073 	}
1074 
1075 	return IRQ_HANDLED;
1076 }
1077 
1078 static int mxt_process_messages_until_invalid(struct mxt_data *data)
1079 {
1080 	struct device *dev = &data->client->dev;
1081 	int count, read;
1082 	u8 tries = 2;
1083 
1084 	count = data->max_reportid;
1085 
1086 	/* Read messages until we force an invalid */
1087 	do {
1088 		read = mxt_read_and_process_messages(data, count);
1089 		if (read < count)
1090 			return 0;
1091 	} while (--tries);
1092 
1093 	if (data->update_input) {
1094 		mxt_input_sync(data);
1095 		data->update_input = false;
1096 	}
1097 
1098 	dev_err(dev, "CHG pin isn't cleared\n");
1099 	return -EBUSY;
1100 }
1101 
1102 static irqreturn_t mxt_process_messages(struct mxt_data *data)
1103 {
1104 	int total_handled, num_handled;
1105 	u8 count = data->last_message_count;
1106 
1107 	if (count < 1 || count > data->max_reportid)
1108 		count = 1;
1109 
1110 	/* include final invalid message */
1111 	total_handled = mxt_read_and_process_messages(data, count + 1);
1112 	if (total_handled < 0)
1113 		return IRQ_NONE;
1114 	/* if there were invalid messages, then we are done */
1115 	else if (total_handled <= count)
1116 		goto update_count;
1117 
1118 	/* keep reading two msgs until one is invalid or reportid limit */
1119 	do {
1120 		num_handled = mxt_read_and_process_messages(data, 2);
1121 		if (num_handled < 0)
1122 			return IRQ_NONE;
1123 
1124 		total_handled += num_handled;
1125 
1126 		if (num_handled < 2)
1127 			break;
1128 	} while (total_handled < data->num_touchids);
1129 
1130 update_count:
1131 	data->last_message_count = total_handled;
1132 
1133 	if (data->update_input) {
1134 		mxt_input_sync(data);
1135 		data->update_input = false;
1136 	}
1137 
1138 	return IRQ_HANDLED;
1139 }
1140 
1141 static irqreturn_t mxt_interrupt(int irq, void *dev_id)
1142 {
1143 	struct mxt_data *data = dev_id;
1144 
1145 	if (data->in_bootloader) {
1146 		/* bootloader state transition completion */
1147 		complete(&data->bl_completion);
1148 		return IRQ_HANDLED;
1149 	}
1150 
1151 	if (!data->object_table)
1152 		return IRQ_HANDLED;
1153 
1154 	if (data->T44_address) {
1155 		return mxt_process_messages_t44(data);
1156 	} else {
1157 		return mxt_process_messages(data);
1158 	}
1159 }
1160 
1161 static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset,
1162 			  u8 value, bool wait)
1163 {
1164 	u16 reg;
1165 	u8 command_register;
1166 	int timeout_counter = 0;
1167 	int ret;
1168 
1169 	reg = data->T6_address + cmd_offset;
1170 
1171 	ret = mxt_write_reg(data->client, reg, value);
1172 	if (ret)
1173 		return ret;
1174 
1175 	if (!wait)
1176 		return 0;
1177 
1178 	do {
1179 		msleep(20);
1180 		ret = __mxt_read_reg(data->client, reg, 1, &command_register);
1181 		if (ret)
1182 			return ret;
1183 	} while (command_register != 0 && timeout_counter++ <= 100);
1184 
1185 	if (timeout_counter > 100) {
1186 		dev_err(&data->client->dev, "Command failed!\n");
1187 		return -EIO;
1188 	}
1189 
1190 	return 0;
1191 }
1192 
1193 static int mxt_acquire_irq(struct mxt_data *data)
1194 {
1195 	int error;
1196 
1197 	enable_irq(data->irq);
1198 
1199 	if (data->use_retrigen_workaround) {
1200 		error = mxt_process_messages_until_invalid(data);
1201 		if (error)
1202 			return error;
1203 	}
1204 
1205 	return 0;
1206 }
1207 
1208 static int mxt_soft_reset(struct mxt_data *data)
1209 {
1210 	struct device *dev = &data->client->dev;
1211 	int ret = 0;
1212 
1213 	dev_info(dev, "Resetting device\n");
1214 
1215 	disable_irq(data->irq);
1216 
1217 	reinit_completion(&data->reset_completion);
1218 
1219 	ret = mxt_t6_command(data, MXT_COMMAND_RESET, MXT_RESET_VALUE, false);
1220 	if (ret)
1221 		return ret;
1222 
1223 	/* Ignore CHG line for 100ms after reset */
1224 	msleep(MXT_RESET_INVALID_CHG);
1225 
1226 	mxt_acquire_irq(data);
1227 
1228 	ret = mxt_wait_for_completion(data, &data->reset_completion,
1229 				      MXT_RESET_TIMEOUT);
1230 	if (ret)
1231 		return ret;
1232 
1233 	return 0;
1234 }
1235 
1236 static void mxt_update_crc(struct mxt_data *data, u8 cmd, u8 value)
1237 {
1238 	/*
1239 	 * On failure, CRC is set to 0 and config will always be
1240 	 * downloaded.
1241 	 */
1242 	data->config_crc = 0;
1243 	reinit_completion(&data->crc_completion);
1244 
1245 	mxt_t6_command(data, cmd, value, true);
1246 
1247 	/*
1248 	 * Wait for crc message. On failure, CRC is set to 0 and config will
1249 	 * always be downloaded.
1250 	 */
1251 	mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT);
1252 }
1253 
1254 static void mxt_calc_crc24(u32 *crc, u8 firstbyte, u8 secondbyte)
1255 {
1256 	static const unsigned int crcpoly = 0x80001B;
1257 	u32 result;
1258 	u32 data_word;
1259 
1260 	data_word = (secondbyte << 8) | firstbyte;
1261 	result = ((*crc << 1) ^ data_word);
1262 
1263 	if (result & 0x1000000)
1264 		result ^= crcpoly;
1265 
1266 	*crc = result;
1267 }
1268 
1269 static u32 mxt_calculate_crc(u8 *base, off_t start_off, off_t end_off)
1270 {
1271 	u32 crc = 0;
1272 	u8 *ptr = base + start_off;
1273 	u8 *last_val = base + end_off - 1;
1274 
1275 	if (end_off < start_off)
1276 		return -EINVAL;
1277 
1278 	while (ptr < last_val) {
1279 		mxt_calc_crc24(&crc, *ptr, *(ptr + 1));
1280 		ptr += 2;
1281 	}
1282 
1283 	/* if len is odd, fill the last byte with 0 */
1284 	if (ptr == last_val)
1285 		mxt_calc_crc24(&crc, *ptr, 0);
1286 
1287 	/* Mask to 24-bit */
1288 	crc &= 0x00FFFFFF;
1289 
1290 	return crc;
1291 }
1292 
1293 static int mxt_check_retrigen(struct mxt_data *data)
1294 {
1295 	struct i2c_client *client = data->client;
1296 	int error;
1297 	int val;
1298 	struct irq_data *irqd;
1299 
1300 	data->use_retrigen_workaround = false;
1301 
1302 	irqd = irq_get_irq_data(data->irq);
1303 	if (!irqd)
1304 		return -EINVAL;
1305 
1306 	if (irqd_is_level_type(irqd))
1307 		return 0;
1308 
1309 	if (data->T18_address) {
1310 		error = __mxt_read_reg(client,
1311 				       data->T18_address + MXT_COMMS_CTRL,
1312 				       1, &val);
1313 		if (error)
1314 			return error;
1315 
1316 		if (val & MXT_COMMS_RETRIGEN)
1317 			return 0;
1318 	}
1319 
1320 	dev_warn(&client->dev, "Enabling RETRIGEN workaround\n");
1321 	data->use_retrigen_workaround = true;
1322 	return 0;
1323 }
1324 
1325 static int mxt_prepare_cfg_mem(struct mxt_data *data, struct mxt_cfg *cfg)
1326 {
1327 	struct device *dev = &data->client->dev;
1328 	struct mxt_object *object;
1329 	unsigned int type, instance, size, byte_offset;
1330 	int offset;
1331 	int ret;
1332 	int i;
1333 	u16 reg;
1334 	u8 val;
1335 
1336 	while (cfg->raw_pos < cfg->raw_size) {
1337 		/* Read type, instance, length */
1338 		ret = sscanf(cfg->raw + cfg->raw_pos, "%x %x %x%n",
1339 			     &type, &instance, &size, &offset);
1340 		if (ret == 0) {
1341 			/* EOF */
1342 			break;
1343 		} else if (ret != 3) {
1344 			dev_err(dev, "Bad format: failed to parse object\n");
1345 			return -EINVAL;
1346 		}
1347 		cfg->raw_pos += offset;
1348 
1349 		object = mxt_get_object(data, type);
1350 		if (!object) {
1351 			/* Skip object */
1352 			for (i = 0; i < size; i++) {
1353 				ret = sscanf(cfg->raw + cfg->raw_pos, "%hhx%n",
1354 					     &val, &offset);
1355 				if (ret != 1) {
1356 					dev_err(dev, "Bad format in T%d at %d\n",
1357 						type, i);
1358 					return -EINVAL;
1359 				}
1360 				cfg->raw_pos += offset;
1361 			}
1362 			continue;
1363 		}
1364 
1365 		if (size > mxt_obj_size(object)) {
1366 			/*
1367 			 * Either we are in fallback mode due to wrong
1368 			 * config or config from a later fw version,
1369 			 * or the file is corrupt or hand-edited.
1370 			 */
1371 			dev_warn(dev, "Discarding %zu byte(s) in T%u\n",
1372 				 size - mxt_obj_size(object), type);
1373 		} else if (mxt_obj_size(object) > size) {
1374 			/*
1375 			 * If firmware is upgraded, new bytes may be added to
1376 			 * end of objects. It is generally forward compatible
1377 			 * to zero these bytes - previous behaviour will be
1378 			 * retained. However this does invalidate the CRC and
1379 			 * will force fallback mode until the configuration is
1380 			 * updated. We warn here but do nothing else - the
1381 			 * malloc has zeroed the entire configuration.
1382 			 */
1383 			dev_warn(dev, "Zeroing %zu byte(s) in T%d\n",
1384 				 mxt_obj_size(object) - size, type);
1385 		}
1386 
1387 		if (instance >= mxt_obj_instances(object)) {
1388 			dev_err(dev, "Object instances exceeded!\n");
1389 			return -EINVAL;
1390 		}
1391 
1392 		reg = object->start_address + mxt_obj_size(object) * instance;
1393 
1394 		for (i = 0; i < size; i++) {
1395 			ret = sscanf(cfg->raw + cfg->raw_pos, "%hhx%n",
1396 				     &val,
1397 				     &offset);
1398 			if (ret != 1) {
1399 				dev_err(dev, "Bad format in T%d at %d\n",
1400 					type, i);
1401 				return -EINVAL;
1402 			}
1403 			cfg->raw_pos += offset;
1404 
1405 			if (i > mxt_obj_size(object))
1406 				continue;
1407 
1408 			byte_offset = reg + i - cfg->start_ofs;
1409 
1410 			if (byte_offset >= 0 && byte_offset < cfg->mem_size) {
1411 				*(cfg->mem + byte_offset) = val;
1412 			} else {
1413 				dev_err(dev, "Bad object: reg:%d, T%d, ofs=%d\n",
1414 					reg, object->type, byte_offset);
1415 				return -EINVAL;
1416 			}
1417 		}
1418 	}
1419 
1420 	return 0;
1421 }
1422 
1423 static int mxt_upload_cfg_mem(struct mxt_data *data, struct mxt_cfg *cfg)
1424 {
1425 	unsigned int byte_offset = 0;
1426 	int error;
1427 
1428 	/* Write configuration as blocks */
1429 	while (byte_offset < cfg->mem_size) {
1430 		unsigned int size = cfg->mem_size - byte_offset;
1431 
1432 		if (size > MXT_MAX_BLOCK_WRITE)
1433 			size = MXT_MAX_BLOCK_WRITE;
1434 
1435 		error = __mxt_write_reg(data->client,
1436 					cfg->start_ofs + byte_offset,
1437 					size, cfg->mem + byte_offset);
1438 		if (error) {
1439 			dev_err(&data->client->dev,
1440 				"Config write error, ret=%d\n", error);
1441 			return error;
1442 		}
1443 
1444 		byte_offset += size;
1445 	}
1446 
1447 	return 0;
1448 }
1449 
1450 static int mxt_init_t7_power_cfg(struct mxt_data *data);
1451 
1452 /*
1453  * mxt_update_cfg - download configuration to chip
1454  *
1455  * Atmel Raw Config File Format
1456  *
1457  * The first four lines of the raw config file contain:
1458  *  1) Version
1459  *  2) Chip ID Information (first 7 bytes of device memory)
1460  *  3) Chip Information Block 24-bit CRC Checksum
1461  *  4) Chip Configuration 24-bit CRC Checksum
1462  *
1463  * The rest of the file consists of one line per object instance:
1464  *   <TYPE> <INSTANCE> <SIZE> <CONTENTS>
1465  *
1466  *   <TYPE> - 2-byte object type as hex
1467  *   <INSTANCE> - 2-byte object instance number as hex
1468  *   <SIZE> - 2-byte object size as hex
1469  *   <CONTENTS> - array of <SIZE> 1-byte hex values
1470  */
1471 static int mxt_update_cfg(struct mxt_data *data, const struct firmware *fw)
1472 {
1473 	struct device *dev = &data->client->dev;
1474 	struct mxt_cfg cfg;
1475 	int ret;
1476 	int offset;
1477 	int i;
1478 	u32 info_crc, config_crc, calculated_crc;
1479 	u16 crc_start = 0;
1480 
1481 	/* Make zero terminated copy of the OBP_RAW file */
1482 	cfg.raw = kmemdup_nul(fw->data, fw->size, GFP_KERNEL);
1483 	if (!cfg.raw)
1484 		return -ENOMEM;
1485 
1486 	cfg.raw_size = fw->size;
1487 
1488 	mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1);
1489 
1490 	if (strncmp(cfg.raw, MXT_CFG_MAGIC, strlen(MXT_CFG_MAGIC))) {
1491 		dev_err(dev, "Unrecognised config file\n");
1492 		ret = -EINVAL;
1493 		goto release_raw;
1494 	}
1495 
1496 	cfg.raw_pos = strlen(MXT_CFG_MAGIC);
1497 
1498 	/* Load information block and check */
1499 	for (i = 0; i < sizeof(struct mxt_info); i++) {
1500 		ret = sscanf(cfg.raw + cfg.raw_pos, "%hhx%n",
1501 			     (unsigned char *)&cfg.info + i,
1502 			     &offset);
1503 		if (ret != 1) {
1504 			dev_err(dev, "Bad format\n");
1505 			ret = -EINVAL;
1506 			goto release_raw;
1507 		}
1508 
1509 		cfg.raw_pos += offset;
1510 	}
1511 
1512 	if (cfg.info.family_id != data->info->family_id) {
1513 		dev_err(dev, "Family ID mismatch!\n");
1514 		ret = -EINVAL;
1515 		goto release_raw;
1516 	}
1517 
1518 	if (cfg.info.variant_id != data->info->variant_id) {
1519 		dev_err(dev, "Variant ID mismatch!\n");
1520 		ret = -EINVAL;
1521 		goto release_raw;
1522 	}
1523 
1524 	/* Read CRCs */
1525 	ret = sscanf(cfg.raw + cfg.raw_pos, "%x%n", &info_crc, &offset);
1526 	if (ret != 1) {
1527 		dev_err(dev, "Bad format: failed to parse Info CRC\n");
1528 		ret = -EINVAL;
1529 		goto release_raw;
1530 	}
1531 	cfg.raw_pos += offset;
1532 
1533 	ret = sscanf(cfg.raw + cfg.raw_pos, "%x%n", &config_crc, &offset);
1534 	if (ret != 1) {
1535 		dev_err(dev, "Bad format: failed to parse Config CRC\n");
1536 		ret = -EINVAL;
1537 		goto release_raw;
1538 	}
1539 	cfg.raw_pos += offset;
1540 
1541 	/*
1542 	 * The Info Block CRC is calculated over mxt_info and the object
1543 	 * table. If it does not match then we are trying to load the
1544 	 * configuration from a different chip or firmware version, so
1545 	 * the configuration CRC is invalid anyway.
1546 	 */
1547 	if (info_crc == data->info_crc) {
1548 		if (config_crc == 0 || data->config_crc == 0) {
1549 			dev_info(dev, "CRC zero, attempting to apply config\n");
1550 		} else if (config_crc == data->config_crc) {
1551 			dev_dbg(dev, "Config CRC 0x%06X: OK\n",
1552 				 data->config_crc);
1553 			ret = 0;
1554 			goto release_raw;
1555 		} else {
1556 			dev_info(dev, "Config CRC 0x%06X: does not match file 0x%06X\n",
1557 				 data->config_crc, config_crc);
1558 		}
1559 	} else {
1560 		dev_warn(dev,
1561 			 "Warning: Info CRC error - device=0x%06X file=0x%06X\n",
1562 			 data->info_crc, info_crc);
1563 	}
1564 
1565 	/* Malloc memory to store configuration */
1566 	cfg.start_ofs = MXT_OBJECT_START +
1567 			data->info->object_num * sizeof(struct mxt_object) +
1568 			MXT_INFO_CHECKSUM_SIZE;
1569 	cfg.mem_size = data->mem_size - cfg.start_ofs;
1570 	cfg.mem = kzalloc(cfg.mem_size, GFP_KERNEL);
1571 	if (!cfg.mem) {
1572 		ret = -ENOMEM;
1573 		goto release_raw;
1574 	}
1575 
1576 	ret = mxt_prepare_cfg_mem(data, &cfg);
1577 	if (ret)
1578 		goto release_mem;
1579 
1580 	/* Calculate crc of the received configs (not the raw config file) */
1581 	if (data->T71_address)
1582 		crc_start = data->T71_address;
1583 	else if (data->T7_address)
1584 		crc_start = data->T7_address;
1585 	else
1586 		dev_warn(dev, "Could not find CRC start\n");
1587 
1588 	if (crc_start > cfg.start_ofs) {
1589 		calculated_crc = mxt_calculate_crc(cfg.mem,
1590 						   crc_start - cfg.start_ofs,
1591 						   cfg.mem_size);
1592 
1593 		if (config_crc > 0 && config_crc != calculated_crc)
1594 			dev_warn(dev, "Config CRC in file inconsistent, calculated=%06X, file=%06X\n",
1595 				 calculated_crc, config_crc);
1596 	}
1597 
1598 	ret = mxt_upload_cfg_mem(data, &cfg);
1599 	if (ret)
1600 		goto release_mem;
1601 
1602 	mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE);
1603 
1604 	ret = mxt_check_retrigen(data);
1605 	if (ret)
1606 		goto release_mem;
1607 
1608 	ret = mxt_soft_reset(data);
1609 	if (ret)
1610 		goto release_mem;
1611 
1612 	dev_info(dev, "Config successfully updated\n");
1613 
1614 	/* T7 config may have changed */
1615 	mxt_init_t7_power_cfg(data);
1616 
1617 release_mem:
1618 	kfree(cfg.mem);
1619 release_raw:
1620 	kfree(cfg.raw);
1621 	return ret;
1622 }
1623 
1624 static void mxt_free_input_device(struct mxt_data *data)
1625 {
1626 	if (data->input_dev) {
1627 		input_unregister_device(data->input_dev);
1628 		data->input_dev = NULL;
1629 	}
1630 }
1631 
1632 static void mxt_free_object_table(struct mxt_data *data)
1633 {
1634 #ifdef CONFIG_TOUCHSCREEN_ATMEL_MXT_T37
1635 	video_unregister_device(&data->dbg.vdev);
1636 	v4l2_device_unregister(&data->dbg.v4l2);
1637 #endif
1638 	data->object_table = NULL;
1639 	data->info = NULL;
1640 	kfree(data->raw_info_block);
1641 	data->raw_info_block = NULL;
1642 	kfree(data->msg_buf);
1643 	data->msg_buf = NULL;
1644 	data->T5_address = 0;
1645 	data->T5_msg_size = 0;
1646 	data->T6_reportid = 0;
1647 	data->T7_address = 0;
1648 	data->T71_address = 0;
1649 	data->T9_reportid_min = 0;
1650 	data->T9_reportid_max = 0;
1651 	data->T18_address = 0;
1652 	data->T19_reportid = 0;
1653 	data->T44_address = 0;
1654 	data->T100_reportid_min = 0;
1655 	data->T100_reportid_max = 0;
1656 	data->max_reportid = 0;
1657 }
1658 
1659 static int mxt_parse_object_table(struct mxt_data *data,
1660 				  struct mxt_object *object_table)
1661 {
1662 	struct i2c_client *client = data->client;
1663 	int i;
1664 	u8 reportid;
1665 	u16 end_address;
1666 
1667 	/* Valid Report IDs start counting from 1 */
1668 	reportid = 1;
1669 	data->mem_size = 0;
1670 	for (i = 0; i < data->info->object_num; i++) {
1671 		struct mxt_object *object = object_table + i;
1672 		u8 min_id, max_id;
1673 
1674 		le16_to_cpus(&object->start_address);
1675 
1676 		if (object->num_report_ids) {
1677 			min_id = reportid;
1678 			reportid += object->num_report_ids *
1679 					mxt_obj_instances(object);
1680 			max_id = reportid - 1;
1681 		} else {
1682 			min_id = 0;
1683 			max_id = 0;
1684 		}
1685 
1686 		dev_dbg(&data->client->dev,
1687 			"T%u Start:%u Size:%zu Instances:%zu Report IDs:%u-%u\n",
1688 			object->type, object->start_address,
1689 			mxt_obj_size(object), mxt_obj_instances(object),
1690 			min_id, max_id);
1691 
1692 		switch (object->type) {
1693 		case MXT_GEN_MESSAGE_T5:
1694 			if (data->info->family_id == 0x80 &&
1695 			    data->info->version < 0x20) {
1696 				/*
1697 				 * On mXT224 firmware versions prior to V2.0
1698 				 * read and discard unused CRC byte otherwise
1699 				 * DMA reads are misaligned.
1700 				 */
1701 				data->T5_msg_size = mxt_obj_size(object);
1702 			} else {
1703 				/* CRC not enabled, so skip last byte */
1704 				data->T5_msg_size = mxt_obj_size(object) - 1;
1705 			}
1706 			data->T5_address = object->start_address;
1707 			break;
1708 		case MXT_GEN_COMMAND_T6:
1709 			data->T6_reportid = min_id;
1710 			data->T6_address = object->start_address;
1711 			break;
1712 		case MXT_GEN_POWER_T7:
1713 			data->T7_address = object->start_address;
1714 			break;
1715 		case MXT_SPT_DYNAMICCONFIGURATIONCONTAINER_T71:
1716 			data->T71_address = object->start_address;
1717 			break;
1718 		case MXT_TOUCH_MULTI_T9:
1719 			data->multitouch = MXT_TOUCH_MULTI_T9;
1720 			/* Only handle messages from first T9 instance */
1721 			data->T9_reportid_min = min_id;
1722 			data->T9_reportid_max = min_id +
1723 						object->num_report_ids - 1;
1724 			data->num_touchids = object->num_report_ids;
1725 			break;
1726 		case MXT_SPT_COMMSCONFIG_T18:
1727 			data->T18_address = object->start_address;
1728 			break;
1729 		case MXT_SPT_MESSAGECOUNT_T44:
1730 			data->T44_address = object->start_address;
1731 			break;
1732 		case MXT_SPT_GPIOPWM_T19:
1733 			data->T19_reportid = min_id;
1734 			break;
1735 		case MXT_TOUCH_MULTITOUCHSCREEN_T100:
1736 			data->multitouch = MXT_TOUCH_MULTITOUCHSCREEN_T100;
1737 			data->T100_reportid_min = min_id;
1738 			data->T100_reportid_max = max_id;
1739 			/* first two report IDs reserved */
1740 			data->num_touchids = object->num_report_ids - 2;
1741 			break;
1742 		}
1743 
1744 		end_address = object->start_address
1745 			+ mxt_obj_size(object) * mxt_obj_instances(object) - 1;
1746 
1747 		if (end_address >= data->mem_size)
1748 			data->mem_size = end_address + 1;
1749 	}
1750 
1751 	/* Store maximum reportid */
1752 	data->max_reportid = reportid;
1753 
1754 	/* If T44 exists, T5 position has to be directly after */
1755 	if (data->T44_address && (data->T5_address != data->T44_address + 1)) {
1756 		dev_err(&client->dev, "Invalid T44 position\n");
1757 		return -EINVAL;
1758 	}
1759 
1760 	data->msg_buf = kcalloc(data->max_reportid,
1761 				data->T5_msg_size, GFP_KERNEL);
1762 	if (!data->msg_buf)
1763 		return -ENOMEM;
1764 
1765 	return 0;
1766 }
1767 
1768 static int mxt_read_info_block(struct mxt_data *data)
1769 {
1770 	struct i2c_client *client = data->client;
1771 	int error;
1772 	size_t size;
1773 	void *id_buf, *buf;
1774 	uint8_t num_objects;
1775 	u32 calculated_crc;
1776 	u8 *crc_ptr;
1777 
1778 	/* If info block already allocated, free it */
1779 	if (data->raw_info_block)
1780 		mxt_free_object_table(data);
1781 
1782 	/* Read 7-byte ID information block starting at address 0 */
1783 	size = sizeof(struct mxt_info);
1784 	id_buf = kzalloc(size, GFP_KERNEL);
1785 	if (!id_buf)
1786 		return -ENOMEM;
1787 
1788 	error = __mxt_read_reg(client, 0, size, id_buf);
1789 	if (error)
1790 		goto err_free_mem;
1791 
1792 	/* Resize buffer to give space for rest of info block */
1793 	num_objects = ((struct mxt_info *)id_buf)->object_num;
1794 	size += (num_objects * sizeof(struct mxt_object))
1795 		+ MXT_INFO_CHECKSUM_SIZE;
1796 
1797 	buf = krealloc(id_buf, size, GFP_KERNEL);
1798 	if (!buf) {
1799 		error = -ENOMEM;
1800 		goto err_free_mem;
1801 	}
1802 	id_buf = buf;
1803 
1804 	/* Read rest of info block */
1805 	error = __mxt_read_reg(client, MXT_OBJECT_START,
1806 			       size - MXT_OBJECT_START,
1807 			       id_buf + MXT_OBJECT_START);
1808 	if (error)
1809 		goto err_free_mem;
1810 
1811 	/* Extract & calculate checksum */
1812 	crc_ptr = id_buf + size - MXT_INFO_CHECKSUM_SIZE;
1813 	data->info_crc = crc_ptr[0] | (crc_ptr[1] << 8) | (crc_ptr[2] << 16);
1814 
1815 	calculated_crc = mxt_calculate_crc(id_buf, 0,
1816 					   size - MXT_INFO_CHECKSUM_SIZE);
1817 
1818 	/*
1819 	 * CRC mismatch can be caused by data corruption due to I2C comms
1820 	 * issue or else device is not using Object Based Protocol (eg i2c-hid)
1821 	 */
1822 	if ((data->info_crc == 0) || (data->info_crc != calculated_crc)) {
1823 		dev_err(&client->dev,
1824 			"Info Block CRC error calculated=0x%06X read=0x%06X\n",
1825 			calculated_crc, data->info_crc);
1826 		error = -EIO;
1827 		goto err_free_mem;
1828 	}
1829 
1830 	data->raw_info_block = id_buf;
1831 	data->info = (struct mxt_info *)id_buf;
1832 
1833 	dev_info(&client->dev,
1834 		 "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
1835 		 data->info->family_id, data->info->variant_id,
1836 		 data->info->version >> 4, data->info->version & 0xf,
1837 		 data->info->build, data->info->object_num);
1838 
1839 	/* Parse object table information */
1840 	error = mxt_parse_object_table(data, id_buf + MXT_OBJECT_START);
1841 	if (error) {
1842 		dev_err(&client->dev, "Error %d parsing object table\n", error);
1843 		mxt_free_object_table(data);
1844 		goto err_free_mem;
1845 	}
1846 
1847 	data->object_table = (struct mxt_object *)(id_buf + MXT_OBJECT_START);
1848 
1849 	return 0;
1850 
1851 err_free_mem:
1852 	kfree(id_buf);
1853 	return error;
1854 }
1855 
1856 static int mxt_read_t9_resolution(struct mxt_data *data)
1857 {
1858 	struct i2c_client *client = data->client;
1859 	int error;
1860 	struct t9_range range;
1861 	unsigned char orient;
1862 	struct mxt_object *object;
1863 
1864 	object = mxt_get_object(data, MXT_TOUCH_MULTI_T9);
1865 	if (!object)
1866 		return -EINVAL;
1867 
1868 	error = __mxt_read_reg(client,
1869 			       object->start_address + MXT_T9_XSIZE,
1870 			       sizeof(data->xsize), &data->xsize);
1871 	if (error)
1872 		return error;
1873 
1874 	error = __mxt_read_reg(client,
1875 			       object->start_address + MXT_T9_YSIZE,
1876 			       sizeof(data->ysize), &data->ysize);
1877 	if (error)
1878 		return error;
1879 
1880 	error = __mxt_read_reg(client,
1881 			       object->start_address + MXT_T9_RANGE,
1882 			       sizeof(range), &range);
1883 	if (error)
1884 		return error;
1885 
1886 	data->max_x = get_unaligned_le16(&range.x);
1887 	data->max_y = get_unaligned_le16(&range.y);
1888 
1889 	error =  __mxt_read_reg(client,
1890 				object->start_address + MXT_T9_ORIENT,
1891 				1, &orient);
1892 	if (error)
1893 		return error;
1894 
1895 	data->xy_switch = orient & MXT_T9_ORIENT_SWITCH;
1896 	data->invertx = orient & MXT_T9_ORIENT_INVERTX;
1897 	data->inverty = orient & MXT_T9_ORIENT_INVERTY;
1898 
1899 	return 0;
1900 }
1901 
1902 static int mxt_read_t100_config(struct mxt_data *data)
1903 {
1904 	struct i2c_client *client = data->client;
1905 	int error;
1906 	struct mxt_object *object;
1907 	u16 range_x, range_y;
1908 	u8 cfg, tchaux;
1909 	u8 aux;
1910 
1911 	object = mxt_get_object(data, MXT_TOUCH_MULTITOUCHSCREEN_T100);
1912 	if (!object)
1913 		return -EINVAL;
1914 
1915 	/* read touchscreen dimensions */
1916 	error = __mxt_read_reg(client,
1917 			       object->start_address + MXT_T100_XRANGE,
1918 			       sizeof(range_x), &range_x);
1919 	if (error)
1920 		return error;
1921 
1922 	data->max_x = get_unaligned_le16(&range_x);
1923 
1924 	error = __mxt_read_reg(client,
1925 			       object->start_address + MXT_T100_YRANGE,
1926 			       sizeof(range_y), &range_y);
1927 	if (error)
1928 		return error;
1929 
1930 	data->max_y = get_unaligned_le16(&range_y);
1931 
1932 	error = __mxt_read_reg(client,
1933 			       object->start_address + MXT_T100_XSIZE,
1934 			       sizeof(data->xsize), &data->xsize);
1935 	if (error)
1936 		return error;
1937 
1938 	error = __mxt_read_reg(client,
1939 			       object->start_address + MXT_T100_YSIZE,
1940 			       sizeof(data->ysize), &data->ysize);
1941 	if (error)
1942 		return error;
1943 
1944 	/* read orientation config */
1945 	error =  __mxt_read_reg(client,
1946 				object->start_address + MXT_T100_CFG1,
1947 				1, &cfg);
1948 	if (error)
1949 		return error;
1950 
1951 	data->xy_switch = cfg & MXT_T100_CFG_SWITCHXY;
1952 	data->invertx = cfg & MXT_T100_CFG_INVERTX;
1953 	data->inverty = cfg & MXT_T100_CFG_INVERTY;
1954 
1955 	/* allocate aux bytes */
1956 	error =  __mxt_read_reg(client,
1957 				object->start_address + MXT_T100_TCHAUX,
1958 				1, &tchaux);
1959 	if (error)
1960 		return error;
1961 
1962 	aux = 6;
1963 
1964 	if (tchaux & MXT_T100_TCHAUX_VECT)
1965 		data->t100_aux_vect = aux++;
1966 
1967 	if (tchaux & MXT_T100_TCHAUX_AMPL)
1968 		data->t100_aux_ampl = aux++;
1969 
1970 	if (tchaux & MXT_T100_TCHAUX_AREA)
1971 		data->t100_aux_area = aux++;
1972 
1973 	dev_dbg(&client->dev,
1974 		"T100 aux mappings vect:%u ampl:%u area:%u\n",
1975 		data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area);
1976 
1977 	return 0;
1978 }
1979 
1980 static int mxt_input_open(struct input_dev *dev);
1981 static void mxt_input_close(struct input_dev *dev);
1982 
1983 static void mxt_set_up_as_touchpad(struct input_dev *input_dev,
1984 				   struct mxt_data *data)
1985 {
1986 	int i;
1987 
1988 	input_dev->name = "Atmel maXTouch Touchpad";
1989 
1990 	__set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
1991 
1992 	input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
1993 	input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
1994 	input_abs_set_res(input_dev, ABS_MT_POSITION_X,
1995 			  MXT_PIXELS_PER_MM);
1996 	input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
1997 			  MXT_PIXELS_PER_MM);
1998 
1999 	for (i = 0; i < data->t19_num_keys; i++)
2000 		if (data->t19_keymap[i] != KEY_RESERVED)
2001 			input_set_capability(input_dev, EV_KEY,
2002 					     data->t19_keymap[i]);
2003 }
2004 
2005 static int mxt_initialize_input_device(struct mxt_data *data)
2006 {
2007 	struct device *dev = &data->client->dev;
2008 	struct input_dev *input_dev;
2009 	int error;
2010 	unsigned int num_mt_slots;
2011 	unsigned int mt_flags = 0;
2012 
2013 	switch (data->multitouch) {
2014 	case MXT_TOUCH_MULTI_T9:
2015 		num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
2016 		error = mxt_read_t9_resolution(data);
2017 		if (error)
2018 			dev_warn(dev, "Failed to initialize T9 resolution\n");
2019 		break;
2020 
2021 	case MXT_TOUCH_MULTITOUCHSCREEN_T100:
2022 		num_mt_slots = data->num_touchids;
2023 		error = mxt_read_t100_config(data);
2024 		if (error)
2025 			dev_warn(dev, "Failed to read T100 config\n");
2026 		break;
2027 
2028 	default:
2029 		dev_err(dev, "Invalid multitouch object\n");
2030 		return -EINVAL;
2031 	}
2032 
2033 	/* Handle default values and orientation switch */
2034 	if (data->max_x == 0)
2035 		data->max_x = 1023;
2036 
2037 	if (data->max_y == 0)
2038 		data->max_y = 1023;
2039 
2040 	if (data->xy_switch)
2041 		swap(data->max_x, data->max_y);
2042 
2043 	dev_info(dev, "Touchscreen size X%uY%u\n", data->max_x, data->max_y);
2044 
2045 	/* Register input device */
2046 	input_dev = input_allocate_device();
2047 	if (!input_dev)
2048 		return -ENOMEM;
2049 
2050 	input_dev->name = "Atmel maXTouch Touchscreen";
2051 	input_dev->phys = data->phys;
2052 	input_dev->id.bustype = BUS_I2C;
2053 	input_dev->dev.parent = dev;
2054 	input_dev->open = mxt_input_open;
2055 	input_dev->close = mxt_input_close;
2056 
2057 	input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
2058 
2059 	/* For single touch */
2060 	input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0);
2061 	input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0);
2062 
2063 	if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
2064 	    (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
2065 	     data->t100_aux_ampl)) {
2066 		input_set_abs_params(input_dev, ABS_PRESSURE, 0, 255, 0, 0);
2067 	}
2068 
2069 	/* If device has buttons we assume it is a touchpad */
2070 	if (data->t19_num_keys) {
2071 		mxt_set_up_as_touchpad(input_dev, data);
2072 		mt_flags |= INPUT_MT_POINTER;
2073 	} else {
2074 		mt_flags |= INPUT_MT_DIRECT;
2075 	}
2076 
2077 	/* For multi touch */
2078 	error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
2079 	if (error) {
2080 		dev_err(dev, "Error %d initialising slots\n", error);
2081 		goto err_free_mem;
2082 	}
2083 
2084 	if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100) {
2085 		input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE,
2086 				     0, MT_TOOL_MAX, 0, 0);
2087 		input_set_abs_params(input_dev, ABS_MT_DISTANCE,
2088 				     MXT_DISTANCE_ACTIVE_TOUCH,
2089 				     MXT_DISTANCE_HOVERING,
2090 				     0, 0);
2091 	}
2092 
2093 	input_set_abs_params(input_dev, ABS_MT_POSITION_X,
2094 			     0, data->max_x, 0, 0);
2095 	input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
2096 			     0, data->max_y, 0, 0);
2097 
2098 	if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
2099 	    (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
2100 	     data->t100_aux_area)) {
2101 		input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
2102 				     0, MXT_MAX_AREA, 0, 0);
2103 	}
2104 
2105 	if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
2106 	    (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
2107 	     data->t100_aux_ampl)) {
2108 		input_set_abs_params(input_dev, ABS_MT_PRESSURE,
2109 				     0, 255, 0, 0);
2110 	}
2111 
2112 	if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
2113 	    data->t100_aux_vect) {
2114 		input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
2115 				     0, 255, 0, 0);
2116 	}
2117 
2118 	if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
2119 	    data->t100_aux_vect) {
2120 		input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
2121 				     0, 255, 0, 0);
2122 	}
2123 
2124 	input_set_drvdata(input_dev, data);
2125 
2126 	error = input_register_device(input_dev);
2127 	if (error) {
2128 		dev_err(dev, "Error %d registering input device\n", error);
2129 		goto err_free_mem;
2130 	}
2131 
2132 	data->input_dev = input_dev;
2133 
2134 	return 0;
2135 
2136 err_free_mem:
2137 	input_free_device(input_dev);
2138 	return error;
2139 }
2140 
2141 static int mxt_configure_objects(struct mxt_data *data,
2142 				 const struct firmware *cfg);
2143 
2144 static void mxt_config_cb(const struct firmware *cfg, void *ctx)
2145 {
2146 	mxt_configure_objects(ctx, cfg);
2147 	release_firmware(cfg);
2148 }
2149 
2150 static int mxt_initialize(struct mxt_data *data)
2151 {
2152 	struct i2c_client *client = data->client;
2153 	int recovery_attempts = 0;
2154 	int error;
2155 
2156 	while (1) {
2157 		error = mxt_read_info_block(data);
2158 		if (!error)
2159 			break;
2160 
2161 		/* Check bootloader state */
2162 		error = mxt_probe_bootloader(data, false);
2163 		if (error) {
2164 			dev_info(&client->dev, "Trying alternate bootloader address\n");
2165 			error = mxt_probe_bootloader(data, true);
2166 			if (error) {
2167 				/* Chip is not in appmode or bootloader mode */
2168 				return error;
2169 			}
2170 		}
2171 
2172 		/* OK, we are in bootloader, see if we can recover */
2173 		if (++recovery_attempts > 1) {
2174 			dev_err(&client->dev, "Could not recover from bootloader mode\n");
2175 			/*
2176 			 * We can reflash from this state, so do not
2177 			 * abort initialization.
2178 			 */
2179 			data->in_bootloader = true;
2180 			return 0;
2181 		}
2182 
2183 		/* Attempt to exit bootloader into app mode */
2184 		mxt_send_bootloader_cmd(data, false);
2185 		msleep(MXT_FW_RESET_TIME);
2186 	}
2187 
2188 	error = mxt_acquire_irq(data);
2189 	if (error)
2190 		return error;
2191 
2192 	error = mxt_check_retrigen(data);
2193 	if (error)
2194 		return error;
2195 
2196 	error = request_firmware_nowait(THIS_MODULE, true, MXT_CFG_NAME,
2197 					&client->dev, GFP_KERNEL, data,
2198 					mxt_config_cb);
2199 	if (error) {
2200 		dev_err(&client->dev, "Failed to invoke firmware loader: %d\n",
2201 			error);
2202 		return error;
2203 	}
2204 
2205 	return 0;
2206 }
2207 
2208 static int mxt_set_t7_power_cfg(struct mxt_data *data, u8 sleep)
2209 {
2210 	struct device *dev = &data->client->dev;
2211 	int error;
2212 	struct t7_config *new_config;
2213 	struct t7_config deepsleep = { .active = 0, .idle = 0 };
2214 
2215 	if (sleep == MXT_POWER_CFG_DEEPSLEEP)
2216 		new_config = &deepsleep;
2217 	else
2218 		new_config = &data->t7_cfg;
2219 
2220 	error = __mxt_write_reg(data->client, data->T7_address,
2221 				sizeof(data->t7_cfg), new_config);
2222 	if (error)
2223 		return error;
2224 
2225 	dev_dbg(dev, "Set T7 ACTV:%d IDLE:%d\n",
2226 		new_config->active, new_config->idle);
2227 
2228 	return 0;
2229 }
2230 
2231 static int mxt_init_t7_power_cfg(struct mxt_data *data)
2232 {
2233 	struct device *dev = &data->client->dev;
2234 	int error;
2235 	bool retry = false;
2236 
2237 recheck:
2238 	error = __mxt_read_reg(data->client, data->T7_address,
2239 				sizeof(data->t7_cfg), &data->t7_cfg);
2240 	if (error)
2241 		return error;
2242 
2243 	if (data->t7_cfg.active == 0 || data->t7_cfg.idle == 0) {
2244 		if (!retry) {
2245 			dev_dbg(dev, "T7 cfg zero, resetting\n");
2246 			mxt_soft_reset(data);
2247 			retry = true;
2248 			goto recheck;
2249 		} else {
2250 			dev_dbg(dev, "T7 cfg zero after reset, overriding\n");
2251 			data->t7_cfg.active = 20;
2252 			data->t7_cfg.idle = 100;
2253 			return mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
2254 		}
2255 	}
2256 
2257 	dev_dbg(dev, "Initialized power cfg: ACTV %d, IDLE %d\n",
2258 		data->t7_cfg.active, data->t7_cfg.idle);
2259 	return 0;
2260 }
2261 
2262 #ifdef CONFIG_TOUCHSCREEN_ATMEL_MXT_T37
2263 static const struct v4l2_file_operations mxt_video_fops = {
2264 	.owner = THIS_MODULE,
2265 	.open = v4l2_fh_open,
2266 	.release = vb2_fop_release,
2267 	.unlocked_ioctl = video_ioctl2,
2268 	.read = vb2_fop_read,
2269 	.mmap = vb2_fop_mmap,
2270 	.poll = vb2_fop_poll,
2271 };
2272 
2273 static u16 mxt_get_debug_value(struct mxt_data *data, unsigned int x,
2274 			       unsigned int y)
2275 {
2276 	struct mxt_info *info = data->info;
2277 	struct mxt_dbg *dbg = &data->dbg;
2278 	unsigned int ofs, page;
2279 	unsigned int col = 0;
2280 	unsigned int col_width;
2281 
2282 	if (info->family_id == MXT_FAMILY_1386) {
2283 		col_width = info->matrix_ysize / MXT1386_COLUMNS;
2284 		col = y / col_width;
2285 		y = y % col_width;
2286 	} else {
2287 		col_width = info->matrix_ysize;
2288 	}
2289 
2290 	ofs = (y + (x * col_width)) * sizeof(u16);
2291 	page = ofs / MXT_DIAGNOSTIC_SIZE;
2292 	ofs %= MXT_DIAGNOSTIC_SIZE;
2293 
2294 	if (info->family_id == MXT_FAMILY_1386)
2295 		page += col * MXT1386_PAGES_PER_COLUMN;
2296 
2297 	return get_unaligned_le16(&dbg->t37_buf[page].data[ofs]);
2298 }
2299 
2300 static int mxt_convert_debug_pages(struct mxt_data *data, u16 *outbuf)
2301 {
2302 	struct mxt_dbg *dbg = &data->dbg;
2303 	unsigned int x = 0;
2304 	unsigned int y = 0;
2305 	unsigned int i, rx, ry;
2306 
2307 	for (i = 0; i < dbg->t37_nodes; i++) {
2308 		/* Handle orientation */
2309 		rx = data->xy_switch ? y : x;
2310 		ry = data->xy_switch ? x : y;
2311 		rx = data->invertx ? (data->xsize - 1 - rx) : rx;
2312 		ry = data->inverty ? (data->ysize - 1 - ry) : ry;
2313 
2314 		outbuf[i] = mxt_get_debug_value(data, rx, ry);
2315 
2316 		/* Next value */
2317 		if (++x >= (data->xy_switch ? data->ysize : data->xsize)) {
2318 			x = 0;
2319 			y++;
2320 		}
2321 	}
2322 
2323 	return 0;
2324 }
2325 
2326 static int mxt_read_diagnostic_debug(struct mxt_data *data, u8 mode,
2327 				     u16 *outbuf)
2328 {
2329 	struct mxt_dbg *dbg = &data->dbg;
2330 	int retries = 0;
2331 	int page;
2332 	int ret;
2333 	u8 cmd = mode;
2334 	struct t37_debug *p;
2335 	u8 cmd_poll;
2336 
2337 	for (page = 0; page < dbg->t37_pages; page++) {
2338 		p = dbg->t37_buf + page;
2339 
2340 		ret = mxt_write_reg(data->client, dbg->diag_cmd_address,
2341 				    cmd);
2342 		if (ret)
2343 			return ret;
2344 
2345 		retries = 0;
2346 		msleep(20);
2347 wait_cmd:
2348 		/* Read back command byte */
2349 		ret = __mxt_read_reg(data->client, dbg->diag_cmd_address,
2350 				     sizeof(cmd_poll), &cmd_poll);
2351 		if (ret)
2352 			return ret;
2353 
2354 		/* Field is cleared once the command has been processed */
2355 		if (cmd_poll) {
2356 			if (retries++ > 100)
2357 				return -EINVAL;
2358 
2359 			msleep(20);
2360 			goto wait_cmd;
2361 		}
2362 
2363 		/* Read T37 page */
2364 		ret = __mxt_read_reg(data->client, dbg->t37_address,
2365 				     sizeof(struct t37_debug), p);
2366 		if (ret)
2367 			return ret;
2368 
2369 		if (p->mode != mode || p->page != page) {
2370 			dev_err(&data->client->dev, "T37 page mismatch\n");
2371 			return -EINVAL;
2372 		}
2373 
2374 		dev_dbg(&data->client->dev, "%s page:%d retries:%d\n",
2375 			__func__, page, retries);
2376 
2377 		/* For remaining pages, write PAGEUP rather than mode */
2378 		cmd = MXT_DIAGNOSTIC_PAGEUP;
2379 	}
2380 
2381 	return mxt_convert_debug_pages(data, outbuf);
2382 }
2383 
2384 static int mxt_queue_setup(struct vb2_queue *q,
2385 		       unsigned int *nbuffers, unsigned int *nplanes,
2386 		       unsigned int sizes[], struct device *alloc_devs[])
2387 {
2388 	struct mxt_data *data = q->drv_priv;
2389 	size_t size = data->dbg.t37_nodes * sizeof(u16);
2390 
2391 	if (*nplanes)
2392 		return sizes[0] < size ? -EINVAL : 0;
2393 
2394 	*nplanes = 1;
2395 	sizes[0] = size;
2396 
2397 	return 0;
2398 }
2399 
2400 static void mxt_buffer_queue(struct vb2_buffer *vb)
2401 {
2402 	struct mxt_data *data = vb2_get_drv_priv(vb->vb2_queue);
2403 	u16 *ptr;
2404 	int ret;
2405 	u8 mode;
2406 
2407 	ptr = vb2_plane_vaddr(vb, 0);
2408 	if (!ptr) {
2409 		dev_err(&data->client->dev, "Error acquiring frame ptr\n");
2410 		goto fault;
2411 	}
2412 
2413 	switch (data->dbg.input) {
2414 	case MXT_V4L_INPUT_DELTAS:
2415 	default:
2416 		mode = MXT_DIAGNOSTIC_DELTAS;
2417 		break;
2418 
2419 	case MXT_V4L_INPUT_REFS:
2420 		mode = MXT_DIAGNOSTIC_REFS;
2421 		break;
2422 	}
2423 
2424 	ret = mxt_read_diagnostic_debug(data, mode, ptr);
2425 	if (ret)
2426 		goto fault;
2427 
2428 	vb2_set_plane_payload(vb, 0, data->dbg.t37_nodes * sizeof(u16));
2429 	vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
2430 	return;
2431 
2432 fault:
2433 	vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
2434 }
2435 
2436 /* V4L2 structures */
2437 static const struct vb2_ops mxt_queue_ops = {
2438 	.queue_setup		= mxt_queue_setup,
2439 	.buf_queue		= mxt_buffer_queue,
2440 	.wait_prepare		= vb2_ops_wait_prepare,
2441 	.wait_finish		= vb2_ops_wait_finish,
2442 };
2443 
2444 static const struct vb2_queue mxt_queue = {
2445 	.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
2446 	.io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ,
2447 	.buf_struct_size = sizeof(struct mxt_vb2_buffer),
2448 	.ops = &mxt_queue_ops,
2449 	.mem_ops = &vb2_vmalloc_memops,
2450 	.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC,
2451 	.min_buffers_needed = 1,
2452 };
2453 
2454 static int mxt_vidioc_querycap(struct file *file, void *priv,
2455 				 struct v4l2_capability *cap)
2456 {
2457 	struct mxt_data *data = video_drvdata(file);
2458 
2459 	strlcpy(cap->driver, "atmel_mxt_ts", sizeof(cap->driver));
2460 	strlcpy(cap->card, "atmel_mxt_ts touch", sizeof(cap->card));
2461 	snprintf(cap->bus_info, sizeof(cap->bus_info),
2462 		 "I2C:%s", dev_name(&data->client->dev));
2463 	return 0;
2464 }
2465 
2466 static int mxt_vidioc_enum_input(struct file *file, void *priv,
2467 				   struct v4l2_input *i)
2468 {
2469 	if (i->index >= MXT_V4L_INPUT_MAX)
2470 		return -EINVAL;
2471 
2472 	i->type = V4L2_INPUT_TYPE_TOUCH;
2473 
2474 	switch (i->index) {
2475 	case MXT_V4L_INPUT_REFS:
2476 		strlcpy(i->name, "Mutual Capacitance References",
2477 			sizeof(i->name));
2478 		break;
2479 	case MXT_V4L_INPUT_DELTAS:
2480 		strlcpy(i->name, "Mutual Capacitance Deltas", sizeof(i->name));
2481 		break;
2482 	}
2483 
2484 	return 0;
2485 }
2486 
2487 static int mxt_set_input(struct mxt_data *data, unsigned int i)
2488 {
2489 	struct v4l2_pix_format *f = &data->dbg.format;
2490 
2491 	if (i >= MXT_V4L_INPUT_MAX)
2492 		return -EINVAL;
2493 
2494 	if (i == MXT_V4L_INPUT_DELTAS)
2495 		f->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
2496 	else
2497 		f->pixelformat = V4L2_TCH_FMT_TU16;
2498 
2499 	f->width = data->xy_switch ? data->ysize : data->xsize;
2500 	f->height = data->xy_switch ? data->xsize : data->ysize;
2501 	f->field = V4L2_FIELD_NONE;
2502 	f->colorspace = V4L2_COLORSPACE_RAW;
2503 	f->bytesperline = f->width * sizeof(u16);
2504 	f->sizeimage = f->width * f->height * sizeof(u16);
2505 
2506 	data->dbg.input = i;
2507 
2508 	return 0;
2509 }
2510 
2511 static int mxt_vidioc_s_input(struct file *file, void *priv, unsigned int i)
2512 {
2513 	return mxt_set_input(video_drvdata(file), i);
2514 }
2515 
2516 static int mxt_vidioc_g_input(struct file *file, void *priv, unsigned int *i)
2517 {
2518 	struct mxt_data *data = video_drvdata(file);
2519 
2520 	*i = data->dbg.input;
2521 
2522 	return 0;
2523 }
2524 
2525 static int mxt_vidioc_fmt(struct file *file, void *priv, struct v4l2_format *f)
2526 {
2527 	struct mxt_data *data = video_drvdata(file);
2528 
2529 	f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
2530 	f->fmt.pix = data->dbg.format;
2531 
2532 	return 0;
2533 }
2534 
2535 static int mxt_vidioc_enum_fmt(struct file *file, void *priv,
2536 				 struct v4l2_fmtdesc *fmt)
2537 {
2538 	if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
2539 		return -EINVAL;
2540 
2541 	switch (fmt->index) {
2542 	case 0:
2543 		fmt->pixelformat = V4L2_TCH_FMT_TU16;
2544 		break;
2545 
2546 	case 1:
2547 		fmt->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
2548 		break;
2549 
2550 	default:
2551 		return -EINVAL;
2552 	}
2553 
2554 	return 0;
2555 }
2556 
2557 static int mxt_vidioc_g_parm(struct file *file, void *fh,
2558 			     struct v4l2_streamparm *a)
2559 {
2560 	if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
2561 		return -EINVAL;
2562 
2563 	a->parm.capture.readbuffers = 1;
2564 	a->parm.capture.timeperframe.numerator = 1;
2565 	a->parm.capture.timeperframe.denominator = 10;
2566 	return 0;
2567 }
2568 
2569 static const struct v4l2_ioctl_ops mxt_video_ioctl_ops = {
2570 	.vidioc_querycap        = mxt_vidioc_querycap,
2571 
2572 	.vidioc_enum_fmt_vid_cap = mxt_vidioc_enum_fmt,
2573 	.vidioc_s_fmt_vid_cap   = mxt_vidioc_fmt,
2574 	.vidioc_g_fmt_vid_cap   = mxt_vidioc_fmt,
2575 	.vidioc_try_fmt_vid_cap	= mxt_vidioc_fmt,
2576 	.vidioc_g_parm		= mxt_vidioc_g_parm,
2577 
2578 	.vidioc_enum_input      = mxt_vidioc_enum_input,
2579 	.vidioc_g_input         = mxt_vidioc_g_input,
2580 	.vidioc_s_input         = mxt_vidioc_s_input,
2581 
2582 	.vidioc_reqbufs         = vb2_ioctl_reqbufs,
2583 	.vidioc_create_bufs     = vb2_ioctl_create_bufs,
2584 	.vidioc_querybuf        = vb2_ioctl_querybuf,
2585 	.vidioc_qbuf            = vb2_ioctl_qbuf,
2586 	.vidioc_dqbuf           = vb2_ioctl_dqbuf,
2587 	.vidioc_expbuf          = vb2_ioctl_expbuf,
2588 
2589 	.vidioc_streamon        = vb2_ioctl_streamon,
2590 	.vidioc_streamoff       = vb2_ioctl_streamoff,
2591 };
2592 
2593 static const struct video_device mxt_video_device = {
2594 	.name = "Atmel maxTouch",
2595 	.fops = &mxt_video_fops,
2596 	.ioctl_ops = &mxt_video_ioctl_ops,
2597 	.release = video_device_release_empty,
2598 	.device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TOUCH |
2599 		       V4L2_CAP_READWRITE | V4L2_CAP_STREAMING,
2600 };
2601 
2602 static void mxt_debug_init(struct mxt_data *data)
2603 {
2604 	struct mxt_info *info = data->info;
2605 	struct mxt_dbg *dbg = &data->dbg;
2606 	struct mxt_object *object;
2607 	int error;
2608 
2609 	object = mxt_get_object(data, MXT_GEN_COMMAND_T6);
2610 	if (!object)
2611 		goto error;
2612 
2613 	dbg->diag_cmd_address = object->start_address + MXT_COMMAND_DIAGNOSTIC;
2614 
2615 	object = mxt_get_object(data, MXT_DEBUG_DIAGNOSTIC_T37);
2616 	if (!object)
2617 		goto error;
2618 
2619 	if (mxt_obj_size(object) != sizeof(struct t37_debug)) {
2620 		dev_warn(&data->client->dev, "Bad T37 size");
2621 		goto error;
2622 	}
2623 
2624 	dbg->t37_address = object->start_address;
2625 
2626 	/* Calculate size of data and allocate buffer */
2627 	dbg->t37_nodes = data->xsize * data->ysize;
2628 
2629 	if (info->family_id == MXT_FAMILY_1386)
2630 		dbg->t37_pages = MXT1386_COLUMNS * MXT1386_PAGES_PER_COLUMN;
2631 	else
2632 		dbg->t37_pages = DIV_ROUND_UP(data->xsize *
2633 					      info->matrix_ysize *
2634 					      sizeof(u16),
2635 					      sizeof(dbg->t37_buf->data));
2636 
2637 	dbg->t37_buf = devm_kmalloc_array(&data->client->dev, dbg->t37_pages,
2638 					  sizeof(struct t37_debug), GFP_KERNEL);
2639 	if (!dbg->t37_buf)
2640 		goto error;
2641 
2642 	/* init channel to zero */
2643 	mxt_set_input(data, 0);
2644 
2645 	/* register video device */
2646 	snprintf(dbg->v4l2.name, sizeof(dbg->v4l2.name), "%s", "atmel_mxt_ts");
2647 	error = v4l2_device_register(&data->client->dev, &dbg->v4l2);
2648 	if (error)
2649 		goto error;
2650 
2651 	/* initialize the queue */
2652 	mutex_init(&dbg->lock);
2653 	dbg->queue = mxt_queue;
2654 	dbg->queue.drv_priv = data;
2655 	dbg->queue.lock = &dbg->lock;
2656 	dbg->queue.dev = &data->client->dev;
2657 
2658 	error = vb2_queue_init(&dbg->queue);
2659 	if (error)
2660 		goto error_unreg_v4l2;
2661 
2662 	dbg->vdev = mxt_video_device;
2663 	dbg->vdev.v4l2_dev = &dbg->v4l2;
2664 	dbg->vdev.lock = &dbg->lock;
2665 	dbg->vdev.vfl_dir = VFL_DIR_RX;
2666 	dbg->vdev.queue = &dbg->queue;
2667 	video_set_drvdata(&dbg->vdev, data);
2668 
2669 	error = video_register_device(&dbg->vdev, VFL_TYPE_TOUCH, -1);
2670 	if (error)
2671 		goto error_unreg_v4l2;
2672 
2673 	return;
2674 
2675 error_unreg_v4l2:
2676 	v4l2_device_unregister(&dbg->v4l2);
2677 error:
2678 	dev_warn(&data->client->dev, "Error initializing T37\n");
2679 }
2680 #else
2681 static void mxt_debug_init(struct mxt_data *data)
2682 {
2683 }
2684 #endif
2685 
2686 static int mxt_configure_objects(struct mxt_data *data,
2687 				 const struct firmware *cfg)
2688 {
2689 	struct device *dev = &data->client->dev;
2690 	int error;
2691 
2692 	error = mxt_init_t7_power_cfg(data);
2693 	if (error) {
2694 		dev_err(dev, "Failed to initialize power cfg\n");
2695 		return error;
2696 	}
2697 
2698 	if (cfg) {
2699 		error = mxt_update_cfg(data, cfg);
2700 		if (error)
2701 			dev_warn(dev, "Error %d updating config\n", error);
2702 	}
2703 
2704 	if (data->multitouch) {
2705 		error = mxt_initialize_input_device(data);
2706 		if (error)
2707 			return error;
2708 	} else {
2709 		dev_warn(dev, "No touch object detected\n");
2710 	}
2711 
2712 	mxt_debug_init(data);
2713 
2714 	return 0;
2715 }
2716 
2717 /* Firmware Version is returned as Major.Minor.Build */
2718 static ssize_t mxt_fw_version_show(struct device *dev,
2719 				   struct device_attribute *attr, char *buf)
2720 {
2721 	struct mxt_data *data = dev_get_drvdata(dev);
2722 	struct mxt_info *info = data->info;
2723 	return scnprintf(buf, PAGE_SIZE, "%u.%u.%02X\n",
2724 			 info->version >> 4, info->version & 0xf, info->build);
2725 }
2726 
2727 /* Hardware Version is returned as FamilyID.VariantID */
2728 static ssize_t mxt_hw_version_show(struct device *dev,
2729 				   struct device_attribute *attr, char *buf)
2730 {
2731 	struct mxt_data *data = dev_get_drvdata(dev);
2732 	struct mxt_info *info = data->info;
2733 	return scnprintf(buf, PAGE_SIZE, "%u.%u\n",
2734 			 info->family_id, info->variant_id);
2735 }
2736 
2737 static ssize_t mxt_show_instance(char *buf, int count,
2738 				 struct mxt_object *object, int instance,
2739 				 const u8 *val)
2740 {
2741 	int i;
2742 
2743 	if (mxt_obj_instances(object) > 1)
2744 		count += scnprintf(buf + count, PAGE_SIZE - count,
2745 				   "Instance %u\n", instance);
2746 
2747 	for (i = 0; i < mxt_obj_size(object); i++)
2748 		count += scnprintf(buf + count, PAGE_SIZE - count,
2749 				"\t[%2u]: %02x (%d)\n", i, val[i], val[i]);
2750 	count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
2751 
2752 	return count;
2753 }
2754 
2755 static ssize_t mxt_object_show(struct device *dev,
2756 				    struct device_attribute *attr, char *buf)
2757 {
2758 	struct mxt_data *data = dev_get_drvdata(dev);
2759 	struct mxt_object *object;
2760 	int count = 0;
2761 	int i, j;
2762 	int error;
2763 	u8 *obuf;
2764 
2765 	/* Pre-allocate buffer large enough to hold max sized object. */
2766 	obuf = kmalloc(256, GFP_KERNEL);
2767 	if (!obuf)
2768 		return -ENOMEM;
2769 
2770 	error = 0;
2771 	for (i = 0; i < data->info->object_num; i++) {
2772 		object = data->object_table + i;
2773 
2774 		if (!mxt_object_readable(object->type))
2775 			continue;
2776 
2777 		count += scnprintf(buf + count, PAGE_SIZE - count,
2778 				"T%u:\n", object->type);
2779 
2780 		for (j = 0; j < mxt_obj_instances(object); j++) {
2781 			u16 size = mxt_obj_size(object);
2782 			u16 addr = object->start_address + j * size;
2783 
2784 			error = __mxt_read_reg(data->client, addr, size, obuf);
2785 			if (error)
2786 				goto done;
2787 
2788 			count = mxt_show_instance(buf, count, object, j, obuf);
2789 		}
2790 	}
2791 
2792 done:
2793 	kfree(obuf);
2794 	return error ?: count;
2795 }
2796 
2797 static int mxt_check_firmware_format(struct device *dev,
2798 				     const struct firmware *fw)
2799 {
2800 	unsigned int pos = 0;
2801 	char c;
2802 
2803 	while (pos < fw->size) {
2804 		c = *(fw->data + pos);
2805 
2806 		if (c < '0' || (c > '9' && c < 'A') || c > 'F')
2807 			return 0;
2808 
2809 		pos++;
2810 	}
2811 
2812 	/*
2813 	 * To convert file try:
2814 	 * xxd -r -p mXTXXX__APP_VX-X-XX.enc > maxtouch.fw
2815 	 */
2816 	dev_err(dev, "Aborting: firmware file must be in binary format\n");
2817 
2818 	return -EINVAL;
2819 }
2820 
2821 static int mxt_load_fw(struct device *dev, const char *fn)
2822 {
2823 	struct mxt_data *data = dev_get_drvdata(dev);
2824 	const struct firmware *fw = NULL;
2825 	unsigned int frame_size;
2826 	unsigned int pos = 0;
2827 	unsigned int retry = 0;
2828 	unsigned int frame = 0;
2829 	int ret;
2830 
2831 	ret = request_firmware(&fw, fn, dev);
2832 	if (ret) {
2833 		dev_err(dev, "Unable to open firmware %s\n", fn);
2834 		return ret;
2835 	}
2836 
2837 	/* Check for incorrect enc file */
2838 	ret = mxt_check_firmware_format(dev, fw);
2839 	if (ret)
2840 		goto release_firmware;
2841 
2842 	if (!data->in_bootloader) {
2843 		/* Change to the bootloader mode */
2844 		data->in_bootloader = true;
2845 
2846 		ret = mxt_t6_command(data, MXT_COMMAND_RESET,
2847 				     MXT_BOOT_VALUE, false);
2848 		if (ret)
2849 			goto release_firmware;
2850 
2851 		msleep(MXT_RESET_TIME);
2852 
2853 		/* Do not need to scan since we know family ID */
2854 		ret = mxt_lookup_bootloader_address(data, 0);
2855 		if (ret)
2856 			goto release_firmware;
2857 
2858 		mxt_free_input_device(data);
2859 		mxt_free_object_table(data);
2860 	} else {
2861 		enable_irq(data->irq);
2862 	}
2863 
2864 	reinit_completion(&data->bl_completion);
2865 
2866 	ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false);
2867 	if (ret) {
2868 		/* Bootloader may still be unlocked from previous attempt */
2869 		ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, false);
2870 		if (ret)
2871 			goto disable_irq;
2872 	} else {
2873 		dev_info(dev, "Unlocking bootloader\n");
2874 
2875 		/* Unlock bootloader */
2876 		ret = mxt_send_bootloader_cmd(data, true);
2877 		if (ret)
2878 			goto disable_irq;
2879 	}
2880 
2881 	while (pos < fw->size) {
2882 		ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true);
2883 		if (ret)
2884 			goto disable_irq;
2885 
2886 		frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1));
2887 
2888 		/* Take account of CRC bytes */
2889 		frame_size += 2;
2890 
2891 		/* Write one frame to device */
2892 		ret = mxt_bootloader_write(data, fw->data + pos, frame_size);
2893 		if (ret)
2894 			goto disable_irq;
2895 
2896 		ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true);
2897 		if (ret) {
2898 			retry++;
2899 
2900 			/* Back off by 20ms per retry */
2901 			msleep(retry * 20);
2902 
2903 			if (retry > 20) {
2904 				dev_err(dev, "Retry count exceeded\n");
2905 				goto disable_irq;
2906 			}
2907 		} else {
2908 			retry = 0;
2909 			pos += frame_size;
2910 			frame++;
2911 		}
2912 
2913 		if (frame % 50 == 0)
2914 			dev_dbg(dev, "Sent %d frames, %d/%zd bytes\n",
2915 				frame, pos, fw->size);
2916 	}
2917 
2918 	/* Wait for flash. */
2919 	ret = mxt_wait_for_completion(data, &data->bl_completion,
2920 				      MXT_FW_RESET_TIME);
2921 	if (ret)
2922 		goto disable_irq;
2923 
2924 	dev_dbg(dev, "Sent %d frames, %d bytes\n", frame, pos);
2925 
2926 	/*
2927 	 * Wait for device to reset. Some bootloader versions do not assert
2928 	 * the CHG line after bootloading has finished, so ignore potential
2929 	 * errors.
2930 	 */
2931 	mxt_wait_for_completion(data, &data->bl_completion, MXT_FW_RESET_TIME);
2932 
2933 	data->in_bootloader = false;
2934 
2935 disable_irq:
2936 	disable_irq(data->irq);
2937 release_firmware:
2938 	release_firmware(fw);
2939 	return ret;
2940 }
2941 
2942 static ssize_t mxt_update_fw_store(struct device *dev,
2943 					struct device_attribute *attr,
2944 					const char *buf, size_t count)
2945 {
2946 	struct mxt_data *data = dev_get_drvdata(dev);
2947 	int error;
2948 
2949 	error = mxt_load_fw(dev, MXT_FW_NAME);
2950 	if (error) {
2951 		dev_err(dev, "The firmware update failed(%d)\n", error);
2952 		count = error;
2953 	} else {
2954 		dev_info(dev, "The firmware update succeeded\n");
2955 
2956 		error = mxt_initialize(data);
2957 		if (error)
2958 			return error;
2959 	}
2960 
2961 	return count;
2962 }
2963 
2964 static DEVICE_ATTR(fw_version, S_IRUGO, mxt_fw_version_show, NULL);
2965 static DEVICE_ATTR(hw_version, S_IRUGO, mxt_hw_version_show, NULL);
2966 static DEVICE_ATTR(object, S_IRUGO, mxt_object_show, NULL);
2967 static DEVICE_ATTR(update_fw, S_IWUSR, NULL, mxt_update_fw_store);
2968 
2969 static struct attribute *mxt_attrs[] = {
2970 	&dev_attr_fw_version.attr,
2971 	&dev_attr_hw_version.attr,
2972 	&dev_attr_object.attr,
2973 	&dev_attr_update_fw.attr,
2974 	NULL
2975 };
2976 
2977 static const struct attribute_group mxt_attr_group = {
2978 	.attrs = mxt_attrs,
2979 };
2980 
2981 static void mxt_start(struct mxt_data *data)
2982 {
2983 	switch (data->suspend_mode) {
2984 	case MXT_SUSPEND_T9_CTRL:
2985 		mxt_soft_reset(data);
2986 
2987 		/* Touch enable */
2988 		/* 0x83 = SCANEN | RPTEN | ENABLE */
2989 		mxt_write_object(data,
2990 				MXT_TOUCH_MULTI_T9, MXT_T9_CTRL, 0x83);
2991 		break;
2992 
2993 	case MXT_SUSPEND_DEEP_SLEEP:
2994 	default:
2995 		mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
2996 
2997 		/* Recalibrate since chip has been in deep sleep */
2998 		mxt_t6_command(data, MXT_COMMAND_CALIBRATE, 1, false);
2999 		break;
3000 	}
3001 }
3002 
3003 static void mxt_stop(struct mxt_data *data)
3004 {
3005 	switch (data->suspend_mode) {
3006 	case MXT_SUSPEND_T9_CTRL:
3007 		/* Touch disable */
3008 		mxt_write_object(data,
3009 				MXT_TOUCH_MULTI_T9, MXT_T9_CTRL, 0);
3010 		break;
3011 
3012 	case MXT_SUSPEND_DEEP_SLEEP:
3013 	default:
3014 		mxt_set_t7_power_cfg(data, MXT_POWER_CFG_DEEPSLEEP);
3015 		break;
3016 	}
3017 }
3018 
3019 static int mxt_input_open(struct input_dev *dev)
3020 {
3021 	struct mxt_data *data = input_get_drvdata(dev);
3022 
3023 	mxt_start(data);
3024 
3025 	return 0;
3026 }
3027 
3028 static void mxt_input_close(struct input_dev *dev)
3029 {
3030 	struct mxt_data *data = input_get_drvdata(dev);
3031 
3032 	mxt_stop(data);
3033 }
3034 
3035 static int mxt_parse_device_properties(struct mxt_data *data)
3036 {
3037 	static const char keymap_property[] = "linux,gpio-keymap";
3038 	struct device *dev = &data->client->dev;
3039 	u32 *keymap;
3040 	int n_keys;
3041 	int error;
3042 
3043 	if (device_property_present(dev, keymap_property)) {
3044 		n_keys = device_property_count_u32(dev, keymap_property);
3045 		if (n_keys <= 0) {
3046 			error = n_keys < 0 ? n_keys : -EINVAL;
3047 			dev_err(dev, "invalid/malformed '%s' property: %d\n",
3048 				keymap_property, error);
3049 			return error;
3050 		}
3051 
3052 		keymap = devm_kmalloc_array(dev, n_keys, sizeof(*keymap),
3053 					    GFP_KERNEL);
3054 		if (!keymap)
3055 			return -ENOMEM;
3056 
3057 		error = device_property_read_u32_array(dev, keymap_property,
3058 						       keymap, n_keys);
3059 		if (error) {
3060 			dev_err(dev, "failed to parse '%s' property: %d\n",
3061 				keymap_property, error);
3062 			return error;
3063 		}
3064 
3065 		data->t19_keymap = keymap;
3066 		data->t19_num_keys = n_keys;
3067 	}
3068 
3069 	return 0;
3070 }
3071 
3072 static const struct dmi_system_id chromebook_T9_suspend_dmi[] = {
3073 	{
3074 		.matches = {
3075 			DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
3076 			DMI_MATCH(DMI_PRODUCT_NAME, "Link"),
3077 		},
3078 	},
3079 	{
3080 		.matches = {
3081 			DMI_MATCH(DMI_PRODUCT_NAME, "Peppy"),
3082 		},
3083 	},
3084 	{ }
3085 };
3086 
3087 static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
3088 {
3089 	struct mxt_data *data;
3090 	int error;
3091 
3092 	/*
3093 	 * Ignore devices that do not have device properties attached to
3094 	 * them, as we need help determining whether we are dealing with
3095 	 * touch screen or touchpad.
3096 	 *
3097 	 * So far on x86 the only users of Atmel touch controllers are
3098 	 * Chromebooks, and chromeos_laptop driver will ensure that
3099 	 * necessary properties are provided (if firmware does not do that).
3100 	 */
3101 	if (!device_property_present(&client->dev, "compatible"))
3102 		return -ENXIO;
3103 
3104 	/*
3105 	 * Ignore ACPI devices representing bootloader mode.
3106 	 *
3107 	 * This is a bit of a hack: Google Chromebook BIOS creates ACPI
3108 	 * devices for both application and bootloader modes, but we are
3109 	 * interested in application mode only (if device is in bootloader
3110 	 * mode we'll end up switching into application anyway). So far
3111 	 * application mode addresses were all above 0x40, so we'll use it
3112 	 * as a threshold.
3113 	 */
3114 	if (ACPI_COMPANION(&client->dev) && client->addr < 0x40)
3115 		return -ENXIO;
3116 
3117 	data = devm_kzalloc(&client->dev, sizeof(struct mxt_data), GFP_KERNEL);
3118 	if (!data)
3119 		return -ENOMEM;
3120 
3121 	snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0",
3122 		 client->adapter->nr, client->addr);
3123 
3124 	data->client = client;
3125 	data->irq = client->irq;
3126 	i2c_set_clientdata(client, data);
3127 
3128 	init_completion(&data->bl_completion);
3129 	init_completion(&data->reset_completion);
3130 	init_completion(&data->crc_completion);
3131 
3132 	data->suspend_mode = dmi_check_system(chromebook_T9_suspend_dmi) ?
3133 		MXT_SUSPEND_T9_CTRL : MXT_SUSPEND_DEEP_SLEEP;
3134 
3135 	error = mxt_parse_device_properties(data);
3136 	if (error)
3137 		return error;
3138 
3139 	/*
3140 	 * VDDA is the analog voltage supply 2.57..3.47 V
3141 	 * VDD  is the digital voltage supply 1.71..3.47 V
3142 	 */
3143 	data->regulators[0].supply = "vdda";
3144 	data->regulators[1].supply = "vdd";
3145 	error = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(data->regulators),
3146 					data->regulators);
3147 	if (error) {
3148 		if (error != -EPROBE_DEFER)
3149 			dev_err(&client->dev, "Failed to get regulators %d\n",
3150 				error);
3151 		return error;
3152 	}
3153 
3154 	/* Request the RESET line as asserted so we go into reset */
3155 	data->reset_gpio = devm_gpiod_get_optional(&client->dev,
3156 						   "reset", GPIOD_OUT_HIGH);
3157 	if (IS_ERR(data->reset_gpio)) {
3158 		error = PTR_ERR(data->reset_gpio);
3159 		dev_err(&client->dev, "Failed to get reset gpio: %d\n", error);
3160 		return error;
3161 	}
3162 
3163 	error = devm_request_threaded_irq(&client->dev, client->irq,
3164 					  NULL, mxt_interrupt, IRQF_ONESHOT,
3165 					  client->name, data);
3166 	if (error) {
3167 		dev_err(&client->dev, "Failed to register interrupt\n");
3168 		return error;
3169 	}
3170 
3171 	disable_irq(client->irq);
3172 
3173 	error = regulator_bulk_enable(ARRAY_SIZE(data->regulators),
3174 				      data->regulators);
3175 	if (error) {
3176 		dev_err(&client->dev, "failed to enable regulators: %d\n",
3177 			error);
3178 		return error;
3179 	}
3180 	/*
3181 	 * The device takes 40ms to come up after power-on according
3182 	 * to the mXT224 datasheet, page 13.
3183 	 */
3184 	msleep(MXT_BACKUP_TIME);
3185 
3186 	if (data->reset_gpio) {
3187 		/* Wait a while and then de-assert the RESET GPIO line */
3188 		msleep(MXT_RESET_GPIO_TIME);
3189 		gpiod_set_value(data->reset_gpio, 0);
3190 		msleep(MXT_RESET_INVALID_CHG);
3191 	}
3192 
3193 	error = mxt_initialize(data);
3194 	if (error)
3195 		goto err_disable_regulators;
3196 
3197 	error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group);
3198 	if (error) {
3199 		dev_err(&client->dev, "Failure %d creating sysfs group\n",
3200 			error);
3201 		goto err_free_object;
3202 	}
3203 
3204 	return 0;
3205 
3206 err_free_object:
3207 	mxt_free_input_device(data);
3208 	mxt_free_object_table(data);
3209 err_disable_regulators:
3210 	regulator_bulk_disable(ARRAY_SIZE(data->regulators),
3211 			       data->regulators);
3212 	return error;
3213 }
3214 
3215 static int mxt_remove(struct i2c_client *client)
3216 {
3217 	struct mxt_data *data = i2c_get_clientdata(client);
3218 
3219 	disable_irq(data->irq);
3220 	sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
3221 	mxt_free_input_device(data);
3222 	mxt_free_object_table(data);
3223 	regulator_bulk_disable(ARRAY_SIZE(data->regulators),
3224 			       data->regulators);
3225 
3226 	return 0;
3227 }
3228 
3229 static int __maybe_unused mxt_suspend(struct device *dev)
3230 {
3231 	struct i2c_client *client = to_i2c_client(dev);
3232 	struct mxt_data *data = i2c_get_clientdata(client);
3233 	struct input_dev *input_dev = data->input_dev;
3234 
3235 	if (!input_dev)
3236 		return 0;
3237 
3238 	mutex_lock(&input_dev->mutex);
3239 
3240 	if (input_device_enabled(input_dev))
3241 		mxt_stop(data);
3242 
3243 	mutex_unlock(&input_dev->mutex);
3244 
3245 	disable_irq(data->irq);
3246 
3247 	return 0;
3248 }
3249 
3250 static int __maybe_unused mxt_resume(struct device *dev)
3251 {
3252 	struct i2c_client *client = to_i2c_client(dev);
3253 	struct mxt_data *data = i2c_get_clientdata(client);
3254 	struct input_dev *input_dev = data->input_dev;
3255 
3256 	if (!input_dev)
3257 		return 0;
3258 
3259 	enable_irq(data->irq);
3260 
3261 	mutex_lock(&input_dev->mutex);
3262 
3263 	if (input_device_enabled(input_dev))
3264 		mxt_start(data);
3265 
3266 	mutex_unlock(&input_dev->mutex);
3267 
3268 	return 0;
3269 }
3270 
3271 static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume);
3272 
3273 static const struct of_device_id mxt_of_match[] = {
3274 	{ .compatible = "atmel,maxtouch", },
3275 	/* Compatibles listed below are deprecated */
3276 	{ .compatible = "atmel,qt602240_ts", },
3277 	{ .compatible = "atmel,atmel_mxt_ts", },
3278 	{ .compatible = "atmel,atmel_mxt_tp", },
3279 	{ .compatible = "atmel,mXT224", },
3280 	{},
3281 };
3282 MODULE_DEVICE_TABLE(of, mxt_of_match);
3283 
3284 #ifdef CONFIG_ACPI
3285 static const struct acpi_device_id mxt_acpi_id[] = {
3286 	{ "ATML0000", 0 },	/* Touchpad */
3287 	{ "ATML0001", 0 },	/* Touchscreen */
3288 	{ }
3289 };
3290 MODULE_DEVICE_TABLE(acpi, mxt_acpi_id);
3291 #endif
3292 
3293 static const struct i2c_device_id mxt_id[] = {
3294 	{ "qt602240_ts", 0 },
3295 	{ "atmel_mxt_ts", 0 },
3296 	{ "atmel_mxt_tp", 0 },
3297 	{ "maxtouch", 0 },
3298 	{ "mXT224", 0 },
3299 	{ }
3300 };
3301 MODULE_DEVICE_TABLE(i2c, mxt_id);
3302 
3303 static struct i2c_driver mxt_driver = {
3304 	.driver = {
3305 		.name	= "atmel_mxt_ts",
3306 		.of_match_table = mxt_of_match,
3307 		.acpi_match_table = ACPI_PTR(mxt_acpi_id),
3308 		.pm	= &mxt_pm_ops,
3309 	},
3310 	.probe		= mxt_probe,
3311 	.remove		= mxt_remove,
3312 	.id_table	= mxt_id,
3313 };
3314 
3315 module_i2c_driver(mxt_driver);
3316 
3317 /* Module information */
3318 MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
3319 MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver");
3320 MODULE_LICENSE("GPL");
3321