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