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