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