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