upload tizen1.0 source
[kernel/linux-2.6.36.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/mt.h>
21 #include <linux/interrupt.h>
22 #include <linux/slab.h>
23 #include <linux/pm_runtime.h>
24 #include <linux/async.h>
25 #include <linux/gpio.h>
26 #include <linux/regulator/consumer.h>
27 #include <linux/fb.h>
28
29 /* Version */
30 #define MXT_VER_20              20
31 #define MXT_VER_21              21
32 #define MXT_VER_22              22
33
34 /* Slave addresses */
35 #define MXT_APP_LOW             0x4a
36 #define MXT_APP_HIGH            0x4b
37 #define MXT_BOOT_LOW            0x24
38 #define MXT_BOOT_HIGH           0x25
39
40 /* Firmware */
41 #define MXT_FW_NAME             "maxtouch.fw"
42
43 /* Registers */
44 #define MXT_FAMILY_ID           0x00
45 #define MXT_VARIANT_ID          0x01
46 #define MXT_VERSION             0x02
47 #define MXT_BUILD               0x03
48 #define MXT_MATRIX_X_SIZE       0x04
49 #define MXT_MATRIX_Y_SIZE       0x05
50 #define MXT_OBJECT_NUM          0x06
51 #define MXT_OBJECT_START        0x07
52
53 #define MXT_OBJECT_SIZE         6
54
55 /* Object types */
56 #define MXT_DEBUG_DIAGNOSTIC    37
57 #define MXT_GEN_MESSAGE         5
58 #define MXT_GEN_COMMAND         6
59 #define MXT_GEN_POWER           7
60 #define MXT_GEN_ACQUIRE         8
61 #define MXT_TOUCH_MULTI         9
62 #define MXT_TOUCH_KEYARRAY      15
63 #define MXT_TOUCH_PROXIMITY     23
64 #define MXT_PROCI_GRIPFACE      20
65 #define MXT_PROCG_NOISE         22
66 #define MXT_PROCI_ONETOUCH      24
67 #define MXT_PROCI_TWOTOUCH      27
68 #define MXT_PROCI_GRIP          40
69 #define MXT_PROCI_PALM          41
70 #define MXT_SPT_COMMSCONFIG     18
71 #define MXT_SPT_GPIOPWM         19
72 #define MXT_SPT_SELFTEST        25
73 #define MXT_SPT_CTECONFIG       28
74 #define MXT_SPT_USERDATA        38
75 #define MXT_SPT_DIGITIZER       43
76 #define MXT_SPT_MESSAGECOUNT    44
77
78 /* MXT_GEN_COMMAND field */
79 #define MXT_COMMAND_RESET       0
80 #define MXT_COMMAND_BACKUPNV    1
81 #define MXT_COMMAND_CALIBRATE   2
82 #define MXT_COMMAND_REPORTALL   3
83 #define MXT_COMMAND_DIAGNOSTIC  5
84
85 /* MXT_GEN_POWER field */
86 #define MXT_POWER_IDLEACQINT    0
87 #define MXT_POWER_ACTVACQINT    1
88 #define MXT_POWER_ACTV2IDLETO   2
89
90 /* MXT_GEN_ACQUIRE field */
91 #define MXT_ACQUIRE_CHRGTIME    0
92 #define MXT_ACQUIRE_TCHDRIFT    2
93 #define MXT_ACQUIRE_DRIFTST     3
94 #define MXT_ACQUIRE_TCHAUTOCAL  4
95 #define MXT_ACQUIRE_SYNC        5
96 #define MXT_ACQUIRE_ATCHCALST   6
97 #define MXT_ACQUIRE_ATCHCALSTHR 7
98
99 /* MXT_TOUCH_MULTI field */
100 #define MXT_TOUCH_CTRL          0
101 #define MXT_TOUCH_XORIGIN       1
102 #define MXT_TOUCH_YORIGIN       2
103 #define MXT_TOUCH_XSIZE         3
104 #define MXT_TOUCH_YSIZE         4
105 #define MXT_TOUCH_BLEN          6
106 #define MXT_TOUCH_TCHTHR        7
107 #define MXT_TOUCH_TCHDI         8
108 #define MXT_TOUCH_ORIENT        9
109 #define MXT_TOUCH_MOVHYSTI      11
110 #define MXT_TOUCH_MOVHYSTN      12
111 #define MXT_TOUCH_NUMTOUCH      14
112 #define MXT_TOUCH_MRGHYST       15
113 #define MXT_TOUCH_MRGTHR        16
114 #define MXT_TOUCH_AMPHYST       17
115 #define MXT_TOUCH_XRANGE_LSB    18
116 #define MXT_TOUCH_XRANGE_MSB    19
117 #define MXT_TOUCH_YRANGE_LSB    20
118 #define MXT_TOUCH_YRANGE_MSB    21
119 #define MXT_TOUCH_XLOCLIP       22
120 #define MXT_TOUCH_XHICLIP       23
121 #define MXT_TOUCH_YLOCLIP       24
122 #define MXT_TOUCH_YHICLIP       25
123 #define MXT_TOUCH_XEDGECTRL     26
124 #define MXT_TOUCH_XEDGEDIST     27
125 #define MXT_TOUCH_YEDGECTRL     28
126 #define MXT_TOUCH_YEDGEDIST     29
127 #define MXT_TOUCH_JUMPLIMIT     30
128
129 /* MXT_TOUCH_KEYARRAY field */
130 #define MXT_KEY_CTRL            0
131 #define MXT_KEY_XORIGIN         1
132 #define MXT_KEY_YORIGIN         2
133 #define MXT_KEY_XSIZE           3
134 #define MXT_KEY_YSIZE           4
135 #define MXT_KEY_AKSCFG          5
136 #define MXT_KEY_BLEN            6
137 #define MXT_KEY_TCHTHR          7
138 #define MXT_KEY_TCHDI           8
139
140 /* MXT_PROCI_GRIPFACE field */
141 #define MXT_GRIPFACE_CTRL       0
142 #define MXT_GRIPFACE_XLOGRIP    1
143 #define MXT_GRIPFACE_XHIGRIP    2
144 #define MXT_GRIPFACE_YLOGRIP    3
145 #define MXT_GRIPFACE_YHIGRIP    4
146 #define MXT_GRIPFACE_MAXTCHS    5
147 #define MXT_GRIPFACE_SZTHR1     7
148 #define MXT_GRIPFACE_SZTHR2     8
149 #define MXT_GRIPFACE_SHPTHR1    9
150 #define MXT_GRIPFACE_SHPTHR2    10
151 #define MXT_GRIPFACE_SUPEXTTO   11
152
153 /* MXT_PROCI_NOISE field */
154 #define MXT_NOISE_CTRL          0
155 #define MXT_NOISE_OUTFLEN       1
156 #define MXT_NOISE_GCAFUL_LSB    3
157 #define MXT_NOISE_GCAFUL_MSB    4
158 #define MXT_NOISE_GCAFLL_LSB    5
159 #define MXT_NOISE_GCAFLL_MSB    6
160 #define MXT_NOISE_ACTVGCAFVALID 7
161 #define MXT_NOISE_NOISETHR      8
162 #define MXT_NOISE_FREQHOPSCALE  10
163 #define MXT_NOISE_FREQ0         11
164 #define MXT_NOISE_FREQ1         12
165 #define MXT_NOISE_FREQ2         13
166 #define MXT_NOISE_FREQ3         14
167 #define MXT_NOISE_FREQ4         15
168 #define MXT_NOISE_IDLEGCAFVALID 16
169
170 /* MXT_SPT_COMMSCONFIG */
171 #define MXT_COMMS_CTRL          0
172 #define MXT_COMMS_CMD           1
173
174 /* MXT_SPT_CTECONFIG field */
175 #define MXT_CTE_CTRL            0
176 #define MXT_CTE_CMD             1
177 #define MXT_CTE_MODE            2
178 #define MXT_CTE_IDLEGCAFDEPTH   3
179 #define MXT_CTE_ACTVGCAFDEPTH   4
180 #define MXT_CTE_VOLTAGE         5
181
182 #define MXT_VOLTAGE_DEFAULT     2700000
183 #define MXT_VOLTAGE_STEP        10000
184
185 /* Define for MXT_GEN_COMMAND */
186 #define MXT_BOOT_VALUE          0xa5
187 #define MXT_BACKUP_VALUE        0x55
188 #define MXT_BACKUP_TIME         25      /* msec */
189 #define MXT_RESET_TIME          65      /* msec */
190
191 #define MXT_FWRESET_TIME        175     /* msec */
192
193 /* Command to unlock bootloader */
194 #define MXT_UNLOCK_CMD_MSB      0xaa
195 #define MXT_UNLOCK_CMD_LSB      0xdc
196
197 /* Bootloader mode status */
198 #define MXT_WAITING_BOOTLOAD_CMD        0xc0    /* valid 7 6 bit only */
199 #define MXT_WAITING_FRAME_DATA  0x80    /* valid 7 6 bit only */
200 #define MXT_FRAME_CRC_CHECK     0x02
201 #define MXT_FRAME_CRC_FAIL      0x03
202 #define MXT_FRAME_CRC_PASS      0x04
203 #define MXT_APP_CRC_FAIL        0x40    /* valid 7 8 bit only */
204 #define MXT_BOOT_STATUS_MASK    0x3f
205
206 /* Touch status */
207 #define MXT_SUPPRESS            (1 << 1)
208 #define MXT_AMP                 (1 << 2)
209 #define MXT_VECTOR              (1 << 3)
210 #define MXT_MOVE                (1 << 4)
211 #define MXT_RELEASE             (1 << 5)
212 #define MXT_PRESS               (1 << 6)
213 #define MXT_DETECT              (1 << 7)
214
215 /* Touch orient bits */
216 #define MXT_XY_SWITCH           (1 << 0)
217 #define MXT_X_INVERT            (1 << 1)
218 #define MXT_Y_INVERT            (1 << 2)
219
220 /* Touchscreen absolute values */
221 #define MXT_MAX_AREA            0xff
222
223 #define MXT_MAX_FINGER          10
224
225 #define MXT_MAX_KEYSTATE        4
226 #define MXT_MAX_KEYSTATE_KEY    8
227
228 struct mxt_info {
229         u8 family_id;
230         u8 variant_id;
231         u8 version;
232         u8 build;
233         u8 matrix_xsize;
234         u8 matrix_ysize;
235         u8 object_num;
236 };
237
238 struct mxt_object {
239         u8 type;
240         u16 start_address;
241         u8 size;
242         u8 instances;
243         u8 num_report_ids;
244
245         /* to map object and message */
246         u8 max_reportid;
247 };
248
249 struct mxt_message {
250         u8 reportid;
251         u8 message[7];
252         u8 checksum;
253 };
254
255 struct mxt_finger {
256         int status;
257         int x;
258         int y;
259         int area;
260 };
261
262 struct mxt_key {
263         struct input_dev *input_dev;
264         unsigned int led_gpio;
265         unsigned int keystate_size;
266         u8 keystate[MXT_MAX_KEYSTATE];
267         unsigned short keycodes[];
268 };
269
270 /* Each client has this additional data */
271 struct mxt_data {
272         struct i2c_client *client;
273         struct input_dev *input_dev;
274         const struct mxt_platform_data *pdata;
275         struct mxt_object *object_table;
276         struct mxt_info info;
277         struct mxt_finger finger[MXT_MAX_FINGER];
278         unsigned int irq;
279         unsigned int max_x;
280         unsigned int max_y;
281
282         struct mxt_key *key;
283
284         struct regulator *rgt_avdd;
285         struct regulator *rgt_vdd;
286         struct regulator *rgt_vcc;
287         bool touch_enable;
288         bool vdd_disable;
289
290         /* The framebuffer notifier block */
291         struct notifier_block fb_notif;
292 };
293
294 static bool mxt_object_readable(unsigned int type)
295 {
296         switch (type) {
297         case MXT_GEN_MESSAGE:
298         case MXT_GEN_COMMAND:
299         case MXT_GEN_POWER:
300         case MXT_GEN_ACQUIRE:
301         case MXT_TOUCH_MULTI:
302         case MXT_TOUCH_KEYARRAY:
303         case MXT_TOUCH_PROXIMITY:
304         case MXT_PROCI_GRIPFACE:
305         case MXT_PROCG_NOISE:
306         case MXT_PROCI_ONETOUCH:
307         case MXT_PROCI_TWOTOUCH:
308         case MXT_PROCI_GRIP:
309         case MXT_PROCI_PALM:
310         case MXT_SPT_COMMSCONFIG:
311         case MXT_SPT_GPIOPWM:
312         case MXT_SPT_SELFTEST:
313         case MXT_SPT_CTECONFIG:
314         case MXT_SPT_USERDATA:
315                 return true;
316         default:
317                 return false;
318         }
319 }
320
321 static bool mxt_object_writable(unsigned int type)
322 {
323         switch (type) {
324         case MXT_GEN_COMMAND:
325         case MXT_GEN_POWER:
326         case MXT_GEN_ACQUIRE:
327         case MXT_TOUCH_MULTI:
328         case MXT_TOUCH_KEYARRAY:
329         case MXT_TOUCH_PROXIMITY:
330         case MXT_PROCI_GRIPFACE:
331         case MXT_PROCG_NOISE:
332         case MXT_PROCI_ONETOUCH:
333         case MXT_PROCI_TWOTOUCH:
334         case MXT_PROCI_GRIP:
335         case MXT_PROCI_PALM:
336         case MXT_SPT_GPIOPWM:
337         case MXT_SPT_SELFTEST:
338         case MXT_SPT_CTECONFIG:
339                 return true;
340         default:
341                 return false;
342         }
343 }
344
345 static void mxt_dump_message(struct device *dev,
346                                   struct mxt_message *message)
347 {
348         dev_dbg(dev, "reportid:\t0x%x\n", message->reportid);
349         dev_dbg(dev, "message1:\t0x%x\n", message->message[0]);
350         dev_dbg(dev, "message2:\t0x%x\n", message->message[1]);
351         dev_dbg(dev, "message3:\t0x%x\n", message->message[2]);
352         dev_dbg(dev, "message4:\t0x%x\n", message->message[3]);
353         dev_dbg(dev, "message5:\t0x%x\n", message->message[4]);
354         dev_dbg(dev, "message6:\t0x%x\n", message->message[5]);
355         dev_dbg(dev, "message7:\t0x%x\n", message->message[6]);
356         dev_dbg(dev, "checksum:\t0x%x\n", message->checksum);
357 }
358
359 static int mxt_check_bootloader(struct i2c_client *client,
360                                      unsigned int state)
361 {
362         u8 val;
363
364 recheck:
365         if (i2c_master_recv(client, &val, 1) != 1) {
366                 dev_err(&client->dev, "%s: i2c recv failed\n", __func__);
367                 return -EIO;
368         }
369
370         switch (state) {
371         case MXT_WAITING_BOOTLOAD_CMD:
372         case MXT_WAITING_FRAME_DATA:
373                 val &= ~MXT_BOOT_STATUS_MASK;
374                 break;
375         case MXT_FRAME_CRC_PASS:
376                 if (val == MXT_FRAME_CRC_CHECK)
377                         goto recheck;
378                 break;
379         default:
380                 return -EINVAL;
381         }
382
383         if (val != state) {
384                 dev_err(&client->dev, "Unvalid bootloader mode state\n");
385                 return -EINVAL;
386         }
387
388         return 0;
389 }
390
391 static int mxt_unlock_bootloader(struct i2c_client *client)
392 {
393         u8 buf[2];
394
395         buf[0] = MXT_UNLOCK_CMD_LSB;
396         buf[1] = MXT_UNLOCK_CMD_MSB;
397
398         if (i2c_master_send(client, buf, 2) != 2) {
399                 dev_err(&client->dev, "%s: i2c send failed\n", __func__);
400                 return -EIO;
401         }
402
403         return 0;
404 }
405
406 static int mxt_fw_write(struct i2c_client *client,
407                              const u8 *data, unsigned int frame_size)
408 {
409         if (i2c_master_send(client, data, frame_size) != frame_size) {
410                 dev_err(&client->dev, "%s: i2c send failed\n", __func__);
411                 return -EIO;
412         }
413
414         return 0;
415 }
416
417 static int __mxt_read_reg(struct i2c_client *client,
418                                u16 reg, u16 len, void *val)
419 {
420         struct i2c_msg xfer[2];
421         u8 buf[2];
422         int spin = 20;
423
424         buf[0] = reg & 0xff;
425         buf[1] = (reg >> 8) & 0xff;
426
427         /* Write register */
428         xfer[0].addr = client->addr;
429         xfer[0].flags = 0;
430         xfer[0].len = 2;
431         xfer[0].buf = buf;
432
433         /* Read data */
434         xfer[1].addr = client->addr;
435         xfer[1].flags = I2C_M_RD;
436         xfer[1].len = len;
437         xfer[1].buf = val;
438
439 retry:
440         if (i2c_transfer(client->adapter, xfer, 2) != 2) {
441                 /* FIXME: Workaround, i2c problem? */
442                 if (spin) {
443                         spin--;
444                         msleep(1);
445                         goto retry;
446                 }
447                 dev_err(&client->dev, "%s: i2c transfer failed\n", __func__);
448                 return -EIO;
449         }
450
451         return 0;
452 }
453
454 static int mxt_read_reg(struct i2c_client *client, u16 reg, u8 *val)
455 {
456         return __mxt_read_reg(client, reg, 1, val);
457 }
458
459 static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val)
460 {
461         u8 buf[3];
462         int spin = 20;
463
464         buf[0] = reg & 0xff;
465         buf[1] = (reg >> 8) & 0xff;
466         buf[2] = val;
467
468 retry:
469         if (i2c_master_send(client, buf, 3) != 3) {
470                 /* FIXME: Workaround, i2c problem? */
471                 if (spin) {
472                         spin--;
473                         msleep(1);
474                         goto retry;
475                 }
476                 dev_err(&client->dev, "%s: i2c send failed\n", __func__);
477                 return -EIO;
478         }
479
480         return 0;
481 }
482
483 static int mxt_read_object_table(struct i2c_client *client,
484                                       u16 reg, u8 *object_buf)
485 {
486         return __mxt_read_reg(client, reg, MXT_OBJECT_SIZE,
487                                    object_buf);
488 }
489
490 static struct mxt_object *
491 mxt_get_object(struct mxt_data *data, u8 type)
492 {
493         struct mxt_object *object;
494         int i;
495
496         for (i = 0; i < data->info.object_num; i++) {
497                 object = data->object_table + i;
498                 if (object->type == type)
499                         return object;
500         }
501
502         dev_err(&data->client->dev, "Invalid object type\n");
503         return NULL;
504 }
505
506 static int mxt_read_message(struct mxt_data *data,
507                                  struct mxt_message *message)
508 {
509         struct mxt_object *object;
510         u16 reg;
511
512         object = mxt_get_object(data, MXT_GEN_MESSAGE);
513         if (!object)
514                 return -EINVAL;
515
516         reg = object->start_address;
517         return __mxt_read_reg(data->client, reg,
518                         sizeof(struct mxt_message), message);
519 }
520
521 static int mxt_read_object(struct mxt_data *data,
522                                 u8 type, u8 offset, u8 *val)
523 {
524         struct mxt_object *object;
525         u16 reg;
526
527         object = mxt_get_object(data, type);
528         if (!object)
529                 return -EINVAL;
530
531         reg = object->start_address;
532         return __mxt_read_reg(data->client, reg + offset, 1, val);
533 }
534
535 static int mxt_write_object(struct mxt_data *data,
536                                  u8 type, u8 offset, u8 val)
537 {
538         struct mxt_object *object;
539         u16 reg;
540
541         object = mxt_get_object(data, type);
542         if (!object)
543                 return -EINVAL;
544
545         reg = object->start_address;
546         return mxt_write_reg(data->client, reg + offset, val);
547 }
548
549 static void mxt_input_report(struct mxt_data *data, int single_id)
550 {
551         struct mxt_finger *finger = data->finger;
552         struct input_dev *input_dev = data->input_dev;
553         int status = finger[single_id].status;
554         int finger_num = 0;
555         int id;
556
557         for (id = 0; id < MXT_MAX_FINGER; id++) {
558                 if (!finger[id].status)
559                         continue;
560
561                 input_mt_slot(input_dev, id);
562                 input_mt_report_slot_state(input_dev, MT_TOOL_FINGER,
563                                 finger[id].status != MXT_RELEASE);
564
565                 if (finger[id].status != MXT_RELEASE) {
566                         finger_num++;
567                         input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR,
568                                         finger[id].area);
569                         input_report_abs(input_dev, ABS_MT_POSITION_X,
570                                         finger[id].x);
571                         input_report_abs(input_dev, ABS_MT_POSITION_Y,
572                                         finger[id].y);
573                 } else
574                         finger[id].status = 0;
575         }
576
577         input_report_key(input_dev, BTN_TOUCH, finger_num > 0);
578
579         if (data->key && gpio_is_valid(data->key->led_gpio)) {
580                 if (finger_num > 0)
581                         gpio_set_value_cansleep(data->key->led_gpio, 1);
582                 else
583                         gpio_set_value_cansleep(data->key->led_gpio, 0);
584         }
585
586         if (status != MXT_RELEASE) {
587                 input_report_abs(input_dev, ABS_X, finger[single_id].x);
588                 input_report_abs(input_dev, ABS_Y, finger[single_id].y);
589         }
590
591         input_sync(input_dev);
592 }
593
594 static void mxt_input_touchevent(struct mxt_data *data,
595                                       struct mxt_message *message, int id)
596 {
597         struct mxt_finger *finger = data->finger;
598         struct device *dev = &data->client->dev;
599         u8 status = message->message[0];
600         int x;
601         int y;
602         int area;
603
604         /* Check the touch is present on the screen */
605         if (!(status & MXT_DETECT)) {
606                 if (status & MXT_RELEASE) {
607                         dev_dbg(dev, "[%d] released\n", id);
608
609                         finger[id].status = MXT_RELEASE;
610                         mxt_input_report(data, id);
611                 }
612                 return;
613         }
614
615         /* Check only AMP detection */
616         if (!(status & (MXT_PRESS | MXT_MOVE)))
617                 return;
618
619         x = (message->message[1] << 4) | ((message->message[3] >> 4) & 0xf);
620         y = (message->message[2] << 4) | ((message->message[3] & 0xf));
621         if (data->max_x < 1024)
622                 x = x >> 2;
623         if (data->max_y < 1024)
624                 y = y >> 2;
625
626         area = message->message[4];
627
628         dev_dbg(dev, "[%d] %s x: %d, y: %d, area: %d\n", id,
629                 status & MXT_MOVE ? "moved" : "pressed",
630                 x, y, area);
631
632         finger[id].status = status & MXT_MOVE ?
633                                 MXT_MOVE : MXT_PRESS;
634         finger[id].x = x;
635         finger[id].y = y;
636         finger[id].area = area;
637
638         mxt_input_report(data, id);
639 }
640
641 static void mxt_key_input_touchevent(struct mxt_data *data,
642                                       struct mxt_message *message)
643 {
644         struct mxt_key *key = data->key;
645         struct input_dev *input_dev = key->input_dev;
646         u8 keystate[MXT_MAX_KEYSTATE];
647         unsigned int keystate_size = key->keystate_size;
648         unsigned int changed;
649         unsigned int pressed;
650         unsigned int key_val;
651         unsigned int key_code;
652         int i, j;
653
654         if (gpio_is_valid(data->key->led_gpio)) {
655                 if (message->message[0])
656                         gpio_set_value_cansleep(key->led_gpio, 1);
657                 else
658                         gpio_set_value_cansleep(key->led_gpio, 0);
659         }
660
661         for (i = 0; i < keystate_size; i++) {
662                 keystate[i] = message->message[i + 1];
663                 changed = keystate[i] ^ key->keystate[i];
664                 if (!changed)
665                         continue;
666
667                 for (j = 0; j < MXT_MAX_KEYSTATE_KEY; j++) {
668                         if (!(changed & (1 << j)))
669                                 continue;
670
671                         pressed = keystate[i] & (1 << j);
672                         key_val = i * MXT_MAX_KEYSTATE_KEY + j;
673                         key_code = key->keycodes[key_val];
674
675                         input_event(input_dev, EV_MSC, MSC_SCAN, key_val);
676                         input_report_key(input_dev, key_code, pressed);
677                         dev_dbg(&input_dev->dev, "key %d %d %s\n",
678                                         key_val, key_code,
679                                         pressed ? "pressed" : "released");
680                 }
681         }
682
683         if (changed) {
684                 input_sync(input_dev);
685                 memcpy(key->keystate, keystate, sizeof(key->keystate));
686         }
687 }
688
689 static irqreturn_t mxt_interrupt(int irq, void *dev_id)
690 {
691         struct mxt_data *data = dev_id;
692         struct mxt_message message;
693         struct mxt_object *object;
694         struct device *dev = &data->client->dev;
695         int id;
696         u8 reportid;
697         u8 max_reportid;
698         u8 min_reportid;
699
700         if (data->pdata->input_event)
701                 data->pdata->input_event(data);
702
703         do {
704                 if (mxt_read_message(data, &message)) {
705                         dev_err(dev, "Failed to read message\n");
706                         goto end;
707                 }
708
709                 reportid = message.reportid;
710
711                 /* whether reportid is thing of MXT_TOUCH_MULTI */
712                 object = mxt_get_object(data, MXT_TOUCH_MULTI);
713                 if (!object)
714                         goto end;
715
716                 max_reportid = object->max_reportid;
717                 min_reportid = max_reportid -
718                         object->num_report_ids * (object->instances + 1) + 1;
719                 id = reportid - min_reportid;
720
721                 if (reportid >= min_reportid && reportid <= max_reportid)
722                         mxt_input_touchevent(data, &message, id);
723                 else if (reportid == max_reportid + 1)
724                         mxt_key_input_touchevent(data, &message);
725                 else
726                         mxt_dump_message(dev, &message);
727         } while (reportid != 0xff);
728
729 end:
730         return IRQ_HANDLED;
731 }
732
733 static int mxt_check_reg_init(struct mxt_data *data)
734 {
735         const struct mxt_platform_data *pdata = data->pdata;
736         struct mxt_object *object;
737         struct device *dev = &data->client->dev;
738         int index = 0;
739         int i, j, config_offset;
740
741         if (!pdata->config) {
742                 dev_dbg(dev, "No cfg data defined, skipping reg init\n");
743                 return 0;
744         }
745
746         for (i = 0; i < data->info.object_num; i++) {
747                 object = data->object_table + i;
748
749                 if (!mxt_object_writable(object->type))
750                         continue;
751
752                 for (j = 0; j < object->size + 1; j++) {
753                         config_offset = index + j;
754                         if (config_offset > pdata->config_length) {
755                                 dev_err(dev, "Not enough config data!\n");
756                                 return -EINVAL;
757                         }
758                         mxt_write_object(data, object->type, j,
759                                          pdata->config[config_offset]);
760                 }
761                 index += object->size + 1;
762         }
763
764         return 0;
765 }
766
767 static int mxt_make_highchg(struct mxt_data *data)
768 {
769         struct device *dev = &data->client->dev;
770         struct mxt_message message;
771         int count = 10;
772         int error;
773
774         /* Read dummy message to make high CHG pin */
775         do {
776                 error = mxt_read_message(data, &message);
777                 if (error)
778                         return error;
779         } while (message.reportid != 0xff && --count);
780
781         if (!count) {
782                 dev_err(dev, "CHG pin isn't cleared\n");
783                 return -EBUSY;
784         }
785
786         return 0;
787 }
788
789 static void mxt_handle_pdata(struct mxt_data *data)
790 {
791         const struct mxt_platform_data *pdata = data->pdata;
792         u8 voltage;
793
794         /* Set touchscreen lines */
795         mxt_write_object(data, MXT_TOUCH_MULTI, MXT_TOUCH_XSIZE,
796                         pdata->x_line);
797         mxt_write_object(data, MXT_TOUCH_MULTI, MXT_TOUCH_YSIZE,
798                         pdata->y_line);
799
800         /* Set touchscreen orient */
801         mxt_write_object(data, MXT_TOUCH_MULTI, MXT_TOUCH_ORIENT,
802                         pdata->orient);
803
804         /* Set touchscreen burst length */
805         mxt_write_object(data, MXT_TOUCH_MULTI,
806                         MXT_TOUCH_BLEN, pdata->blen);
807
808         /* Set touchscreen threshold */
809         mxt_write_object(data, MXT_TOUCH_MULTI,
810                         MXT_TOUCH_TCHTHR, pdata->threshold);
811
812         /* Set touchscreen resolution */
813         mxt_write_object(data, MXT_TOUCH_MULTI,
814                         MXT_TOUCH_XRANGE_LSB, (pdata->x_size - 1) & 0xff);
815         mxt_write_object(data, MXT_TOUCH_MULTI,
816                         MXT_TOUCH_XRANGE_MSB, (pdata->x_size - 1) >> 8);
817         mxt_write_object(data, MXT_TOUCH_MULTI,
818                         MXT_TOUCH_YRANGE_LSB, (pdata->y_size - 1) & 0xff);
819         mxt_write_object(data, MXT_TOUCH_MULTI,
820                         MXT_TOUCH_YRANGE_MSB, (pdata->y_size - 1) >> 8);
821
822         /* Set touchscreen voltage */
823         if (pdata->voltage) {
824                 if (pdata->voltage < MXT_VOLTAGE_DEFAULT) {
825                         voltage = (MXT_VOLTAGE_DEFAULT - pdata->voltage) /
826                                 MXT_VOLTAGE_STEP;
827                         voltage = 0xff - voltage + 1;
828                 } else
829                         voltage = (pdata->voltage - MXT_VOLTAGE_DEFAULT) /
830                                 MXT_VOLTAGE_STEP;
831
832                 mxt_write_object(data, MXT_SPT_CTECONFIG,
833                                 MXT_CTE_VOLTAGE, voltage);
834         }
835
836         /* Set touchkey */
837         if (!pdata->key_pdata)
838                 return;
839
840         mxt_write_object(data, MXT_TOUCH_KEYARRAY,
841                         MXT_KEY_XORIGIN, pdata->key_pdata->x_origin);
842         mxt_write_object(data, MXT_TOUCH_KEYARRAY,
843                         MXT_KEY_YORIGIN, pdata->key_pdata->y_origin);
844         mxt_write_object(data, MXT_TOUCH_KEYARRAY,
845                         MXT_KEY_XSIZE, pdata->key_pdata->x_size);
846         mxt_write_object(data, MXT_TOUCH_KEYARRAY,
847                         MXT_KEY_YSIZE, pdata->key_pdata->y_size);
848         mxt_write_object(data, MXT_TOUCH_KEYARRAY,
849                         MXT_KEY_BLEN, pdata->blen);
850         mxt_write_object(data, MXT_TOUCH_KEYARRAY,
851                         MXT_KEY_TCHTHR, pdata->threshold);
852 }
853
854 static int mxt_get_info(struct mxt_data *data)
855 {
856         struct i2c_client *client = data->client;
857         struct mxt_info *info = &data->info;
858         int error;
859         u8 val;
860
861         error = mxt_read_reg(client, MXT_FAMILY_ID, &val);
862         if (error)
863                 return error;
864         info->family_id = val;
865
866         error = mxt_read_reg(client, MXT_VARIANT_ID, &val);
867         if (error)
868                 return error;
869         info->variant_id = val;
870
871         error = mxt_read_reg(client, MXT_VERSION, &val);
872         if (error)
873                 return error;
874         info->version = val;
875
876         error = mxt_read_reg(client, MXT_BUILD, &val);
877         if (error)
878                 return error;
879         info->build = val;
880
881         error = mxt_read_reg(client, MXT_OBJECT_NUM, &val);
882         if (error)
883                 return error;
884         info->object_num = val;
885
886         return 0;
887 }
888
889 static int mxt_get_object_table(struct mxt_data *data)
890 {
891         int error;
892         int i;
893         u16 reg;
894         u8 reportid = 0;
895         u8 buf[MXT_OBJECT_SIZE];
896
897         for (i = 0; i < data->info.object_num; i++) {
898                 struct mxt_object *object = data->object_table + i;
899
900                 reg = MXT_OBJECT_START + MXT_OBJECT_SIZE * i;
901                 error = mxt_read_object_table(data->client, reg, buf);
902                 if (error)
903                         return error;
904
905                 object->type = buf[0];
906                 object->start_address = (buf[2] << 8) | buf[1];
907                 object->size = buf[3];
908                 object->instances = buf[4];
909                 object->num_report_ids = buf[5];
910
911                 if (object->num_report_ids) {
912                         reportid += object->num_report_ids *
913                                         (object->instances + 1);
914                         object->max_reportid = reportid;
915                 }
916         }
917
918         return 0;
919 }
920
921 static int mxt_initialize(struct mxt_data *data)
922 {
923         struct i2c_client *client = data->client;
924         struct mxt_info *info = &data->info;
925         int error;
926         u8 val;
927
928         error = mxt_get_info(data);
929         if (error)
930                 return error;
931
932         data->object_table = kcalloc(info->object_num,
933                                      sizeof(struct mxt_object),
934                                      GFP_KERNEL);
935         if (!data->object_table) {
936                 dev_err(&client->dev, "Failed to allocate memory\n");
937                 return -ENOMEM;
938         }
939
940         /* Get object table information */
941         error = mxt_get_object_table(data);
942         if (error)
943                 return error;
944
945         /* Check register init values */
946         error = mxt_check_reg_init(data);
947         if (error)
948                 return error;
949
950         mxt_handle_pdata(data);
951
952         /* Backup to memory */
953         mxt_write_object(data, MXT_GEN_COMMAND,
954                         MXT_COMMAND_BACKUPNV,
955                         MXT_BACKUP_VALUE);
956         msleep(MXT_BACKUP_TIME);
957
958         /* Soft reset */
959         mxt_write_object(data, MXT_GEN_COMMAND,
960                         MXT_COMMAND_RESET, 1);
961         msleep(MXT_RESET_TIME);
962
963         /* Update matrix size at info struct */
964         error = mxt_read_reg(client, MXT_MATRIX_X_SIZE, &val);
965         if (error)
966                 return error;
967         info->matrix_xsize = val;
968
969         error = mxt_read_reg(client, MXT_MATRIX_Y_SIZE, &val);
970         if (error)
971                 return error;
972         info->matrix_ysize = val;
973
974         dev_info(&client->dev,
975                         "Family ID: %d Variant ID: %d Version: %d Build: %d\n",
976                         info->family_id, info->variant_id, info->version,
977                         info->build);
978
979         dev_info(&client->dev,
980                         "Matrix X Size: %d Matrix Y Size: %d Object Num: %d\n",
981                         info->matrix_xsize, info->matrix_ysize,
982                         info->object_num);
983
984         return 0;
985 }
986
987 static void mxt_calc_resolution(struct mxt_data *data)
988 {
989         unsigned int max_x = data->pdata->x_size - 1;
990         unsigned int max_y = data->pdata->y_size - 1;
991
992         if (data->pdata->orient & MXT_XY_SWITCH) {
993                 data->max_x = max_y;
994                 data->max_y = max_x;
995         } else {
996                 data->max_x = max_x;
997                 data->max_y = max_y;
998         }
999 }
1000
1001 static ssize_t mxt_object_show(struct device *dev,
1002                                     struct device_attribute *attr, char *buf)
1003 {
1004         struct mxt_data *data = dev_get_drvdata(dev);
1005         struct mxt_object *object;
1006         int count = 0;
1007         int i, j;
1008         int error;
1009         u8 val;
1010
1011         for (i = 0; i < data->info.object_num; i++) {
1012                 object = data->object_table + i;
1013
1014                 count += sprintf(buf + count,
1015                                 "Object Table Element %d(Type %d)\n",
1016                                 i + 1, object->type);
1017
1018                 if (!mxt_object_readable(object->type)) {
1019                         count += sprintf(buf + count, "\n");
1020                         continue;
1021                 }
1022
1023                 for (j = 0; j < object->size + 1; j++) {
1024                         error = mxt_read_object(data,
1025                                                 object->type, j, &val);
1026                         if (error)
1027                                 return error;
1028
1029                         count += sprintf(buf + count,
1030                                         "  Byte %d: 0x%x (%d)\n", j, val, val);
1031                 }
1032
1033                 count += sprintf(buf + count, "\n");
1034         }
1035
1036         return count;
1037 }
1038
1039 static int mxt_load_fw(struct device *dev, const char *fn)
1040 {
1041         struct mxt_data *data = dev_get_drvdata(dev);
1042         struct i2c_client *client = data->client;
1043         const struct firmware *fw = NULL;
1044         unsigned int frame_size;
1045         unsigned int pos = 0;
1046         int ret;
1047
1048         ret = request_firmware(&fw, fn, dev);
1049         if (ret) {
1050                 dev_err(dev, "Unable to open firmware %s\n", fn);
1051                 return ret;
1052         }
1053
1054         /* Change to the bootloader mode */
1055         mxt_write_object(data, MXT_GEN_COMMAND,
1056                         MXT_COMMAND_RESET, MXT_BOOT_VALUE);
1057         msleep(MXT_RESET_TIME);
1058
1059         /* Change to slave address of bootloader */
1060         if (client->addr == MXT_APP_LOW)
1061                 client->addr = MXT_BOOT_LOW;
1062         else
1063                 client->addr = MXT_BOOT_HIGH;
1064
1065         ret = mxt_check_bootloader(client, MXT_WAITING_BOOTLOAD_CMD);
1066         if (ret)
1067                 goto out;
1068
1069         /* Unlock bootloader */
1070         mxt_unlock_bootloader(client);
1071
1072         while (pos < fw->size) {
1073                 ret = mxt_check_bootloader(client,
1074                                                 MXT_WAITING_FRAME_DATA);
1075                 if (ret)
1076                         goto out;
1077
1078                 frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1));
1079
1080                 /* We should add 2 at frame size as the the firmware data is not
1081                  * included the CRC bytes.
1082                  */
1083                 frame_size += 2;
1084
1085                 /* Write one frame to device */
1086                 mxt_fw_write(client, fw->data + pos, frame_size);
1087
1088                 ret = mxt_check_bootloader(client,
1089                                                 MXT_FRAME_CRC_PASS);
1090                 if (ret)
1091                         goto out;
1092
1093                 pos += frame_size;
1094
1095                 dev_dbg(dev, "Updated %d bytes / %zd bytes\n", pos, fw->size);
1096         }
1097
1098 out:
1099         release_firmware(fw);
1100
1101         /* Change to slave address of application */
1102         if (client->addr == MXT_BOOT_LOW)
1103                 client->addr = MXT_APP_LOW;
1104         else
1105                 client->addr = MXT_APP_HIGH;
1106
1107         return ret;
1108 }
1109
1110 static ssize_t mxt_update_fw_store(struct device *dev,
1111                                         struct device_attribute *attr,
1112                                         const char *buf, size_t count)
1113 {
1114         struct mxt_data *data = dev_get_drvdata(dev);
1115         unsigned int version;
1116         int error;
1117
1118         if (sscanf(buf, "%u", &version) != 1) {
1119                 dev_err(dev, "Invalid values\n");
1120                 return -EINVAL;
1121         }
1122
1123         if (data->info.version < MXT_VER_21 || version < MXT_VER_21) {
1124                 dev_err(dev, "FW update supported starting with version 21\n");
1125                 return -EINVAL;
1126         }
1127
1128         disable_irq(data->irq);
1129
1130         error = mxt_load_fw(dev, MXT_FW_NAME);
1131         if (error) {
1132                 dev_err(dev, "The firmware update failed(%d)\n", error);
1133                 count = error;
1134         } else {
1135                 dev_dbg(dev, "The firmware update succeeded\n");
1136
1137                 /* Wait for reset */
1138                 msleep(MXT_FWRESET_TIME);
1139
1140                 kfree(data->object_table);
1141                 data->object_table = NULL;
1142
1143                 mxt_initialize(data);
1144         }
1145
1146         enable_irq(data->irq);
1147
1148         error = mxt_make_highchg(data);
1149         if (error)
1150                 return error;
1151
1152         return count;
1153 }
1154
1155 static DEVICE_ATTR(object, 0444, mxt_object_show, NULL);
1156 static DEVICE_ATTR(update_fw, 0664, NULL, mxt_update_fw_store);
1157
1158 static struct attribute *mxt_attrs[] = {
1159         &dev_attr_object.attr,
1160         &dev_attr_update_fw.attr,
1161         NULL
1162 };
1163
1164 static const struct attribute_group mxt_attr_group = {
1165         .attrs = mxt_attrs,
1166 };
1167
1168 static void mxt_start(struct mxt_data *data)
1169 {
1170         if (data->touch_enable)
1171                 return;
1172
1173         data->touch_enable = true;
1174
1175         if (data->rgt_avdd)
1176                 regulator_enable(data->rgt_avdd);
1177
1178         /* Touch enable */
1179         mxt_write_object(data,
1180                         MXT_TOUCH_MULTI, MXT_TOUCH_CTRL, 0x83);
1181 }
1182
1183 static void mxt_stop(struct mxt_data *data)
1184 {
1185         /* Turn off led always if this function is called */
1186         if (data->key && gpio_is_valid(data->key->led_gpio))
1187                 gpio_set_value_cansleep(data->key->led_gpio, 0);
1188
1189         if (!data->touch_enable)
1190                 return;
1191
1192         data->touch_enable = false;
1193
1194         /* Touch disable */
1195         mxt_write_object(data,
1196                         MXT_TOUCH_MULTI, MXT_TOUCH_CTRL, 0);
1197
1198         if (data->rgt_avdd)
1199                 regulator_disable(data->rgt_avdd);
1200 }
1201
1202 static int mxt_input_open(struct input_dev *dev)
1203 {
1204         struct mxt_data *data = input_get_drvdata(dev);
1205
1206         mxt_start(data);
1207
1208         return 0;
1209 }
1210
1211 static void mxt_input_close(struct input_dev *dev)
1212 {
1213         struct mxt_data *data = input_get_drvdata(dev);
1214
1215         mxt_stop(data);
1216 }
1217
1218 static void mxt_key_init(struct mxt_data *data)
1219 {
1220         struct mxt_key_pdata *key_pdata = data->pdata->key_pdata;
1221         struct mxt_key *key;
1222         struct input_dev *input_dev;
1223         struct device *dev = &data->client->dev;
1224         int error;
1225         int i;
1226
1227         if (!key_pdata)
1228                 return;
1229
1230         key = kzalloc(sizeof(struct mxt_key) +
1231                         sizeof(key->keycodes[0]) * (key_pdata->key_maxval + 1),
1232                         GFP_KERNEL);
1233         input_dev = input_allocate_device();
1234         if (!key || !input_dev) {
1235                 dev_err(dev, "Failed to allocate memory\n");
1236                 goto err_free_mem;
1237         }
1238
1239         data->key = key;
1240         key->input_dev = input_dev;
1241         key->led_gpio = key_pdata->led_gpio;
1242
1243         input_dev->name = "Atmel maXTouch Touchkey";
1244         input_dev->id.bustype = BUS_I2C;
1245         input_dev->dev.parent = &data->client->dev;
1246         input_dev->evbit[0] = BIT_MASK(EV_KEY);
1247         if (!key_pdata->no_autorepeat)
1248                 input_dev->evbit[0] |= BIT_MASK(EV_REP);
1249         input_dev->keycode = key->keycodes;
1250         input_dev->keycodesize = sizeof(key->keycodes[0]);
1251         input_dev->keycodemax = key_pdata->key_maxval + 1;
1252
1253         /* The one keystate message has MXT_MAX_KEYSTATE_KEY num info */
1254         key->keystate_size =
1255                 key_pdata->key_maxval / MXT_MAX_KEYSTATE_KEY + 1;
1256         if (key->keystate_size > MXT_MAX_KEYSTATE) {
1257                 dev_err(dev, "Invaild key max number\n");
1258                 goto err_free_mem;
1259         }
1260
1261         for (i = 0; i < key_pdata->keymap_size; i++) {
1262                 unsigned int val = MXT_KEY_VAL(key_pdata->keymap[i]);
1263                 unsigned int code = MXT_KEY_CODE(key_pdata->keymap[i]);
1264
1265                 key->keycodes[val] = code;
1266                 __set_bit(code, input_dev->keybit);
1267         }
1268
1269         input_set_capability(input_dev, EV_MSC, MSC_SCAN);
1270         input_set_drvdata(input_dev, data);
1271
1272         error = input_register_device(input_dev);
1273         if (error)
1274                 goto err_free_mem;
1275
1276         return;
1277
1278 err_free_mem:
1279         input_free_device(input_dev);
1280         kfree(key);
1281 }
1282
1283 static int mxt_fb_notifier_callback(struct notifier_block *self,
1284                 unsigned long event, void *fb_evdata)
1285 {
1286         struct mxt_data *data;
1287         struct fb_event *evdata = fb_evdata;
1288         struct mxt_finger *finger;
1289         int id;
1290         int blank;
1291
1292         /* If we aren't interested in this event, skip it immediately ... */
1293         if (event != FB_EVENT_BLANK)
1294                 return 0;
1295
1296         data = container_of(self, struct mxt_data, fb_notif);
1297         finger = data->finger;
1298         blank = *(int *)evdata->data;
1299
1300         switch (blank) {
1301         case 0:
1302                 if (data->rgt_vdd && data->vdd_disable) {
1303                         regulator_enable(data->rgt_vdd);
1304                         data->vdd_disable = false;
1305                         enable_irq(data->irq);
1306                 }
1307                 mxt_start(data);
1308                 break;
1309         case 4:
1310                 for (id = 0; id < MXT_MAX_FINGER; id++) {
1311                         if (!finger[id].status)
1312                                 continue;
1313                         finger[id].status = MXT_RELEASE;
1314                         mxt_input_report(data, id);
1315                 }
1316
1317                 mxt_stop(data);
1318                 if (data->rgt_vdd && !data->vdd_disable) {
1319                         disable_irq(data->irq);
1320                         regulator_disable(data->rgt_vdd);
1321                         data->vdd_disable = true;
1322                 }
1323                 break;
1324         default:
1325                 break;
1326         }
1327
1328         return 0;
1329 }
1330
1331 static void mxt_key_remove(struct mxt_data *data)
1332 {
1333         input_unregister_device(data->key->input_dev);
1334         kfree(data->key);
1335 }
1336
1337 static int __devinit mxt_probe(struct i2c_client *client,
1338                 const struct i2c_device_id *id)
1339 {
1340         const struct mxt_platform_data *pdata = client->dev.platform_data;
1341         struct mxt_data *data;
1342         struct input_dev *input_dev;
1343         int error;
1344
1345         if (!pdata)
1346                 return -EINVAL;
1347
1348         data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
1349         input_dev = input_allocate_device();
1350         if (!data || !input_dev) {
1351                 dev_err(&client->dev, "Failed to allocate memory\n");
1352                 error = -ENOMEM;
1353                 goto err_free_mem;
1354         }
1355
1356         data->rgt_avdd = regulator_get(&client->dev, "avdd");
1357         if (IS_ERR_OR_NULL(data->rgt_avdd)) {
1358                 dev_err(&client->dev, "Cannot get regulator avdd (%ld)\n",
1359                                 PTR_ERR(data->rgt_avdd));
1360                 data->rgt_avdd = NULL;
1361         }
1362         data->rgt_vdd = regulator_get(&client->dev, "vdd");
1363         if (IS_ERR_OR_NULL(data->rgt_vdd)) {
1364                 dev_err(&client->dev, "Cannot get regulator vdd (%ld)\n",
1365                                 PTR_ERR(data->rgt_vdd));
1366                 data->rgt_vdd = NULL;
1367         }
1368         data->rgt_vcc = regulator_get(&client->dev, "vcc_aux");
1369         if (IS_ERR_OR_NULL(data->rgt_vcc)) {
1370                 dev_err(&client->dev, "Cannot get regulator vcc_aux (%ld)\n",
1371                                 PTR_ERR(data->rgt_vcc));
1372                 data->rgt_vcc = NULL;
1373         }
1374
1375         if (data->rgt_vcc)
1376                 regulator_enable(data->rgt_vcc);
1377         if (data->rgt_vdd)
1378                 regulator_enable(data->rgt_vdd);
1379         if (data->rgt_avdd)
1380                 regulator_enable(data->rgt_avdd);
1381
1382         input_dev->name = "Atmel maXTouch Touchscreen";
1383         input_dev->id.bustype = BUS_I2C;
1384         input_dev->dev.parent = &client->dev;
1385         input_dev->open = mxt_input_open;
1386         input_dev->close = mxt_input_close;
1387
1388         data->client = client;
1389         data->input_dev = input_dev;
1390         data->pdata = pdata;
1391         data->irq = client->irq;
1392
1393         mxt_calc_resolution(data);
1394
1395         __set_bit(EV_ABS, input_dev->evbit);
1396         __set_bit(EV_KEY, input_dev->evbit);
1397         __set_bit(BTN_TOUCH, input_dev->keybit);
1398
1399         /* For single touch */
1400         input_set_abs_params(input_dev, ABS_X,
1401                              0, data->max_x, 0, 0);
1402         input_set_abs_params(input_dev, ABS_Y,
1403                              0, data->max_y, 0, 0);
1404
1405         /* For multi touch */
1406         input_mt_init_slots(input_dev, MXT_MAX_FINGER);
1407         input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
1408                              0, MXT_MAX_AREA, 0, 0);
1409         input_set_abs_params(input_dev, ABS_MT_POSITION_X,
1410                              0, data->max_x, 0, 0);
1411         input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
1412                              0, data->max_y, 0, 0);
1413
1414         input_set_drvdata(input_dev, data);
1415         i2c_set_clientdata(client, data);
1416
1417         error = mxt_initialize(data);
1418         if (error)
1419                 goto err_free_object;
1420
1421         error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
1422                         pdata->irqflags, client->dev.driver->name, data);
1423         if (error) {
1424                 dev_err(&client->dev, "Failed to register interrupt\n");
1425                 goto err_free_object;
1426         }
1427
1428         error = mxt_make_highchg(data);
1429         if (error)
1430                 goto err_free_irq;
1431
1432         error = input_register_device(input_dev);
1433         if (error)
1434                 goto err_free_irq;
1435
1436         error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group);
1437         if (error)
1438                 goto err_unregister_device;
1439
1440         /* To turn off touch when LCD turns off */
1441         data->fb_notif.notifier_call = mxt_fb_notifier_callback;
1442         fb_register_client(&data->fb_notif);
1443
1444         pm_runtime_set_active(&client->dev);
1445
1446         mxt_key_init(data);
1447
1448         if (data->rgt_avdd)
1449                 regulator_disable(data->rgt_avdd);
1450
1451         return 0;
1452
1453 err_unregister_device:
1454         input_unregister_device(input_dev);
1455         input_dev = NULL;
1456 err_free_irq:
1457         free_irq(client->irq, data);
1458 err_free_object:
1459         kfree(data->object_table);
1460 err_free_mem:
1461         input_free_device(input_dev);
1462
1463         if (data->rgt_vcc)
1464                 regulator_disable(data->rgt_vcc);
1465         if (data->rgt_vdd)
1466                 regulator_disable(data->rgt_vdd);
1467         if (data->rgt_avdd)
1468                 regulator_disable(data->rgt_avdd);
1469
1470         regulator_put(data->rgt_vcc);
1471         regulator_put(data->rgt_vdd);
1472         regulator_put(data->rgt_avdd);
1473
1474         kfree(data);
1475         return error;
1476 }
1477
1478 static int __devexit mxt_remove(struct i2c_client *client)
1479 {
1480         struct mxt_data *data = i2c_get_clientdata(client);
1481
1482         /* avdd is disabled on close function */
1483         if (data->rgt_vcc)
1484                 regulator_disable(data->rgt_vcc);
1485         if (data->rgt_vdd)
1486                 regulator_disable(data->rgt_vdd);
1487
1488         regulator_put(data->rgt_vcc);
1489         regulator_put(data->rgt_vdd);
1490         regulator_put(data->rgt_avdd);
1491
1492         fb_unregister_client(&data->fb_notif);
1493         mxt_key_remove(data);
1494
1495         sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
1496         free_irq(data->irq, data);
1497         input_unregister_device(data->input_dev);
1498         kfree(data->object_table);
1499         kfree(data);
1500
1501         return 0;
1502 }
1503
1504 #ifdef CONFIG_PM
1505 static int mxt_suspend(struct device *dev)
1506 {
1507         struct i2c_client *client = to_i2c_client(dev);
1508         struct mxt_data *data = i2c_get_clientdata(client);
1509         struct input_dev *input_dev = data->input_dev;
1510
1511         if (!data->vdd_disable)
1512                 disable_irq(data->irq);
1513
1514         mutex_lock(&input_dev->mutex);
1515
1516         if (input_dev->users)
1517                 mxt_stop(data);
1518
1519         mutex_unlock(&input_dev->mutex);
1520
1521         if (data->rgt_vdd && !data->vdd_disable) {
1522                 regulator_disable(data->rgt_vdd);
1523                 data->vdd_disable = true;
1524         }
1525
1526         return 0;
1527 }
1528
1529 static int mxt_resume(struct device *dev)
1530 {
1531         struct i2c_client *client = to_i2c_client(dev);
1532         struct mxt_data *data = i2c_get_clientdata(client);
1533         struct input_dev *input_dev = data->input_dev;
1534
1535         if (data->rgt_vdd && data->vdd_disable) {
1536                 regulator_enable(data->rgt_vdd);
1537                 data->vdd_disable = false;
1538         }
1539
1540         /* Soft reset
1541          * We block this line for reducing resume delay temporary
1542          * After check this register value is right, we will modify this line
1543         mxt_write_object(data, MXT_GEN_COMMAND,
1544                         MXT_COMMAND_RESET, 1);
1545
1546         msleep(MXT_RESET_TIME);
1547         */
1548         mutex_lock(&input_dev->mutex);
1549
1550         if (input_dev->users)
1551                 mxt_start(data);
1552
1553         mutex_unlock(&input_dev->mutex);
1554
1555         enable_irq(data->irq);
1556
1557         return 0;
1558 }
1559
1560 static const struct dev_pm_ops mxt_pm_ops = {
1561         .suspend        = mxt_suspend,
1562         .resume         = mxt_resume,
1563 };
1564 #endif
1565
1566 static const struct i2c_device_id mxt_id[] = {
1567         { "qt602240_ts", 0 },
1568         { "atmel_mxt_ts", 0 },
1569         { "mXT224", 0 },
1570         { }
1571 };
1572 MODULE_DEVICE_TABLE(i2c, mxt_id);
1573
1574 static struct i2c_driver mxt_driver = {
1575         .driver = {
1576                 .name   = "atmel_mxt_ts",
1577                 .owner  = THIS_MODULE,
1578 #ifdef CONFIG_PM
1579                 .pm     = &mxt_pm_ops,
1580 #endif
1581         },
1582         .probe          = mxt_probe,
1583         .remove         = __devexit_p(mxt_remove),
1584         .id_table       = mxt_id,
1585 };
1586
1587 static void mxt_init_async(void *unsued, async_cookie_t cookie)
1588 {
1589         i2c_add_driver(&mxt_driver);
1590 }
1591
1592 static int __init mxt_init(void)
1593 {
1594         async_schedule(mxt_init_async, NULL);
1595         return 0;
1596 }
1597
1598 static void __exit mxt_exit(void)
1599 {
1600         i2c_del_driver(&mxt_driver);
1601 }
1602
1603 module_init(mxt_init);
1604 module_exit(mxt_exit);
1605
1606 /* Module information */
1607 MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
1608 MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver");
1609 MODULE_LICENSE("GPL");