Input: atmel_mxt_ts - split message handler into separate functions
[cascardo/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  *
8  * Author: Joonyoung Shim <jy0922.shim@samsung.com>
9  *
10  * This program is free software; you can redistribute  it and/or modify it
11  * under  the terms of  the GNU General  Public License as published by the
12  * Free Software Foundation;  either version 2 of the  License, or (at your
13  * option) any later version.
14  *
15  */
16
17 #include <linux/module.h>
18 #include <linux/init.h>
19 #include <linux/completion.h>
20 #include <linux/delay.h>
21 #include <linux/firmware.h>
22 #include <linux/i2c.h>
23 #include <linux/i2c/atmel_mxt_ts.h>
24 #include <linux/input/mt.h>
25 #include <linux/interrupt.h>
26 #include <linux/of.h>
27 #include <linux/slab.h>
28
29 /* Version */
30 #define MXT_VER_20              20
31 #define MXT_VER_21              21
32 #define MXT_VER_22              22
33
34 /* Firmware files */
35 #define MXT_FW_NAME             "maxtouch.fw"
36 #define MXT_CFG_NAME            "maxtouch.cfg"
37 #define MXT_CFG_MAGIC           "OBP_RAW V1"
38
39 /* Registers */
40 #define MXT_INFO                0x00
41 #define MXT_FAMILY_ID           0x00
42 #define MXT_VARIANT_ID          0x01
43 #define MXT_VERSION             0x02
44 #define MXT_BUILD               0x03
45 #define MXT_MATRIX_X_SIZE       0x04
46 #define MXT_MATRIX_Y_SIZE       0x05
47 #define MXT_OBJECT_NUM          0x06
48 #define MXT_OBJECT_START        0x07
49
50 #define MXT_OBJECT_SIZE         6
51 #define MXT_INFO_CHECKSUM_SIZE  3
52 #define MXT_MAX_BLOCK_WRITE     256
53
54 /* Object types */
55 #define MXT_DEBUG_DIAGNOSTIC_T37        37
56 #define MXT_GEN_MESSAGE_T5              5
57 #define MXT_GEN_COMMAND_T6              6
58 #define MXT_GEN_POWER_T7                7
59 #define MXT_GEN_ACQUIRE_T8              8
60 #define MXT_GEN_DATASOURCE_T53          53
61 #define MXT_TOUCH_MULTI_T9              9
62 #define MXT_TOUCH_KEYARRAY_T15          15
63 #define MXT_TOUCH_PROXIMITY_T23         23
64 #define MXT_TOUCH_PROXKEY_T52           52
65 #define MXT_PROCI_GRIPFACE_T20          20
66 #define MXT_PROCG_NOISE_T22             22
67 #define MXT_PROCI_ONETOUCH_T24          24
68 #define MXT_PROCI_TWOTOUCH_T27          27
69 #define MXT_PROCI_GRIP_T40              40
70 #define MXT_PROCI_PALM_T41              41
71 #define MXT_PROCI_TOUCHSUPPRESSION_T42  42
72 #define MXT_PROCI_STYLUS_T47            47
73 #define MXT_PROCG_NOISESUPPRESSION_T48  48
74 #define MXT_SPT_COMMSCONFIG_T18         18
75 #define MXT_SPT_GPIOPWM_T19             19
76 #define MXT_SPT_SELFTEST_T25            25
77 #define MXT_SPT_CTECONFIG_T28           28
78 #define MXT_SPT_USERDATA_T38            38
79 #define MXT_SPT_DIGITIZER_T43           43
80 #define MXT_SPT_MESSAGECOUNT_T44        44
81 #define MXT_SPT_CTECONFIG_T46           46
82
83 /* MXT_GEN_MESSAGE_T5 object */
84 #define MXT_RPTID_NOMSG         0xff
85
86 /* MXT_GEN_COMMAND_T6 field */
87 #define MXT_COMMAND_RESET       0
88 #define MXT_COMMAND_BACKUPNV    1
89 #define MXT_COMMAND_CALIBRATE   2
90 #define MXT_COMMAND_REPORTALL   3
91 #define MXT_COMMAND_DIAGNOSTIC  5
92
93 /* Define for T6 status byte */
94 #define MXT_T6_STATUS_RESET     (1 << 7)
95 #define MXT_T6_STATUS_OFL       (1 << 6)
96 #define MXT_T6_STATUS_SIGERR    (1 << 5)
97 #define MXT_T6_STATUS_CAL       (1 << 4)
98 #define MXT_T6_STATUS_CFGERR    (1 << 3)
99 #define MXT_T6_STATUS_COMSERR   (1 << 2)
100
101 /* MXT_GEN_POWER_T7 field */
102 #define MXT_POWER_IDLEACQINT    0
103 #define MXT_POWER_ACTVACQINT    1
104 #define MXT_POWER_ACTV2IDLETO   2
105
106 /* MXT_GEN_ACQUIRE_T8 field */
107 #define MXT_ACQUIRE_CHRGTIME    0
108 #define MXT_ACQUIRE_TCHDRIFT    2
109 #define MXT_ACQUIRE_DRIFTST     3
110 #define MXT_ACQUIRE_TCHAUTOCAL  4
111 #define MXT_ACQUIRE_SYNC        5
112 #define MXT_ACQUIRE_ATCHCALST   6
113 #define MXT_ACQUIRE_ATCHCALSTHR 7
114
115 /* MXT_TOUCH_MULTI_T9 field */
116 #define MXT_TOUCH_CTRL          0
117 #define MXT_T9_ORIENT           9
118 #define MXT_T9_RANGE            18
119
120 /* MXT_TOUCH_MULTI_T9 status */
121 #define MXT_T9_UNGRIP           (1 << 0)
122 #define MXT_T9_SUPPRESS         (1 << 1)
123 #define MXT_T9_AMP              (1 << 2)
124 #define MXT_T9_VECTOR           (1 << 3)
125 #define MXT_T9_MOVE             (1 << 4)
126 #define MXT_T9_RELEASE          (1 << 5)
127 #define MXT_T9_PRESS            (1 << 6)
128 #define MXT_T9_DETECT           (1 << 7)
129
130 struct t9_range {
131         u16 x;
132         u16 y;
133 } __packed;
134
135 /* MXT_TOUCH_MULTI_T9 orient */
136 #define MXT_T9_ORIENT_SWITCH    (1 << 0)
137
138 /* MXT_PROCI_GRIPFACE_T20 field */
139 #define MXT_GRIPFACE_CTRL       0
140 #define MXT_GRIPFACE_XLOGRIP    1
141 #define MXT_GRIPFACE_XHIGRIP    2
142 #define MXT_GRIPFACE_YLOGRIP    3
143 #define MXT_GRIPFACE_YHIGRIP    4
144 #define MXT_GRIPFACE_MAXTCHS    5
145 #define MXT_GRIPFACE_SZTHR1     7
146 #define MXT_GRIPFACE_SZTHR2     8
147 #define MXT_GRIPFACE_SHPTHR1    9
148 #define MXT_GRIPFACE_SHPTHR2    10
149 #define MXT_GRIPFACE_SUPEXTTO   11
150
151 /* MXT_PROCI_NOISE field */
152 #define MXT_NOISE_CTRL          0
153 #define MXT_NOISE_OUTFLEN       1
154 #define MXT_NOISE_GCAFUL_LSB    3
155 #define MXT_NOISE_GCAFUL_MSB    4
156 #define MXT_NOISE_GCAFLL_LSB    5
157 #define MXT_NOISE_GCAFLL_MSB    6
158 #define MXT_NOISE_ACTVGCAFVALID 7
159 #define MXT_NOISE_NOISETHR      8
160 #define MXT_NOISE_FREQHOPSCALE  10
161 #define MXT_NOISE_FREQ0         11
162 #define MXT_NOISE_FREQ1         12
163 #define MXT_NOISE_FREQ2         13
164 #define MXT_NOISE_FREQ3         14
165 #define MXT_NOISE_FREQ4         15
166 #define MXT_NOISE_IDLEGCAFVALID 16
167
168 /* MXT_SPT_COMMSCONFIG_T18 */
169 #define MXT_COMMS_CTRL          0
170 #define MXT_COMMS_CMD           1
171
172 /* MXT_SPT_CTECONFIG_T28 field */
173 #define MXT_CTE_CTRL            0
174 #define MXT_CTE_CMD             1
175 #define MXT_CTE_MODE            2
176 #define MXT_CTE_IDLEGCAFDEPTH   3
177 #define MXT_CTE_ACTVGCAFDEPTH   4
178 #define MXT_CTE_VOLTAGE         5
179
180 #define MXT_VOLTAGE_DEFAULT     2700000
181 #define MXT_VOLTAGE_STEP        10000
182
183 /* Define for MXT_GEN_COMMAND_T6 */
184 #define MXT_BOOT_VALUE          0xa5
185 #define MXT_RESET_VALUE         0x01
186 #define MXT_BACKUP_VALUE        0x55
187
188 /* Delay times */
189 #define MXT_BACKUP_TIME         50      /* msec */
190 #define MXT_RESET_TIME          200     /* msec */
191 #define MXT_RESET_TIMEOUT       3000    /* msec */
192 #define MXT_CRC_TIMEOUT         1000    /* msec */
193 #define MXT_FW_RESET_TIME       3000    /* msec */
194 #define MXT_FW_CHG_TIMEOUT      300     /* msec */
195
196 /* Command to unlock bootloader */
197 #define MXT_UNLOCK_CMD_MSB      0xaa
198 #define MXT_UNLOCK_CMD_LSB      0xdc
199
200 /* Bootloader mode status */
201 #define MXT_WAITING_BOOTLOAD_CMD        0xc0    /* valid 7 6 bit only */
202 #define MXT_WAITING_FRAME_DATA  0x80    /* valid 7 6 bit only */
203 #define MXT_FRAME_CRC_CHECK     0x02
204 #define MXT_FRAME_CRC_FAIL      0x03
205 #define MXT_FRAME_CRC_PASS      0x04
206 #define MXT_APP_CRC_FAIL        0x40    /* valid 7 8 bit only */
207 #define MXT_BOOT_STATUS_MASK    0x3f
208 #define MXT_BOOT_EXTENDED_ID    (1 << 5)
209 #define MXT_BOOT_ID_MASK        0x1f
210
211 /* Touchscreen absolute values */
212 #define MXT_MAX_AREA            0xff
213
214 #define MXT_PIXELS_PER_MM       20
215
216 struct mxt_info {
217         u8 family_id;
218         u8 variant_id;
219         u8 version;
220         u8 build;
221         u8 matrix_xsize;
222         u8 matrix_ysize;
223         u8 object_num;
224 };
225
226 struct mxt_object {
227         u8 type;
228         u16 start_address;
229         u8 size_minus_one;
230         u8 instances_minus_one;
231         u8 num_report_ids;
232 } __packed;
233
234 /* Each client has this additional data */
235 struct mxt_data {
236         struct i2c_client *client;
237         struct input_dev *input_dev;
238         char phys[64];          /* device physical location */
239         const struct mxt_platform_data *pdata;
240         struct mxt_object *object_table;
241         struct mxt_info info;
242         unsigned int irq;
243         unsigned int max_x;
244         unsigned int max_y;
245         bool in_bootloader;
246         u16 mem_size;
247         u32 config_crc;
248         u32 info_crc;
249         u8 bootloader_addr;
250         u8 *msg_buf;
251         u8 t6_status;
252         bool update_input;
253
254         /* Cached parameters from object table */
255         u16 T5_address;
256         u8 T5_msg_size;
257         u8 T6_reportid;
258         u16 T6_address;
259         u16 T7_address;
260         u8 T9_reportid_min;
261         u8 T9_reportid_max;
262         u8 T19_reportid;
263
264         /* for fw update in bootloader */
265         struct completion bl_completion;
266
267         /* for reset handling */
268         struct completion reset_completion;
269
270         /* for config update handling */
271         struct completion crc_completion;
272 };
273
274 static size_t mxt_obj_size(const struct mxt_object *obj)
275 {
276         return obj->size_minus_one + 1;
277 }
278
279 static size_t mxt_obj_instances(const struct mxt_object *obj)
280 {
281         return obj->instances_minus_one + 1;
282 }
283
284 static bool mxt_object_readable(unsigned int type)
285 {
286         switch (type) {
287         case MXT_GEN_COMMAND_T6:
288         case MXT_GEN_POWER_T7:
289         case MXT_GEN_ACQUIRE_T8:
290         case MXT_GEN_DATASOURCE_T53:
291         case MXT_TOUCH_MULTI_T9:
292         case MXT_TOUCH_KEYARRAY_T15:
293         case MXT_TOUCH_PROXIMITY_T23:
294         case MXT_TOUCH_PROXKEY_T52:
295         case MXT_PROCI_GRIPFACE_T20:
296         case MXT_PROCG_NOISE_T22:
297         case MXT_PROCI_ONETOUCH_T24:
298         case MXT_PROCI_TWOTOUCH_T27:
299         case MXT_PROCI_GRIP_T40:
300         case MXT_PROCI_PALM_T41:
301         case MXT_PROCI_TOUCHSUPPRESSION_T42:
302         case MXT_PROCI_STYLUS_T47:
303         case MXT_PROCG_NOISESUPPRESSION_T48:
304         case MXT_SPT_COMMSCONFIG_T18:
305         case MXT_SPT_GPIOPWM_T19:
306         case MXT_SPT_SELFTEST_T25:
307         case MXT_SPT_CTECONFIG_T28:
308         case MXT_SPT_USERDATA_T38:
309         case MXT_SPT_DIGITIZER_T43:
310         case MXT_SPT_CTECONFIG_T46:
311                 return true;
312         default:
313                 return false;
314         }
315 }
316
317 static void mxt_dump_message(struct mxt_data *data, u8 *message)
318 {
319         dev_dbg(&data->client->dev, "message: %*ph\n",
320                 data->T5_msg_size, message);
321 }
322
323 static int mxt_wait_for_completion(struct mxt_data *data,
324                                    struct completion *comp,
325                                    unsigned int timeout_ms)
326 {
327         struct device *dev = &data->client->dev;
328         unsigned long timeout = msecs_to_jiffies(timeout_ms);
329         long ret;
330
331         ret = wait_for_completion_interruptible_timeout(comp, timeout);
332         if (ret < 0) {
333                 return ret;
334         } else if (ret == 0) {
335                 dev_err(dev, "Wait for completion timed out.\n");
336                 return -ETIMEDOUT;
337         }
338         return 0;
339 }
340
341 static int mxt_bootloader_read(struct mxt_data *data,
342                                u8 *val, unsigned int count)
343 {
344         int ret;
345         struct i2c_msg msg;
346
347         msg.addr = data->bootloader_addr;
348         msg.flags = data->client->flags & I2C_M_TEN;
349         msg.flags |= I2C_M_RD;
350         msg.len = count;
351         msg.buf = val;
352
353         ret = i2c_transfer(data->client->adapter, &msg, 1);
354
355         if (ret == 1) {
356                 ret = 0;
357         } else {
358                 ret = ret < 0 ? ret : -EIO;
359                 dev_err(&data->client->dev, "%s: i2c recv failed (%d)\n",
360                         __func__, ret);
361         }
362
363         return ret;
364 }
365
366 static int mxt_bootloader_write(struct mxt_data *data,
367                                 const u8 * const val, unsigned int count)
368 {
369         int ret;
370         struct i2c_msg msg;
371
372         msg.addr = data->bootloader_addr;
373         msg.flags = data->client->flags & I2C_M_TEN;
374         msg.len = count;
375         msg.buf = (u8 *)val;
376
377         ret = i2c_transfer(data->client->adapter, &msg, 1);
378         if (ret == 1) {
379                 ret = 0;
380         } else {
381                 ret = ret < 0 ? ret : -EIO;
382                 dev_err(&data->client->dev, "%s: i2c send failed (%d)\n",
383                         __func__, ret);
384         }
385
386         return ret;
387 }
388
389 static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
390 {
391         u8 appmode = data->client->addr;
392         u8 bootloader;
393
394         switch (appmode) {
395         case 0x4a:
396         case 0x4b:
397                 /* Chips after 1664S use different scheme */
398                 if (retry || data->info.family_id >= 0xa2) {
399                         bootloader = appmode - 0x24;
400                         break;
401                 }
402                 /* Fall through for normal case */
403         case 0x4c:
404         case 0x4d:
405         case 0x5a:
406         case 0x5b:
407                 bootloader = appmode - 0x26;
408                 break;
409         default:
410                 dev_err(&data->client->dev,
411                         "Appmode i2c address 0x%02x not found\n",
412                         appmode);
413                 return -EINVAL;
414         }
415
416         data->bootloader_addr = bootloader;
417         return 0;
418 }
419
420 static int mxt_probe_bootloader(struct mxt_data *data, bool retry)
421 {
422         struct device *dev = &data->client->dev;
423         int ret;
424         u8 val;
425         bool crc_failure;
426
427         ret = mxt_lookup_bootloader_address(data, retry);
428         if (ret)
429                 return ret;
430
431         ret = mxt_bootloader_read(data, &val, 1);
432         if (ret)
433                 return ret;
434
435         /* Check app crc fail mode */
436         crc_failure = (val & ~MXT_BOOT_STATUS_MASK) == MXT_APP_CRC_FAIL;
437
438         dev_err(dev, "Detected bootloader, status:%02X%s\n",
439                         val, crc_failure ? ", APP_CRC_FAIL" : "");
440
441         return 0;
442 }
443
444 static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val)
445 {
446         struct device *dev = &data->client->dev;
447         u8 buf[3];
448
449         if (val & MXT_BOOT_EXTENDED_ID) {
450                 if (mxt_bootloader_read(data, &buf[0], 3) != 0) {
451                         dev_err(dev, "%s: i2c failure\n", __func__);
452                         return val;
453                 }
454
455                 dev_dbg(dev, "Bootloader ID:%d Version:%d\n", buf[1], buf[2]);
456
457                 return buf[0];
458         } else {
459                 dev_dbg(dev, "Bootloader ID:%d\n", val & MXT_BOOT_ID_MASK);
460
461                 return val;
462         }
463 }
464
465 static int mxt_check_bootloader(struct mxt_data *data, unsigned int state,
466                                 bool wait)
467 {
468         struct device *dev = &data->client->dev;
469         u8 val;
470         int ret;
471
472 recheck:
473         if (wait) {
474                 /*
475                  * In application update mode, the interrupt
476                  * line signals state transitions. We must wait for the
477                  * CHG assertion before reading the status byte.
478                  * Once the status byte has been read, the line is deasserted.
479                  */
480                 ret = mxt_wait_for_completion(data, &data->bl_completion,
481                                               MXT_FW_CHG_TIMEOUT);
482                 if (ret) {
483                         /*
484                          * TODO: handle -ERESTARTSYS better by terminating
485                          * fw update process before returning to userspace
486                          * by writing length 0x000 to device (iff we are in
487                          * WAITING_FRAME_DATA state).
488                          */
489                         dev_err(dev, "Update wait error %d\n", ret);
490                         return ret;
491                 }
492         }
493
494         ret = mxt_bootloader_read(data, &val, 1);
495         if (ret)
496                 return ret;
497
498         if (state == MXT_WAITING_BOOTLOAD_CMD)
499                 val = mxt_get_bootloader_version(data, val);
500
501         switch (state) {
502         case MXT_WAITING_BOOTLOAD_CMD:
503         case MXT_WAITING_FRAME_DATA:
504         case MXT_APP_CRC_FAIL:
505                 val &= ~MXT_BOOT_STATUS_MASK;
506                 break;
507         case MXT_FRAME_CRC_PASS:
508                 if (val == MXT_FRAME_CRC_CHECK) {
509                         goto recheck;
510                 } else if (val == MXT_FRAME_CRC_FAIL) {
511                         dev_err(dev, "Bootloader CRC fail\n");
512                         return -EINVAL;
513                 }
514                 break;
515         default:
516                 return -EINVAL;
517         }
518
519         if (val != state) {
520                 dev_err(dev, "Invalid bootloader state %02X != %02X\n",
521                         val, state);
522                 return -EINVAL;
523         }
524
525         return 0;
526 }
527
528 static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock)
529 {
530         int ret;
531         u8 buf[2];
532
533         if (unlock) {
534                 buf[0] = MXT_UNLOCK_CMD_LSB;
535                 buf[1] = MXT_UNLOCK_CMD_MSB;
536         } else {
537                 buf[0] = 0x01;
538                 buf[1] = 0x01;
539         }
540
541         ret = mxt_bootloader_write(data, buf, 2);
542         if (ret)
543                 return ret;
544
545         return 0;
546 }
547
548 static int __mxt_read_reg(struct i2c_client *client,
549                                u16 reg, u16 len, void *val)
550 {
551         struct i2c_msg xfer[2];
552         u8 buf[2];
553         int ret;
554
555         buf[0] = reg & 0xff;
556         buf[1] = (reg >> 8) & 0xff;
557
558         /* Write register */
559         xfer[0].addr = client->addr;
560         xfer[0].flags = 0;
561         xfer[0].len = 2;
562         xfer[0].buf = buf;
563
564         /* Read data */
565         xfer[1].addr = client->addr;
566         xfer[1].flags = I2C_M_RD;
567         xfer[1].len = len;
568         xfer[1].buf = val;
569
570         ret = i2c_transfer(client->adapter, xfer, 2);
571         if (ret == 2) {
572                 ret = 0;
573         } else {
574                 if (ret >= 0)
575                         ret = -EIO;
576                 dev_err(&client->dev, "%s: i2c transfer failed (%d)\n",
577                         __func__, ret);
578         }
579
580         return ret;
581 }
582
583 static int __mxt_write_reg(struct i2c_client *client, u16 reg, u16 len,
584                            const void *val)
585 {
586         u8 *buf;
587         size_t count;
588         int ret;
589
590         count = len + 2;
591         buf = kmalloc(count, GFP_KERNEL);
592         if (!buf)
593                 return -ENOMEM;
594
595         buf[0] = reg & 0xff;
596         buf[1] = (reg >> 8) & 0xff;
597         memcpy(&buf[2], val, len);
598
599         ret = i2c_master_send(client, buf, count);
600         if (ret == count) {
601                 ret = 0;
602         } else {
603                 if (ret >= 0)
604                         ret = -EIO;
605                 dev_err(&client->dev, "%s: i2c send failed (%d)\n",
606                         __func__, ret);
607         }
608
609         kfree(buf);
610         return ret;
611 }
612
613 static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val)
614 {
615         return __mxt_write_reg(client, reg, 1, &val);
616 }
617
618 static struct mxt_object *
619 mxt_get_object(struct mxt_data *data, u8 type)
620 {
621         struct mxt_object *object;
622         int i;
623
624         for (i = 0; i < data->info.object_num; i++) {
625                 object = data->object_table + i;
626                 if (object->type == type)
627                         return object;
628         }
629
630         dev_warn(&data->client->dev, "Invalid object type T%u\n", type);
631         return NULL;
632 }
633
634 static void mxt_proc_t6_messages(struct mxt_data *data, u8 *msg)
635 {
636         struct device *dev = &data->client->dev;
637         u8 status = msg[1];
638         u32 crc = msg[2] | (msg[3] << 8) | (msg[4] << 16);
639
640         complete(&data->crc_completion);
641
642         if (crc != data->config_crc) {
643                 data->config_crc = crc;
644                 dev_dbg(dev, "T6 Config Checksum: 0x%06X\n", crc);
645         }
646
647         /* Detect reset */
648         if (status & MXT_T6_STATUS_RESET)
649                 complete(&data->reset_completion);
650
651         /* Output debug if status has changed */
652         if (status != data->t6_status)
653                 dev_dbg(dev, "T6 Status 0x%02X%s%s%s%s%s%s%s\n",
654                         status,
655                         status == 0 ? " OK" : "",
656                         status & MXT_T6_STATUS_RESET ? " RESET" : "",
657                         status & MXT_T6_STATUS_OFL ? " OFL" : "",
658                         status & MXT_T6_STATUS_SIGERR ? " SIGERR" : "",
659                         status & MXT_T6_STATUS_CAL ? " CAL" : "",
660                         status & MXT_T6_STATUS_CFGERR ? " CFGERR" : "",
661                         status & MXT_T6_STATUS_COMSERR ? " COMSERR" : "");
662
663         /* Save current status */
664         data->t6_status = status;
665 }
666
667 static int mxt_write_object(struct mxt_data *data,
668                                  u8 type, u8 offset, u8 val)
669 {
670         struct mxt_object *object;
671         u16 reg;
672
673         object = mxt_get_object(data, type);
674         if (!object || offset >= mxt_obj_size(object))
675                 return -EINVAL;
676
677         reg = object->start_address;
678         return mxt_write_reg(data->client, reg + offset, val);
679 }
680
681 static void mxt_input_button(struct mxt_data *data, u8 *message)
682 {
683         struct input_dev *input = data->input_dev;
684         const struct mxt_platform_data *pdata = data->pdata;
685         bool button;
686         int i;
687
688         /* Active-low switch */
689         for (i = 0; i < pdata->t19_num_keys; i++) {
690                 if (pdata->t19_keymap[i] == KEY_RESERVED)
691                         continue;
692                 button = !(message[1] & (1 << i));
693                 input_report_key(input, pdata->t19_keymap[i], button);
694         }
695 }
696
697 static void mxt_input_sync(struct mxt_data *data)
698 {
699         input_mt_report_pointer_emulation(data->input_dev,
700                                           data->pdata->t19_num_keys);
701         input_sync(data->input_dev);
702 }
703
704 static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
705 {
706         struct device *dev = &data->client->dev;
707         struct input_dev *input_dev = data->input_dev;
708         int id;
709         u8 status;
710         int x;
711         int y;
712         int area;
713         int amplitude;
714
715         id = message[0] - data->T9_reportid_min;
716         status = message[1];
717         x = (message[2] << 4) | ((message[4] >> 4) & 0xf);
718         y = (message[3] << 4) | ((message[4] & 0xf));
719
720         /* Handle 10/12 bit switching */
721         if (data->max_x < 1024)
722                 x >>= 2;
723         if (data->max_y < 1024)
724                 y >>= 2;
725
726         area = message[5];
727         amplitude = message[6];
728
729         dev_dbg(dev,
730                 "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n",
731                 id,
732                 (status & MXT_T9_DETECT) ? 'D' : '.',
733                 (status & MXT_T9_PRESS) ? 'P' : '.',
734                 (status & MXT_T9_RELEASE) ? 'R' : '.',
735                 (status & MXT_T9_MOVE) ? 'M' : '.',
736                 (status & MXT_T9_VECTOR) ? 'V' : '.',
737                 (status & MXT_T9_AMP) ? 'A' : '.',
738                 (status & MXT_T9_SUPPRESS) ? 'S' : '.',
739                 (status & MXT_T9_UNGRIP) ? 'U' : '.',
740                 x, y, area, amplitude);
741
742         input_mt_slot(input_dev, id);
743
744         if (status & MXT_T9_DETECT) {
745                 /*
746                  * Multiple bits may be set if the host is slow to read
747                  * the status messages, indicating all the events that
748                  * have happened.
749                  */
750                 if (status & MXT_T9_RELEASE) {
751                         input_mt_report_slot_state(input_dev,
752                                                    MT_TOOL_FINGER, 0);
753                         mxt_input_sync(data);
754                 }
755
756                 /* Touch active */
757                 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 1);
758                 input_report_abs(input_dev, ABS_MT_POSITION_X, x);
759                 input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
760                 input_report_abs(input_dev, ABS_MT_PRESSURE, amplitude);
761                 input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area);
762         } else {
763                 /* Touch no longer active, close out slot */
764                 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0);
765         }
766
767         data->update_input = true;
768 }
769
770 static int mxt_proc_message(struct mxt_data *data, u8 *message)
771 {
772         u8 report_id = message[0];
773
774         if (report_id == MXT_RPTID_NOMSG)
775                 return 0;
776
777         if (report_id == data->T6_reportid) {
778                 mxt_proc_t6_messages(data, message);
779         } else if (!data->input_dev) {
780                 /*
781                  * Do not report events if input device
782                  * is not yet registered.
783                  */
784                 mxt_dump_message(data, message);
785         } else if (report_id >= data->T9_reportid_min
786             && report_id <= data->T9_reportid_max) {
787                 mxt_proc_t9_message(data, message);
788         } else if (report_id == data->T19_reportid) {
789                 mxt_input_button(data, message);
790                 data->update_input = true;
791         } else {
792                 mxt_dump_message(data, message);
793         }
794
795         return 1;
796 }
797
798 static int mxt_read_and_process_message(struct mxt_data *data)
799 {
800         struct device *dev = &data->client->dev;
801         int ret;
802
803         ret = __mxt_read_reg(data->client, data->T5_address,
804                                 data->T5_msg_size, data->msg_buf);
805         if (ret) {
806                 dev_err(dev, "Error %d reading message\n", ret);
807                 return ret;
808         }
809
810         return mxt_proc_message(data, data->msg_buf);
811 }
812
813 static irqreturn_t mxt_process_messages_until_invalid(struct mxt_data *data)
814 {
815         int ret;
816
817         do {
818                 ret = mxt_read_and_process_message(data);
819                 if (ret < 0)
820                         return IRQ_NONE;
821         } while (ret > 0);
822
823         if (data->update_input) {
824                 mxt_input_sync(data);
825                 data->update_input = false;
826         }
827
828         return IRQ_HANDLED;
829 }
830
831 static irqreturn_t mxt_interrupt(int irq, void *dev_id)
832 {
833         struct mxt_data *data = dev_id;
834
835         if (data->in_bootloader) {
836                 /* bootloader state transition completion */
837                 complete(&data->bl_completion);
838                 return IRQ_HANDLED;
839         }
840
841         if (!data->object_table)
842                 return IRQ_HANDLED;
843
844         return mxt_process_messages_until_invalid(data);
845 }
846
847 static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset,
848                           u8 value, bool wait)
849 {
850         u16 reg;
851         u8 command_register;
852         int timeout_counter = 0;
853         int ret;
854
855         reg = data->T6_address + cmd_offset;
856
857         ret = mxt_write_reg(data->client, reg, value);
858         if (ret)
859                 return ret;
860
861         if (!wait)
862                 return 0;
863
864         do {
865                 msleep(20);
866                 ret = __mxt_read_reg(data->client, reg, 1, &command_register);
867                 if (ret)
868                         return ret;
869         } while (command_register != 0 && timeout_counter++ <= 100);
870
871         if (timeout_counter > 100) {
872                 dev_err(&data->client->dev, "Command failed!\n");
873                 return -EIO;
874         }
875
876         return 0;
877 }
878
879 static int mxt_soft_reset(struct mxt_data *data)
880 {
881         struct device *dev = &data->client->dev;
882         int ret = 0;
883
884         dev_info(dev, "Resetting chip\n");
885
886         reinit_completion(&data->reset_completion);
887
888         ret = mxt_t6_command(data, MXT_COMMAND_RESET, MXT_RESET_VALUE, false);
889         if (ret)
890                 return ret;
891
892         ret = mxt_wait_for_completion(data, &data->reset_completion,
893                                       MXT_RESET_TIMEOUT);
894         if (ret)
895                 return ret;
896
897         return 0;
898 }
899
900 static void mxt_update_crc(struct mxt_data *data, u8 cmd, u8 value)
901 {
902         /*
903          * On failure, CRC is set to 0 and config will always be
904          * downloaded.
905          */
906         data->config_crc = 0;
907         reinit_completion(&data->crc_completion);
908
909         mxt_t6_command(data, cmd, value, true);
910
911         /*
912          * Wait for crc message. On failure, CRC is set to 0 and config will
913          * always be downloaded.
914          */
915         mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT);
916 }
917
918 static void mxt_calc_crc24(u32 *crc, u8 firstbyte, u8 secondbyte)
919 {
920         static const unsigned int crcpoly = 0x80001B;
921         u32 result;
922         u32 data_word;
923
924         data_word = (secondbyte << 8) | firstbyte;
925         result = ((*crc << 1) ^ data_word);
926
927         if (result & 0x1000000)
928                 result ^= crcpoly;
929
930         *crc = result;
931 }
932
933 static u32 mxt_calculate_crc(u8 *base, off_t start_off, off_t end_off)
934 {
935         u32 crc = 0;
936         u8 *ptr = base + start_off;
937         u8 *last_val = base + end_off - 1;
938
939         if (end_off < start_off)
940                 return -EINVAL;
941
942         while (ptr < last_val) {
943                 mxt_calc_crc24(&crc, *ptr, *(ptr + 1));
944                 ptr += 2;
945         }
946
947         /* if len is odd, fill the last byte with 0 */
948         if (ptr == last_val)
949                 mxt_calc_crc24(&crc, *ptr, 0);
950
951         /* Mask to 24-bit */
952         crc &= 0x00FFFFFF;
953
954         return crc;
955 }
956
957 /*
958  * mxt_update_cfg - download configuration to chip
959  *
960  * Atmel Raw Config File Format
961  *
962  * The first four lines of the raw config file contain:
963  *  1) Version
964  *  2) Chip ID Information (first 7 bytes of device memory)
965  *  3) Chip Information Block 24-bit CRC Checksum
966  *  4) Chip Configuration 24-bit CRC Checksum
967  *
968  * The rest of the file consists of one line per object instance:
969  *   <TYPE> <INSTANCE> <SIZE> <CONTENTS>
970  *
971  *   <TYPE> - 2-byte object type as hex
972  *   <INSTANCE> - 2-byte object instance number as hex
973  *   <SIZE> - 2-byte object size as hex
974  *   <CONTENTS> - array of <SIZE> 1-byte hex values
975  */
976 static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg)
977 {
978         struct device *dev = &data->client->dev;
979         struct mxt_info cfg_info;
980         struct mxt_object *object;
981         int ret;
982         int offset;
983         int data_pos;
984         int byte_offset;
985         int i;
986         int cfg_start_ofs;
987         u32 info_crc, config_crc, calculated_crc;
988         u8 *config_mem;
989         size_t config_mem_size;
990         unsigned int type, instance, size;
991         u8 val;
992         u16 reg;
993
994         mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1);
995
996         if (strncmp(cfg->data, MXT_CFG_MAGIC, strlen(MXT_CFG_MAGIC))) {
997                 dev_err(dev, "Unrecognised config file\n");
998                 ret = -EINVAL;
999                 goto release;
1000         }
1001
1002         data_pos = strlen(MXT_CFG_MAGIC);
1003
1004         /* Load information block and check */
1005         for (i = 0; i < sizeof(struct mxt_info); i++) {
1006                 ret = sscanf(cfg->data + data_pos, "%hhx%n",
1007                              (unsigned char *)&cfg_info + i,
1008                              &offset);
1009                 if (ret != 1) {
1010                         dev_err(dev, "Bad format\n");
1011                         ret = -EINVAL;
1012                         goto release;
1013                 }
1014
1015                 data_pos += offset;
1016         }
1017
1018         if (cfg_info.family_id != data->info.family_id) {
1019                 dev_err(dev, "Family ID mismatch!\n");
1020                 ret = -EINVAL;
1021                 goto release;
1022         }
1023
1024         if (cfg_info.variant_id != data->info.variant_id) {
1025                 dev_err(dev, "Variant ID mismatch!\n");
1026                 ret = -EINVAL;
1027                 goto release;
1028         }
1029
1030         /* Read CRCs */
1031         ret = sscanf(cfg->data + data_pos, "%x%n", &info_crc, &offset);
1032         if (ret != 1) {
1033                 dev_err(dev, "Bad format: failed to parse Info CRC\n");
1034                 ret = -EINVAL;
1035                 goto release;
1036         }
1037         data_pos += offset;
1038
1039         ret = sscanf(cfg->data + data_pos, "%x%n", &config_crc, &offset);
1040         if (ret != 1) {
1041                 dev_err(dev, "Bad format: failed to parse Config CRC\n");
1042                 ret = -EINVAL;
1043                 goto release;
1044         }
1045         data_pos += offset;
1046
1047         /*
1048          * The Info Block CRC is calculated over mxt_info and the object
1049          * table. If it does not match then we are trying to load the
1050          * configuration from a different chip or firmware version, so
1051          * the configuration CRC is invalid anyway.
1052          */
1053         if (info_crc == data->info_crc) {
1054                 if (config_crc == 0 || data->config_crc == 0) {
1055                         dev_info(dev, "CRC zero, attempting to apply config\n");
1056                 } else if (config_crc == data->config_crc) {
1057                         dev_dbg(dev, "Config CRC 0x%06X: OK\n",
1058                                  data->config_crc);
1059                         ret = 0;
1060                         goto release;
1061                 } else {
1062                         dev_info(dev, "Config CRC 0x%06X: does not match file 0x%06X\n",
1063                                  data->config_crc, config_crc);
1064                 }
1065         } else {
1066                 dev_warn(dev,
1067                          "Warning: Info CRC error - device=0x%06X file=0x%06X\n",
1068                          data->info_crc, info_crc);
1069         }
1070
1071         /* Malloc memory to store configuration */
1072         cfg_start_ofs = MXT_OBJECT_START +
1073                         data->info.object_num * sizeof(struct mxt_object) +
1074                         MXT_INFO_CHECKSUM_SIZE;
1075         config_mem_size = data->mem_size - cfg_start_ofs;
1076         config_mem = kzalloc(config_mem_size, GFP_KERNEL);
1077         if (!config_mem) {
1078                 dev_err(dev, "Failed to allocate memory\n");
1079                 ret = -ENOMEM;
1080                 goto release;
1081         }
1082
1083         while (data_pos < cfg->size) {
1084                 /* Read type, instance, length */
1085                 ret = sscanf(cfg->data + data_pos, "%x %x %x%n",
1086                              &type, &instance, &size, &offset);
1087                 if (ret == 0) {
1088                         /* EOF */
1089                         break;
1090                 } else if (ret != 3) {
1091                         dev_err(dev, "Bad format: failed to parse object\n");
1092                         ret = -EINVAL;
1093                         goto release_mem;
1094                 }
1095                 data_pos += offset;
1096
1097                 object = mxt_get_object(data, type);
1098                 if (!object) {
1099                         /* Skip object */
1100                         for (i = 0; i < size; i++) {
1101                                 ret = sscanf(cfg->data + data_pos, "%hhx%n",
1102                                              &val,
1103                                              &offset);
1104                                 data_pos += offset;
1105                         }
1106                         continue;
1107                 }
1108
1109                 if (size > mxt_obj_size(object)) {
1110                         /*
1111                          * Either we are in fallback mode due to wrong
1112                          * config or config from a later fw version,
1113                          * or the file is corrupt or hand-edited.
1114                          */
1115                         dev_warn(dev, "Discarding %zu byte(s) in T%u\n",
1116                                  size - mxt_obj_size(object), type);
1117                 } else if (mxt_obj_size(object) > size) {
1118                         /*
1119                          * If firmware is upgraded, new bytes may be added to
1120                          * end of objects. It is generally forward compatible
1121                          * to zero these bytes - previous behaviour will be
1122                          * retained. However this does invalidate the CRC and
1123                          * will force fallback mode until the configuration is
1124                          * updated. We warn here but do nothing else - the
1125                          * malloc has zeroed the entire configuration.
1126                          */
1127                         dev_warn(dev, "Zeroing %zu byte(s) in T%d\n",
1128                                  mxt_obj_size(object) - size, type);
1129                 }
1130
1131                 if (instance >= mxt_obj_instances(object)) {
1132                         dev_err(dev, "Object instances exceeded!\n");
1133                         ret = -EINVAL;
1134                         goto release_mem;
1135                 }
1136
1137                 reg = object->start_address + mxt_obj_size(object) * instance;
1138
1139                 for (i = 0; i < size; i++) {
1140                         ret = sscanf(cfg->data + data_pos, "%hhx%n",
1141                                      &val,
1142                                      &offset);
1143                         if (ret != 1) {
1144                                 dev_err(dev, "Bad format in T%d\n", type);
1145                                 ret = -EINVAL;
1146                                 goto release_mem;
1147                         }
1148                         data_pos += offset;
1149
1150                         if (i > mxt_obj_size(object))
1151                                 continue;
1152
1153                         byte_offset = reg + i - cfg_start_ofs;
1154
1155                         if ((byte_offset >= 0)
1156                             && (byte_offset <= config_mem_size)) {
1157                                 *(config_mem + byte_offset) = val;
1158                         } else {
1159                                 dev_err(dev, "Bad object: reg:%d, T%d, ofs=%d\n",
1160                                         reg, object->type, byte_offset);
1161                                 ret = -EINVAL;
1162                                 goto release_mem;
1163                         }
1164                 }
1165         }
1166
1167         /* Calculate crc of the received configs (not the raw config file) */
1168         if (data->T7_address < cfg_start_ofs) {
1169                 dev_err(dev, "Bad T7 address, T7addr = %x, config offset %x\n",
1170                         data->T7_address, cfg_start_ofs);
1171                 ret = 0;
1172                 goto release_mem;
1173         }
1174
1175         calculated_crc = mxt_calculate_crc(config_mem,
1176                                            data->T7_address - cfg_start_ofs,
1177                                            config_mem_size);
1178
1179         if (config_crc > 0 && (config_crc != calculated_crc))
1180                 dev_warn(dev, "Config CRC error, calculated=%06X, file=%06X\n",
1181                          calculated_crc, config_crc);
1182
1183         /* Write configuration as blocks */
1184         byte_offset = 0;
1185         while (byte_offset < config_mem_size) {
1186                 size = config_mem_size - byte_offset;
1187
1188                 if (size > MXT_MAX_BLOCK_WRITE)
1189                         size = MXT_MAX_BLOCK_WRITE;
1190
1191                 ret = __mxt_write_reg(data->client,
1192                                       cfg_start_ofs + byte_offset,
1193                                       size, config_mem + byte_offset);
1194                 if (ret != 0) {
1195                         dev_err(dev, "Config write error, ret=%d\n", ret);
1196                         goto release_mem;
1197                 }
1198
1199                 byte_offset += size;
1200         }
1201
1202         mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE);
1203
1204         ret = mxt_soft_reset(data);
1205         if (ret)
1206                 goto release_mem;
1207
1208         dev_info(dev, "Config successfully updated\n");
1209
1210 release_mem:
1211         kfree(config_mem);
1212 release:
1213         release_firmware(cfg);
1214         return ret;
1215 }
1216
1217 static int mxt_make_highchg(struct mxt_data *data)
1218 {
1219         struct device *dev = &data->client->dev;
1220         int count = 10;
1221         int ret;
1222
1223         /* Read messages until we force an invalid */
1224         do {
1225                 ret = mxt_read_and_process_message(data);
1226                 if (ret == 0)
1227                         return 0;
1228                 else if (ret < 0)
1229                         return ret;
1230         } while (--count);
1231
1232         dev_err(dev, "CHG pin isn't cleared\n");
1233         return -EBUSY;
1234 }
1235
1236 static int mxt_acquire_irq(struct mxt_data *data)
1237 {
1238         int error;
1239
1240         enable_irq(data->irq);
1241
1242         error = mxt_make_highchg(data);
1243         if (error)
1244                 return error;
1245
1246         return 0;
1247 }
1248
1249 static int mxt_get_info(struct mxt_data *data)
1250 {
1251         struct i2c_client *client = data->client;
1252         struct mxt_info *info = &data->info;
1253         int error;
1254
1255         /* Read 7-byte info block starting at address 0 */
1256         error = __mxt_read_reg(client, MXT_INFO, sizeof(*info), info);
1257         if (error)
1258                 return error;
1259
1260         return 0;
1261 }
1262
1263 static void mxt_free_object_table(struct mxt_data *data)
1264 {
1265         input_unregister_device(data->input_dev);
1266         data->input_dev = NULL;
1267
1268         kfree(data->object_table);
1269         data->object_table = NULL;
1270         kfree(data->msg_buf);
1271         data->msg_buf = NULL;
1272         data->T5_address = 0;
1273         data->T5_msg_size = 0;
1274         data->T6_reportid = 0;
1275         data->T7_address = 0;
1276         data->T9_reportid_min = 0;
1277         data->T9_reportid_max = 0;
1278         data->T19_reportid = 0;
1279 }
1280
1281 static int mxt_get_object_table(struct mxt_data *data)
1282 {
1283         struct i2c_client *client = data->client;
1284         size_t table_size;
1285         struct mxt_object *object_table;
1286         int error;
1287         int i;
1288         u8 reportid;
1289         u16 end_address;
1290
1291         table_size = data->info.object_num * sizeof(struct mxt_object);
1292         object_table = kzalloc(table_size, GFP_KERNEL);
1293         if (!object_table) {
1294                 dev_err(&data->client->dev, "Failed to allocate memory\n");
1295                 return -ENOMEM;
1296         }
1297
1298         error = __mxt_read_reg(client, MXT_OBJECT_START, table_size,
1299                         object_table);
1300         if (error) {
1301                 kfree(object_table);
1302                 return error;
1303         }
1304
1305         /* Valid Report IDs start counting from 1 */
1306         reportid = 1;
1307         data->mem_size = 0;
1308         for (i = 0; i < data->info.object_num; i++) {
1309                 struct mxt_object *object = object_table + i;
1310                 u8 min_id, max_id;
1311
1312                 le16_to_cpus(&object->start_address);
1313
1314                 if (object->num_report_ids) {
1315                         min_id = reportid;
1316                         reportid += object->num_report_ids *
1317                                         mxt_obj_instances(object);
1318                         max_id = reportid - 1;
1319                 } else {
1320                         min_id = 0;
1321                         max_id = 0;
1322                 }
1323
1324                 dev_dbg(&data->client->dev,
1325                         "T%u Start:%u Size:%zu Instances:%zu Report IDs:%u-%u\n",
1326                         object->type, object->start_address,
1327                         mxt_obj_size(object), mxt_obj_instances(object),
1328                         min_id, max_id);
1329
1330                 switch (object->type) {
1331                 case MXT_GEN_MESSAGE_T5:
1332                         /* CRC not enabled, therefore don't read last byte */
1333                         data->T5_msg_size = mxt_obj_size(object) - 1;
1334                         data->T5_address = object->start_address;
1335                 case MXT_GEN_COMMAND_T6:
1336                         data->T6_reportid = min_id;
1337                         data->T6_address = object->start_address;
1338                         break;
1339                 case MXT_GEN_POWER_T7:
1340                         data->T7_address = object->start_address;
1341                         break;
1342                 case MXT_TOUCH_MULTI_T9:
1343                         data->T9_reportid_min = min_id;
1344                         data->T9_reportid_max = max_id;
1345                         break;
1346                 case MXT_SPT_GPIOPWM_T19:
1347                         data->T19_reportid = min_id;
1348                         break;
1349                 }
1350
1351                 end_address = object->start_address
1352                         + mxt_obj_size(object) * mxt_obj_instances(object) - 1;
1353
1354                 if (end_address >= data->mem_size)
1355                         data->mem_size = end_address + 1;
1356         }
1357
1358         data->msg_buf = kzalloc(data->T5_msg_size, GFP_KERNEL);
1359         if (!data->msg_buf) {
1360                 dev_err(&client->dev, "Failed to allocate message buffer\n");
1361                 error = -ENOMEM;
1362                 goto free_object_table;
1363         }
1364
1365         data->object_table = object_table;
1366
1367         return 0;
1368
1369 free_object_table:
1370         mxt_free_object_table(data);
1371         return error;
1372 }
1373
1374 static int mxt_read_t9_resolution(struct mxt_data *data)
1375 {
1376         struct i2c_client *client = data->client;
1377         int error;
1378         struct t9_range range;
1379         unsigned char orient;
1380         struct mxt_object *object;
1381
1382         object = mxt_get_object(data, MXT_TOUCH_MULTI_T9);
1383         if (!object)
1384                 return -EINVAL;
1385
1386         error = __mxt_read_reg(client,
1387                                object->start_address + MXT_T9_RANGE,
1388                                sizeof(range), &range);
1389         if (error)
1390                 return error;
1391
1392         le16_to_cpus(&range.x);
1393         le16_to_cpus(&range.y);
1394
1395         error =  __mxt_read_reg(client,
1396                                 object->start_address + MXT_T9_ORIENT,
1397                                 1, &orient);
1398         if (error)
1399                 return error;
1400
1401         /* Handle default values */
1402         if (range.x == 0)
1403                 range.x = 1023;
1404
1405         if (range.y == 0)
1406                 range.y = 1023;
1407
1408         if (orient & MXT_T9_ORIENT_SWITCH) {
1409                 data->max_x = range.y;
1410                 data->max_y = range.x;
1411         } else {
1412                 data->max_x = range.x;
1413                 data->max_y = range.y;
1414         }
1415
1416         dev_dbg(&client->dev,
1417                 "Touchscreen size X%uY%u\n", data->max_x, data->max_y);
1418
1419         return 0;
1420 }
1421
1422 static int mxt_input_open(struct input_dev *dev);
1423 static void mxt_input_close(struct input_dev *dev);
1424
1425 static int mxt_initialize_t9_input_device(struct mxt_data *data)
1426 {
1427         struct device *dev = &data->client->dev;
1428         const struct mxt_platform_data *pdata = data->pdata;
1429         struct input_dev *input_dev;
1430         int error;
1431         unsigned int num_mt_slots;
1432         unsigned int mt_flags = 0;
1433         int i;
1434
1435         error = mxt_read_t9_resolution(data);
1436         if (error)
1437                 dev_warn(dev, "Failed to initialize T9 resolution\n");
1438
1439         input_dev = input_allocate_device();
1440         if (!input_dev) {
1441                 dev_err(dev, "Failed to allocate memory\n");
1442                 return -ENOMEM;
1443         }
1444
1445         input_dev->name = "Atmel maXTouch Touchscreen";
1446         input_dev->phys = data->phys;
1447         input_dev->id.bustype = BUS_I2C;
1448         input_dev->dev.parent = dev;
1449         input_dev->open = mxt_input_open;
1450         input_dev->close = mxt_input_close;
1451
1452         __set_bit(EV_ABS, input_dev->evbit);
1453         __set_bit(EV_KEY, input_dev->evbit);
1454         __set_bit(BTN_TOUCH, input_dev->keybit);
1455
1456         if (pdata->t19_num_keys) {
1457                 __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
1458
1459                 for (i = 0; i < pdata->t19_num_keys; i++)
1460                         if (pdata->t19_keymap[i] != KEY_RESERVED)
1461                                 input_set_capability(input_dev, EV_KEY,
1462                                                      pdata->t19_keymap[i]);
1463
1464                 mt_flags |= INPUT_MT_POINTER;
1465
1466                 input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
1467                 input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
1468                 input_abs_set_res(input_dev, ABS_MT_POSITION_X,
1469                                   MXT_PIXELS_PER_MM);
1470                 input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
1471                                   MXT_PIXELS_PER_MM);
1472
1473                 input_dev->name = "Atmel maXTouch Touchpad";
1474         }
1475
1476         /* For single touch */
1477         input_set_abs_params(input_dev, ABS_X,
1478                              0, data->max_x, 0, 0);
1479         input_set_abs_params(input_dev, ABS_Y,
1480                              0, data->max_y, 0, 0);
1481         input_set_abs_params(input_dev, ABS_PRESSURE,
1482                              0, 255, 0, 0);
1483
1484         /* For multi touch */
1485         num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
1486         error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
1487         if (error) {
1488                 dev_err(dev, "Error %d initialising slots\n", error);
1489                 goto err_free_mem;
1490         }
1491
1492         input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
1493                              0, MXT_MAX_AREA, 0, 0);
1494         input_set_abs_params(input_dev, ABS_MT_POSITION_X,
1495                              0, data->max_x, 0, 0);
1496         input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
1497                              0, data->max_y, 0, 0);
1498         input_set_abs_params(input_dev, ABS_MT_PRESSURE,
1499                              0, 255, 0, 0);
1500
1501         input_set_drvdata(input_dev, data);
1502
1503         error = input_register_device(input_dev);
1504         if (error) {
1505                 dev_err(dev, "Error %d registering input device\n", error);
1506                 goto err_free_mem;
1507         }
1508
1509         data->input_dev = input_dev;
1510
1511         return 0;
1512
1513 err_free_mem:
1514         input_free_device(input_dev);
1515         return error;
1516 }
1517
1518 static int mxt_configure_objects(struct mxt_data *data,
1519                                  const struct firmware *cfg);
1520
1521 static void mxt_config_cb(const struct firmware *cfg, void *ctx)
1522 {
1523         mxt_configure_objects(ctx, cfg);
1524 }
1525
1526 static int mxt_initialize(struct mxt_data *data)
1527 {
1528         struct i2c_client *client = data->client;
1529         int error;
1530         bool alt_bootloader_addr = false;
1531         bool retry = false;
1532
1533 retry_info:
1534         error = mxt_get_info(data);
1535         if (error) {
1536 retry_bootloader:
1537                 error = mxt_probe_bootloader(data, alt_bootloader_addr);
1538                 if (error) {
1539                         if (alt_bootloader_addr) {
1540                                 /* Chip is not in appmode or bootloader mode */
1541                                 return error;
1542                         }
1543
1544                         dev_info(&client->dev, "Trying alternate bootloader address\n");
1545                         alt_bootloader_addr = true;
1546                         goto retry_bootloader;
1547                 } else {
1548                         if (retry) {
1549                                 dev_err(&client->dev, "Could not recover from bootloader mode\n");
1550                                 /*
1551                                  * We can reflash from this state, so do not
1552                                  * abort init
1553                                  */
1554                                 data->in_bootloader = true;
1555                                 return 0;
1556                         }
1557
1558                         /* Attempt to exit bootloader into app mode */
1559                         mxt_send_bootloader_cmd(data, false);
1560                         msleep(MXT_FW_RESET_TIME);
1561                         retry = true;
1562                         goto retry_info;
1563                 }
1564         }
1565
1566         /* Get object table information */
1567         error = mxt_get_object_table(data);
1568         if (error) {
1569                 dev_err(&client->dev, "Error %d reading object table\n", error);
1570                 return error;
1571         }
1572
1573         mxt_acquire_irq(data);
1574         if (error)
1575                 goto err_free_object_table;
1576
1577         request_firmware_nowait(THIS_MODULE, true, MXT_CFG_NAME,
1578                                 &data->client->dev, GFP_KERNEL, data,
1579                                 mxt_config_cb);
1580
1581         return 0;
1582
1583 err_free_object_table:
1584         mxt_free_object_table(data);
1585         return error;
1586 }
1587
1588 static int mxt_configure_objects(struct mxt_data *data,
1589                                  const struct firmware *cfg)
1590 {
1591         struct device *dev = &data->client->dev;
1592         struct mxt_info *info = &data->info;
1593         int error;
1594
1595         if (cfg) {
1596                 error = mxt_update_cfg(data, cfg);
1597                 if (error)
1598                         dev_warn(dev, "Error %d updating config\n", error);
1599         }
1600
1601         error = mxt_initialize_t9_input_device(data);
1602         if (error)
1603                 return error;
1604
1605         dev_info(dev,
1606                  "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
1607                  info->family_id, info->variant_id, info->version >> 4,
1608                  info->version & 0xf, info->build, info->object_num);
1609
1610         return 0;
1611 }
1612
1613 /* Firmware Version is returned as Major.Minor.Build */
1614 static ssize_t mxt_fw_version_show(struct device *dev,
1615                                    struct device_attribute *attr, char *buf)
1616 {
1617         struct mxt_data *data = dev_get_drvdata(dev);
1618         struct mxt_info *info = &data->info;
1619         return scnprintf(buf, PAGE_SIZE, "%u.%u.%02X\n",
1620                          info->version >> 4, info->version & 0xf, info->build);
1621 }
1622
1623 /* Hardware Version is returned as FamilyID.VariantID */
1624 static ssize_t mxt_hw_version_show(struct device *dev,
1625                                    struct device_attribute *attr, char *buf)
1626 {
1627         struct mxt_data *data = dev_get_drvdata(dev);
1628         struct mxt_info *info = &data->info;
1629         return scnprintf(buf, PAGE_SIZE, "%u.%u\n",
1630                          info->family_id, info->variant_id);
1631 }
1632
1633 static ssize_t mxt_show_instance(char *buf, int count,
1634                                  struct mxt_object *object, int instance,
1635                                  const u8 *val)
1636 {
1637         int i;
1638
1639         if (mxt_obj_instances(object) > 1)
1640                 count += scnprintf(buf + count, PAGE_SIZE - count,
1641                                    "Instance %u\n", instance);
1642
1643         for (i = 0; i < mxt_obj_size(object); i++)
1644                 count += scnprintf(buf + count, PAGE_SIZE - count,
1645                                 "\t[%2u]: %02x (%d)\n", i, val[i], val[i]);
1646         count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
1647
1648         return count;
1649 }
1650
1651 static ssize_t mxt_object_show(struct device *dev,
1652                                     struct device_attribute *attr, char *buf)
1653 {
1654         struct mxt_data *data = dev_get_drvdata(dev);
1655         struct mxt_object *object;
1656         int count = 0;
1657         int i, j;
1658         int error;
1659         u8 *obuf;
1660
1661         /* Pre-allocate buffer large enough to hold max sized object. */
1662         obuf = kmalloc(256, GFP_KERNEL);
1663         if (!obuf)
1664                 return -ENOMEM;
1665
1666         error = 0;
1667         for (i = 0; i < data->info.object_num; i++) {
1668                 object = data->object_table + i;
1669
1670                 if (!mxt_object_readable(object->type))
1671                         continue;
1672
1673                 count += scnprintf(buf + count, PAGE_SIZE - count,
1674                                 "T%u:\n", object->type);
1675
1676                 for (j = 0; j < mxt_obj_instances(object); j++) {
1677                         u16 size = mxt_obj_size(object);
1678                         u16 addr = object->start_address + j * size;
1679
1680                         error = __mxt_read_reg(data->client, addr, size, obuf);
1681                         if (error)
1682                                 goto done;
1683
1684                         count = mxt_show_instance(buf, count, object, j, obuf);
1685                 }
1686         }
1687
1688 done:
1689         kfree(obuf);
1690         return error ?: count;
1691 }
1692
1693 static int mxt_check_firmware_format(struct device *dev,
1694                                      const struct firmware *fw)
1695 {
1696         unsigned int pos = 0;
1697         char c;
1698
1699         while (pos < fw->size) {
1700                 c = *(fw->data + pos);
1701
1702                 if (c < '0' || (c > '9' && c < 'A') || c > 'F')
1703                         return 0;
1704
1705                 pos++;
1706         }
1707
1708         /*
1709          * To convert file try:
1710          * xxd -r -p mXTXXX__APP_VX-X-XX.enc > maxtouch.fw
1711          */
1712         dev_err(dev, "Aborting: firmware file must be in binary format\n");
1713
1714         return -EINVAL;
1715 }
1716
1717 static int mxt_load_fw(struct device *dev, const char *fn)
1718 {
1719         struct mxt_data *data = dev_get_drvdata(dev);
1720         const struct firmware *fw = NULL;
1721         unsigned int frame_size;
1722         unsigned int pos = 0;
1723         unsigned int retry = 0;
1724         unsigned int frame = 0;
1725         int ret;
1726
1727         ret = request_firmware(&fw, fn, dev);
1728         if (ret) {
1729                 dev_err(dev, "Unable to open firmware %s\n", fn);
1730                 return ret;
1731         }
1732
1733         /* Check for incorrect enc file */
1734         ret = mxt_check_firmware_format(dev, fw);
1735         if (ret)
1736                 goto release_firmware;
1737
1738         if (!data->in_bootloader) {
1739                 /* Change to the bootloader mode */
1740                 data->in_bootloader = true;
1741
1742                 ret = mxt_t6_command(data, MXT_COMMAND_RESET,
1743                                      MXT_BOOT_VALUE, false);
1744                 if (ret)
1745                         goto release_firmware;
1746
1747                 msleep(MXT_RESET_TIME);
1748
1749                 /* Do not need to scan since we know family ID */
1750                 ret = mxt_lookup_bootloader_address(data, 0);
1751                 if (ret)
1752                         goto release_firmware;
1753         } else {
1754                 enable_irq(data->irq);
1755         }
1756
1757         mxt_free_object_table(data);
1758         reinit_completion(&data->bl_completion);
1759
1760         ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false);
1761         if (ret) {
1762                 /* Bootloader may still be unlocked from previous attempt */
1763                 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, false);
1764                 if (ret)
1765                         goto disable_irq;
1766         } else {
1767                 dev_info(dev, "Unlocking bootloader\n");
1768
1769                 /* Unlock bootloader */
1770                 ret = mxt_send_bootloader_cmd(data, true);
1771                 if (ret)
1772                         goto disable_irq;
1773         }
1774
1775         while (pos < fw->size) {
1776                 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true);
1777                 if (ret)
1778                         goto disable_irq;
1779
1780                 frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1));
1781
1782                 /* Take account of CRC bytes */
1783                 frame_size += 2;
1784
1785                 /* Write one frame to device */
1786                 ret = mxt_bootloader_write(data, fw->data + pos, frame_size);
1787                 if (ret)
1788                         goto disable_irq;
1789
1790                 ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true);
1791                 if (ret) {
1792                         retry++;
1793
1794                         /* Back off by 20ms per retry */
1795                         msleep(retry * 20);
1796
1797                         if (retry > 20) {
1798                                 dev_err(dev, "Retry count exceeded\n");
1799                                 goto disable_irq;
1800                         }
1801                 } else {
1802                         retry = 0;
1803                         pos += frame_size;
1804                         frame++;
1805                 }
1806
1807                 if (frame % 50 == 0)
1808                         dev_dbg(dev, "Sent %d frames, %d/%zd bytes\n",
1809                                 frame, pos, fw->size);
1810         }
1811
1812         /* Wait for flash. */
1813         ret = mxt_wait_for_completion(data, &data->bl_completion,
1814                                       MXT_FW_RESET_TIME);
1815         if (ret)
1816                 goto disable_irq;
1817
1818         dev_dbg(dev, "Sent %d frames, %d bytes\n", frame, pos);
1819
1820         /*
1821          * Wait for device to reset. Some bootloader versions do not assert
1822          * the CHG line after bootloading has finished, so ignore potential
1823          * errors.
1824          */
1825         mxt_wait_for_completion(data, &data->bl_completion, MXT_FW_RESET_TIME);
1826
1827         data->in_bootloader = false;
1828
1829 disable_irq:
1830         disable_irq(data->irq);
1831 release_firmware:
1832         release_firmware(fw);
1833         return ret;
1834 }
1835
1836 static ssize_t mxt_update_fw_store(struct device *dev,
1837                                         struct device_attribute *attr,
1838                                         const char *buf, size_t count)
1839 {
1840         struct mxt_data *data = dev_get_drvdata(dev);
1841         int error;
1842
1843         error = mxt_load_fw(dev, MXT_FW_NAME);
1844         if (error) {
1845                 dev_err(dev, "The firmware update failed(%d)\n", error);
1846                 count = error;
1847         } else {
1848                 dev_info(dev, "The firmware update succeeded\n");
1849
1850                 error = mxt_initialize(data);
1851                 if (error)
1852                         return error;
1853         }
1854
1855         return count;
1856 }
1857
1858 static DEVICE_ATTR(fw_version, S_IRUGO, mxt_fw_version_show, NULL);
1859 static DEVICE_ATTR(hw_version, S_IRUGO, mxt_hw_version_show, NULL);
1860 static DEVICE_ATTR(object, S_IRUGO, mxt_object_show, NULL);
1861 static DEVICE_ATTR(update_fw, S_IWUSR, NULL, mxt_update_fw_store);
1862
1863 static struct attribute *mxt_attrs[] = {
1864         &dev_attr_fw_version.attr,
1865         &dev_attr_hw_version.attr,
1866         &dev_attr_object.attr,
1867         &dev_attr_update_fw.attr,
1868         NULL
1869 };
1870
1871 static const struct attribute_group mxt_attr_group = {
1872         .attrs = mxt_attrs,
1873 };
1874
1875 static void mxt_start(struct mxt_data *data)
1876 {
1877         /* Touch enable */
1878         mxt_write_object(data,
1879                         MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0x83);
1880 }
1881
1882 static void mxt_stop(struct mxt_data *data)
1883 {
1884         /* Touch disable */
1885         mxt_write_object(data,
1886                         MXT_TOUCH_MULTI_T9, MXT_TOUCH_CTRL, 0);
1887 }
1888
1889 static int mxt_input_open(struct input_dev *dev)
1890 {
1891         struct mxt_data *data = input_get_drvdata(dev);
1892
1893         mxt_start(data);
1894
1895         return 0;
1896 }
1897
1898 static void mxt_input_close(struct input_dev *dev)
1899 {
1900         struct mxt_data *data = input_get_drvdata(dev);
1901
1902         mxt_stop(data);
1903 }
1904
1905 #ifdef CONFIG_OF
1906 static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
1907 {
1908         struct mxt_platform_data *pdata;
1909         u32 *keymap;
1910         u32 keycode;
1911         int proplen, i, ret;
1912
1913         if (!client->dev.of_node)
1914                 return ERR_PTR(-ENODEV);
1915
1916         pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
1917         if (!pdata)
1918                 return ERR_PTR(-ENOMEM);
1919
1920         if (of_find_property(client->dev.of_node, "linux,gpio-keymap",
1921                              &proplen)) {
1922                 pdata->t19_num_keys = proplen / sizeof(u32);
1923
1924                 keymap = devm_kzalloc(&client->dev,
1925                                 pdata->t19_num_keys * sizeof(keymap[0]),
1926                                 GFP_KERNEL);
1927                 if (!keymap)
1928                         return ERR_PTR(-ENOMEM);
1929
1930                 for (i = 0; i < pdata->t19_num_keys; i++) {
1931                         ret = of_property_read_u32_index(client->dev.of_node,
1932                                         "linux,gpio-keymap", i, &keycode);
1933                         if (ret)
1934                                 keycode = KEY_RESERVED;
1935
1936                         keymap[i] = keycode;
1937                 }
1938
1939                 pdata->t19_keymap = keymap;
1940         }
1941
1942         return pdata;
1943 }
1944 #else
1945 static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
1946 {
1947         dev_dbg(&client->dev, "No platform data specified\n");
1948         return ERR_PTR(-EINVAL);
1949 }
1950 #endif
1951
1952 static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
1953 {
1954         struct mxt_data *data;
1955         const struct mxt_platform_data *pdata;
1956         int error;
1957
1958         pdata = dev_get_platdata(&client->dev);
1959         if (!pdata) {
1960                 pdata = mxt_parse_dt(client);
1961                 if (IS_ERR(pdata))
1962                         return PTR_ERR(pdata);
1963         }
1964
1965         data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
1966         if (!data) {
1967                 dev_err(&client->dev, "Failed to allocate memory\n");
1968                 return -ENOMEM;
1969         }
1970
1971         snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0",
1972                  client->adapter->nr, client->addr);
1973
1974         data->client = client;
1975         data->pdata = pdata;
1976         data->irq = client->irq;
1977         i2c_set_clientdata(client, data);
1978
1979         init_completion(&data->bl_completion);
1980         init_completion(&data->reset_completion);
1981         init_completion(&data->crc_completion);
1982
1983         error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
1984                                      pdata->irqflags | IRQF_ONESHOT,
1985                                      client->name, data);
1986         if (error) {
1987                 dev_err(&client->dev, "Failed to register interrupt\n");
1988                 goto err_free_mem;
1989         }
1990
1991         disable_irq(client->irq);
1992
1993         error = mxt_initialize(data);
1994         if (error)
1995                 goto err_free_irq;
1996
1997         error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group);
1998         if (error) {
1999                 dev_err(&client->dev, "Failure %d creating sysfs group\n",
2000                         error);
2001                 goto err_free_object;
2002         }
2003
2004         return 0;
2005
2006 err_free_object:
2007         mxt_free_object_table(data);
2008 err_free_irq:
2009         free_irq(client->irq, data);
2010 err_free_mem:
2011         kfree(data);
2012         return error;
2013 }
2014
2015 static int mxt_remove(struct i2c_client *client)
2016 {
2017         struct mxt_data *data = i2c_get_clientdata(client);
2018
2019         sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
2020         free_irq(data->irq, data);
2021         input_unregister_device(data->input_dev);
2022         mxt_free_object_table(data);
2023         kfree(data);
2024
2025         return 0;
2026 }
2027
2028 #ifdef CONFIG_PM_SLEEP
2029 static int mxt_suspend(struct device *dev)
2030 {
2031         struct i2c_client *client = to_i2c_client(dev);
2032         struct mxt_data *data = i2c_get_clientdata(client);
2033         struct input_dev *input_dev = data->input_dev;
2034
2035         mutex_lock(&input_dev->mutex);
2036
2037         if (input_dev->users)
2038                 mxt_stop(data);
2039
2040         mutex_unlock(&input_dev->mutex);
2041
2042         return 0;
2043 }
2044
2045 static int mxt_resume(struct device *dev)
2046 {
2047         struct i2c_client *client = to_i2c_client(dev);
2048         struct mxt_data *data = i2c_get_clientdata(client);
2049         struct input_dev *input_dev = data->input_dev;
2050
2051         mxt_soft_reset(data);
2052
2053         mutex_lock(&input_dev->mutex);
2054
2055         if (input_dev->users)
2056                 mxt_start(data);
2057
2058         mutex_unlock(&input_dev->mutex);
2059
2060         return 0;
2061 }
2062 #endif
2063
2064 static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume);
2065
2066 static const struct of_device_id mxt_of_match[] = {
2067         { .compatible = "atmel,maxtouch", },
2068         {},
2069 };
2070 MODULE_DEVICE_TABLE(of, mxt_of_match);
2071
2072 static const struct i2c_device_id mxt_id[] = {
2073         { "qt602240_ts", 0 },
2074         { "atmel_mxt_ts", 0 },
2075         { "atmel_mxt_tp", 0 },
2076         { "mXT224", 0 },
2077         { }
2078 };
2079 MODULE_DEVICE_TABLE(i2c, mxt_id);
2080
2081 static struct i2c_driver mxt_driver = {
2082         .driver = {
2083                 .name   = "atmel_mxt_ts",
2084                 .owner  = THIS_MODULE,
2085                 .of_match_table = of_match_ptr(mxt_of_match),
2086                 .pm     = &mxt_pm_ops,
2087         },
2088         .probe          = mxt_probe,
2089         .remove         = mxt_remove,
2090         .id_table       = mxt_id,
2091 };
2092
2093 module_i2c_driver(mxt_driver);
2094
2095 /* Module information */
2096 MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
2097 MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver");
2098 MODULE_LICENSE("GPL");