Improve something for A22:
[firefly-linux-kernel-4.4.55.git] / drivers / input / touchscreen / ili2102_ts.c
1 #include <linux/module.h>
2 #include <linux/delay.h>
3 #include <linux/earlysuspend.h>
4 #include <linux/hrtimer.h>
5 #include <linux/i2c.h>
6 #include <linux/input.h>
7 #include <linux/interrupt.h>
8 #include <linux/io.h>
9 #include <linux/gpio.h>
10 #include <linux/types.h>
11 #include <mach/iomux.h>
12 #include <linux/platform_device.h>
13 #include <linux/kthread.h>
14 #include <linux/sched.h>
15 #include <linux/irq.h>
16 #include <linux/cdev.h>
17 #include <asm/uaccess.h>
18 #include <linux/proc_fs.h>
19
20 #include "ili2102_ts.h"
21
22 static int  ts_dbg_enable = 0;
23
24 #define DBG(msg...) \
25         ({if(ts_dbg_enable == 1) printk(msg);})
26                 
27 #define TOUCH_NUMBER 2
28
29 static volatile int touch_state[TOUCH_NUMBER] = {TOUCH_UP,TOUCH_UP};
30 static volatile unsigned int g_x[TOUCH_NUMBER] =  {0},g_y[TOUCH_NUMBER] = {0};
31
32 struct ili2102_ts_data {
33         u16             model;                  /* 801. */      
34         bool    swap_xy;                /* swap x and y axes */ 
35         u16             x_min, x_max;   
36         u16             y_min, y_max;
37         uint16_t addr;
38         int     use_irq;
39         int     pendown;
40         int     gpio_pendown;
41         int     gpio_reset;
42         int     gpio_reset_active_low;
43         int             pendown_iomux_mode;     
44         int             resetpin_iomux_mode;
45         char    pendown_iomux_name[IOMUX_NAME_SIZE];    
46         char    resetpin_iomux_name[IOMUX_NAME_SIZE];   
47         char    phys[32];
48         char    name[32];
49         int             valid_i2c_register;
50         struct  i2c_client *client;
51         struct  input_dev *input_dev;
52         struct  hrtimer timer;
53         struct  delayed_work    work;
54         struct  workqueue_struct *ts_wq;        
55         struct  early_suspend early_suspend;
56 };
57
58 #ifdef CONFIG_HAS_EARLYSUSPEND
59 static void ili2102_ts_early_suspend(struct early_suspend *h);
60 static void ili2102_ts_late_resume(struct early_suspend *h);
61 #endif
62
63 #define ILI2102_TS_APK_SUPPORT 1
64
65 #if ILI2102_TS_APK_SUPPORT
66 // device data
67 struct dev_data {
68         // device number
69         dev_t devno;
70         // character device
71         struct cdev cdev;
72         // class device
73         struct class *class;
74 };
75
76 // global variables
77 static struct ili2102_ts_data *g_ts;
78 static struct dev_data g_dev;
79
80 // definitions
81 #define ILITEK_I2C_RETRY_COUNT                  3
82 #define ILITEK_FILE_DRIVER_NAME                 "ilitek_file"
83 #define ILITEK_DEBUG_LEVEL                      KERN_INFO
84 #define ILITEK_ERROR_LEVEL                      KERN_ALERT
85
86 // i2c command for ilitek touch screen
87 #define ILITEK_TP_CMD_READ_DATA                 0x10
88 #define ILITEK_TP_CMD_READ_SUB_DATA             0x11
89 #define ILITEK_TP_CMD_GET_RESOLUTION            0x20
90 #define ILITEK_TP_CMD_GET_FIRMWARE_VERSION      0x40
91 #define ILITEK_TP_CMD_GET_PROTOCOL_VERSION      0x42
92 #define ILITEK_TP_CMD_CALIBRATION               0xCC
93 #define ILITEK_TP_CMD_ERASE_BACKGROUND          0xCE
94
95 // define the application command
96 #define ILITEK_IOCTL_BASE                       100
97 #define ILITEK_IOCTL_I2C_WRITE_DATA             _IOWR(ILITEK_IOCTL_BASE, 0, unsigned char*)
98 #define ILITEK_IOCTL_I2C_WRITE_LENGTH           _IOWR(ILITEK_IOCTL_BASE, 1, int)
99 #define ILITEK_IOCTL_I2C_READ_DATA              _IOWR(ILITEK_IOCTL_BASE, 2, unsigned char*)
100 #define ILITEK_IOCTL_I2C_READ_LENGTH            _IOWR(ILITEK_IOCTL_BASE, 3, int)
101 #define ILITEK_IOCTL_USB_WRITE_DATA             _IOWR(ILITEK_IOCTL_BASE, 4, unsigned char*)
102 #define ILITEK_IOCTL_USB_WRITE_LENGTH           _IOWR(ILITEK_IOCTL_BASE, 5, int)
103 #define ILITEK_IOCTL_USB_READ_DATA              _IOWR(ILITEK_IOCTL_BASE, 6, unsigned char*)
104 #define ILITEK_IOCTL_USB_READ_LENGTH            _IOWR(ILITEK_IOCTL_BASE, 7, int)
105 #define ILITEK_IOCTL_I2C_UPDATE_RESOLUTION      _IOWR(ILITEK_IOCTL_BASE, 8, int)
106 #define ILITEK_IOCTL_USB_UPDATE_RESOLUTION      _IOWR(ILITEK_IOCTL_BASE, 9, int)
107 #define ILITEK_IOCTL_I2C_SET_ADDRESS            _IOWR(ILITEK_IOCTL_BASE, 10, int)
108 #define ILITEK_IOCTL_I2C_UPDATE                 _IOWR(ILITEK_IOCTL_BASE, 11, int)
109 #define ILITEK_IOCTL_STOP_READ_DATA             _IOWR(ILITEK_IOCTL_BASE, 12, int)
110 #define ILITEK_IOCTL_START_READ_DATA            _IOWR(ILITEK_IOCTL_BASE, 13, int)
111
112
113 static ssize_t ili2102_proc_write(struct file *file, const char __user *buffer,
114                            unsigned long count, void *data)
115 {
116         char c;
117         int rc;
118         
119         rc = get_user(c, buffer);
120         if (rc)
121                 return rc; 
122         
123         if (c == '1')
124                 ts_dbg_enable = 1; 
125         else if (c == '0')
126                 ts_dbg_enable = 0; 
127
128         return count; 
129 }
130
131 static const struct file_operations ili2102_proc_fops = {
132         .owner          = THIS_MODULE, 
133         .write          = ili2102_proc_write,
134 }; 
135
136 static int ilitek_file_open(struct inode *inode, struct file *filp)
137 {
138         return 0; 
139 }
140
141 static ssize_t ilitek_file_write(struct file *filp, const char *buf, size_t count, loff_t *f_pos)
142 {
143         int ret;
144         unsigned char buffer[128]={0};
145         struct i2c_msg msg[2];
146
147         msg[0].addr = g_ts->client->addr;
148         msg[0].flags = g_ts->client->flags;
149         msg[0].len = count;
150         msg[0].buf = buffer;
151         msg[0].scl_rate = 400*1000;
152         msg[0].udelay = 80;
153
154         printk("%s:count=0x%x\n",__FUNCTION__,count);
155         
156         // before sending data to touch device, we need to check whether the device is working or not
157         if(g_ts->valid_i2c_register == 0){
158                 printk(ILITEK_ERROR_LEVEL "%s, i2c device driver doesn't be registered\n", __func__);
159                 return -1;
160         }
161
162         // check the buffer size whether it exceeds the local buffer size or not
163         if(count > 128){
164                 printk(ILITEK_ERROR_LEVEL "%s, buffer exceed 128 bytes\n", __func__);
165                 return -1;
166         }
167
168         // copy data from user space
169         ret = copy_from_user(buffer, buf, count-1);
170         if(ret < 0){
171                 printk(ILITEK_ERROR_LEVEL "%s, copy data from user space, failed", __func__);
172                 return -1;
173         }
174
175         // parsing command
176         if(strcmp(buffer, "calibrate") == 0){
177                 buffer[0] = ILITEK_TP_CMD_ERASE_BACKGROUND;
178         msg[0].len = 1;
179         ret = i2c_transfer(g_ts->client->adapter, msg, 1);
180         if(ret < 0){
181                 printk(ILITEK_DEBUG_LEVEL "%s, i2c erase background, failed\n", __func__);
182         }
183         else{
184                 printk(ILITEK_DEBUG_LEVEL "%s, i2c erase background, success\n", __func__);
185         }
186
187                 buffer[0] = ILITEK_TP_CMD_CALIBRATION;
188         msg[0].len = 1;
189         msleep(2000);
190         ret = i2c_transfer(g_ts->client->adapter, msg, 1);
191                 if(ret < 0){
192         printk(ILITEK_DEBUG_LEVEL "%s, i2c calibration, failed\n", __func__);
193         }
194                 else{
195         printk(ILITEK_DEBUG_LEVEL "%s, i2c calibration, success\n", __func__);
196                 }
197                 msleep(1000);
198                 return count;
199         }
200         return -1;
201 }
202
203
204 static int ilitek_file_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
205 {
206         static unsigned char buffer[64]={0};
207         static int len=0;
208         int ret;
209         struct i2c_msg msg[2];
210         
211         msg[0].addr = g_ts->client->addr;
212         msg[0].flags = g_ts->client->flags;
213         msg[0].len = len;
214         msg[0].buf = buffer;
215         msg[0].scl_rate = 400*1000;
216         msg[0].udelay = 80;
217         
218         // parsing ioctl command
219         switch(cmd){
220         case ILITEK_IOCTL_I2C_WRITE_DATA:
221                 ret = copy_from_user(buffer, (unsigned char*)arg, len);
222                 if(ret < 0){
223         printk(ILITEK_ERROR_LEVEL "%s, copy data from user space, failed\n", __func__);
224         return -1;
225         }
226                 ret = i2c_transfer(g_ts->client->adapter, msg, 1);
227                 if(ret < 0){
228                 printk(ILITEK_ERROR_LEVEL "%s, i2c write, failed\n", __func__);
229                 return -1;
230                 }
231                 break;
232                 
233         case ILITEK_IOCTL_I2C_READ_DATA:
234                 msg[0].addr = g_ts->client->addr;
235                 msg[0].flags = g_ts->client->flags | I2C_M_RD;
236                 msg[0].len = len;       
237                 msg[0].buf = buffer;
238                 msg[0].scl_rate = 400*1000;
239                 msg[0].udelay = 80;
240                 ret = i2c_transfer(g_ts->client->adapter, msg, 1);
241                 if(ret < 0){
242         printk(ILITEK_ERROR_LEVEL "%s, i2c read, failed\n", __func__);
243                 return -1;
244         }
245                 ret = copy_to_user((unsigned char*)arg, buffer, len);
246                 if(ret < 0){
247         printk(ILITEK_ERROR_LEVEL "%s, copy data to user space, failed\n", __func__);
248         return -1;
249         }
250                 break;
251         case ILITEK_IOCTL_I2C_WRITE_LENGTH:
252         case ILITEK_IOCTL_I2C_READ_LENGTH:
253                 len = arg;
254                 break;
255         case ILITEK_IOCTL_I2C_UPDATE_RESOLUTION:
256         case ILITEK_IOCTL_I2C_SET_ADDRESS:
257         case ILITEK_IOCTL_I2C_UPDATE:
258                 break;
259         case ILITEK_IOCTL_START_READ_DATA:
260                 //g_ts.stop_polling = 0;
261                 break;
262         case ILITEK_IOCTL_STOP_READ_DATA:
263                 //g_ts.stop_polling = 1;
264                 break;
265         default:
266                 return -1;
267         }
268         
269         printk("%s:cmd=0x%x\n",__FUNCTION__,cmd);
270         
271         return 0;
272 }
273
274
275 static ssize_t ilitek_file_read(struct file *filp, char *buf, size_t count, loff_t *f_pos)
276 {
277         return 0;
278 }
279
280
281 static int ilitek_file_close(struct inode *inode, struct file *filp)
282 {
283         return 0;
284 }
285
286
287 // declare file operations
288 struct file_operations ilitek_fops = {
289         .ioctl = ilitek_file_ioctl,
290         .read = ilitek_file_read,
291         .write = ilitek_file_write,
292         .open = ilitek_file_open,
293         .release = ilitek_file_close,
294 };
295
296 #endif
297 static int verify_coord(struct ili2102_ts_data *ts,unsigned int *x,unsigned int *y)
298 {
299
300         //DBG("%s:(%d/%d)\n",__FUNCTION__,*x, *y);
301         if((*x< ts->x_min) || (*x > ts->x_max))
302                 return -1;
303
304         if((*y< ts->y_min) || (*y > ts->y_max))
305                 return -1;
306
307         return 0;
308 }
309 static int ili2102_init_panel(struct ili2102_ts_data *ts)
310 {       
311         gpio_set_value(ts->gpio_reset, ts->gpio_reset_active_low? GPIO_LOW:GPIO_HIGH);
312         mdelay(1);
313         gpio_set_value(ts->gpio_reset, ts->gpio_reset_active_low? GPIO_HIGH:GPIO_LOW);
314         return 0;
315 }
316
317 static void ili2102_ts_work_func(struct work_struct *work)
318 {
319         int i,ret,num=1;
320         int syn_flag = 0;
321         unsigned int x, y;
322         struct i2c_msg msg[2];
323         uint8_t start_reg;
324         uint8_t buf[9];//uint32_t buf[4];
325         struct ili2102_ts_data *ts = container_of(work, struct ili2102_ts_data, work);
326
327         DBG("ili2102_ts_work_func\n");
328
329         /*Touch Information Report*/
330         start_reg = 0x10;
331
332         msg[0].addr = ts->client->addr;
333         msg[0].flags = ts->client->flags;
334         msg[0].len = 1;
335         msg[0].buf = &start_reg;
336         msg[0].scl_rate = 400*1000;
337         msg[0].udelay = 250;
338         
339         msg[1].addr = ts->client->addr;
340         msg[1].flags = ts->client->flags | I2C_M_RD;
341         msg[1].len = 9; 
342         msg[1].buf = buf;
343         msg[1].scl_rate = 400*1000;
344         msg[1].udelay = 0;
345         
346         ret = i2c_transfer(ts->client->adapter, msg, 2); 
347         if (ret < 0) 
348         {
349                 printk("%s:i2c_transfer fail, ret=%d\n",__FUNCTION__,ret);
350                 goto out;
351         }
352         if(buf[0]&0x02 == 0x02)
353                 num = 2;
354         else
355                 num = 1;
356         
357         for(i=0; i<num; i++)
358         {
359
360                 if(!((buf[0]>>i)&0x01))
361                 {
362                         if (touch_state[i] == TOUCH_DOWN)
363                         {
364                                 DBG("ili2102_ts_work_func:buf[%d]=%d\n",i,buf[i]);
365                                 input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0); //Finger Size
366                                 input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0); //Touch Size
367                                 input_mt_sync(ts->input_dev);
368                                 syn_flag = 1;
369                                 touch_state[i] = TOUCH_UP;
370                                 DBG("i=%d,touch_up \n",i);
371                         }
372
373                 }
374                 else
375                 {
376                         if((buf[0]>>i)&0x01)
377                         {
378                                 x = buf[1+(i<<2)] | (buf[2+(i<<2)] << 8);
379                                 y = buf[3+(i<<2)] | (buf[4+(i<<2)] << 8);
380                                 
381                                 if (ts->swap_xy)
382                                 swap(x, y);
383
384                                 if (verify_coord(ts,&x,&y))//goto out;
385                                 {
386                                         printk("err:x=%d,y=%d\n",x,y);
387                                         x = g_x[i];
388                                         y = g_y[i];
389                                 }
390
391                                 g_x[i] = x;
392                                 g_y[i] = y;                     
393                                 input_event(ts->input_dev, EV_ABS, ABS_MT_TRACKING_ID, i);
394                         input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 1); //Finger Size
395                         input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x);
396                         input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y);
397                         input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, 5); //Touch Size
398                         input_mt_sync(ts->input_dev);
399                                 syn_flag = 1;
400                                 touch_state[i] = TOUCH_DOWN;
401                                  ts->pendown = 1;
402                                 DBG("touch_down i=%d X = %d, Y = %d\n",i, x, y);
403                         }
404                         
405                 }
406         }
407         
408         if(syn_flag)
409         input_sync(ts->input_dev);
410 out:   
411 #if 1
412         if(ts->pendown)
413         {
414                 schedule_delayed_work(&ts->work, msecs_to_jiffies(12));
415                 ts->pendown = 0;
416         }
417         else
418         {
419                 if (ts->use_irq) 
420                 enable_irq(ts->client->irq);
421         }
422 #else
423         enable_irq(ts->client->irq);//intterupt pin will be high after i2c read so could enable irq at once
424 #endif
425         DBG("pin=%d,level=%d,irq=%d\n\n",irq_to_gpio(ts->client->irq),gpio_get_value(irq_to_gpio(ts->client->irq)),ts->client->irq);
426
427 }
428
429 static irqreturn_t ili2102_ts_irq_handler(int irq, void *dev_id)
430 {
431         struct ili2102_ts_data *ts = dev_id;
432         DBG("ili2102_ts_irq_handler=%d,%d\n",ts->client->irq,ts->use_irq);
433
434         disable_irq_nosync(ts->client->irq); //disable_irq(ts->client->irq);
435         queue_delayed_work(ts->ts_wq, &ts->work, 0);
436         return IRQ_HANDLED;
437 }
438
439 static int __devinit setup_resetPin(struct i2c_client *client, struct ili2102_ts_data *ts)
440 {
441         struct ili2102_platform_data    *pdata = client->dev.platform_data;
442         int err;
443         
444         ts->gpio_reset = pdata->gpio_reset;
445         strcpy(ts->resetpin_iomux_name,pdata->resetpin_iomux_name);
446         ts->resetpin_iomux_mode = pdata->resetpin_iomux_mode;
447         ts->gpio_reset_active_low = pdata->gpio_reset_active_low;
448         
449         DBG("%s=%d,%s,%d,%d\n",__FUNCTION__,ts->gpio_reset,ts->resetpin_iomux_name,ts->resetpin_iomux_mode,ts->gpio_reset_active_low);
450
451         if (!gpio_is_valid(ts->gpio_reset)) {
452                 dev_err(&client->dev, "no gpio_reset?\n");
453                 return -EINVAL;
454         }
455
456         rk29_mux_api_set(ts->resetpin_iomux_name,ts->resetpin_iomux_mode); 
457         err = gpio_request(ts->gpio_reset, "ili2102_resetPin");
458         if (err) {
459                 dev_err(&client->dev, "failed to request resetPin GPIO%d\n",
460                                 ts->gpio_reset);
461                 return err;
462         }
463         
464         //gpio_direction_output(ts->gpio_reset, ts->gpio_reset_active_low? GPIO_HIGH:GPIO_LOW);
465
466         err = gpio_direction_output(ts->gpio_reset, ts->gpio_reset_active_low? GPIO_LOW:GPIO_HIGH);
467         if (err) {
468                 dev_err(&client->dev, "failed to set resetPin GPIO%d\n",
469                                 ts->gpio_reset);
470                 gpio_free(ts->gpio_reset);
471                 return err;
472         }
473         
474         mdelay(5);
475
476         gpio_set_value(ts->gpio_reset, ts->gpio_reset_active_low? GPIO_HIGH:GPIO_LOW);
477
478         mdelay(200);
479          
480         return 0;
481 }
482
483 static int __devinit setup_pendown(struct i2c_client *client, struct ili2102_ts_data *ts)
484 {
485         int err;
486         struct ili2102_platform_data    *pdata = client->dev.platform_data;
487         
488         if (!client->irq) {
489                 dev_dbg(&client->dev, "no IRQ?\n");
490                 return -ENODEV;
491         }
492         
493         if (!gpio_is_valid(pdata->gpio_pendown)) {
494                 dev_err(&client->dev, "no gpio_pendown?\n");
495                 return -EINVAL;
496         }
497         
498         ts->gpio_pendown = pdata->gpio_pendown;
499         strcpy(ts->pendown_iomux_name,pdata->pendown_iomux_name);
500         ts->pendown_iomux_mode = pdata->pendown_iomux_mode;
501         
502         DBG("%s=%d,%s,%d\n",__FUNCTION__,ts->gpio_pendown,ts->pendown_iomux_name,ts->pendown_iomux_mode);
503         
504         if (!gpio_is_valid(ts->gpio_pendown)) {
505                 dev_err(&client->dev, "no gpio_pendown?\n");
506                 return -EINVAL;
507         }
508         
509         rk29_mux_api_set(ts->pendown_iomux_name,ts->pendown_iomux_mode);
510         err = gpio_request(ts->gpio_pendown, "ili2102_pendown");
511         if (err) {
512                 dev_err(&client->dev, "failed to request pendown GPIO%d\n",
513                                 ts->gpio_pendown);
514                 return err;
515         }
516         
517         err = gpio_pull_updown(ts->gpio_pendown, PullDisable);
518         if (err) {
519                 dev_err(&client->dev, "failed to pullup pendown GPIO%d\n",
520                                 ts->gpio_pendown);
521                 gpio_free(ts->gpio_pendown);
522                 return err;
523         }
524         return 0;
525 }
526
527 static int ili2102_chip_Init(struct i2c_client *client)
528 {       
529         int ret = 0;
530         uint8_t start_reg;
531         uint8_t buf[6];
532         struct i2c_msg msg[2];
533         
534         /* get panel information:6bytes */
535         start_reg = 0x20;
536         msg[0].addr =client->addr;
537         msg[0].flags = client->flags;
538         msg[0].len = 1;
539         msg[0].buf = &start_reg;
540         msg[0].scl_rate = 400*1000;
541         msg[0].udelay = 200;
542
543         ret = i2c_transfer(client->adapter, msg, 1);   
544         if (ret < 0) {
545         printk("%s:err\n",__FUNCTION__);
546         }
547         
548         mdelay(5);//tp need delay
549         
550         msg[0].addr = client->addr;
551         msg[0].flags = client->flags |I2C_M_RD;
552         msg[0].len = 6;
553         msg[0].buf = (u8*)&buf[0];
554         msg[0].scl_rate = 400*1000;
555         msg[0].udelay = 200;
556
557         ret = i2c_transfer(client->adapter, msg, 1);   
558         if (ret < 0) {
559         printk("%s:err\n",__FUNCTION__);
560         }
561
562         printk("%s:max_x=%d,max_y=%d,b[4]=0x%x,b[5]=0x%x\n", 
563                 __FUNCTION__,buf[0]|(buf[1]<<8),buf[2]|(buf[3]<<8),buf[4],buf[5]);
564
565         /*get firmware version:3bytes */        
566         start_reg = 0x40;
567         msg[0].addr =client->addr;
568         msg[0].flags = client->flags;
569         msg[0].len = 1;
570         msg[0].buf = &start_reg;
571         msg[0].scl_rate = 400*1000;
572         msg[0].udelay = 200;
573
574         ret = i2c_transfer(client->adapter, msg, 1);   
575         if (ret < 0) {
576         printk("%s:err\n",__FUNCTION__);
577         }
578         
579         mdelay(5);//tp need delay
580         
581         msg[0].addr = client->addr;
582         msg[0].flags = client->flags | I2C_M_RD;
583         msg[0].len = 3;
584         msg[0].buf = (u8*)&buf[0];
585         msg[0].scl_rate =400*1000;
586         msg[0].udelay = 200;
587
588         ret = i2c_transfer(client->adapter, msg, 1);
589         if (ret < 0) {
590         printk("%s:err\n",__FUNCTION__);
591         }
592
593         printk("%s:Ver %d.%d.%d\n",__FUNCTION__,buf[0],buf[1],buf[2]);
594
595         return ret;
596     
597 }
598
599 static int ili2102_ts_probe(struct i2c_client *client, const struct i2c_device_id *id)
600 {
601         struct ili2102_ts_data *ts;
602         struct ili2102_platform_data    *pdata = client->dev.platform_data;
603         int ret = 0;
604
605         printk("ili2102 TS probe\n"); 
606     
607         if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
608             printk(KERN_ERR "ili2102_ts_probe: need I2C_FUNC_I2C\n");
609             ret = -ENODEV;
610             goto err_check_functionality_failed;
611         }
612
613         ts = kzalloc(sizeof(*ts), GFP_KERNEL);
614         if (ts == NULL) {
615             ret = -ENOMEM;
616             goto err_alloc_data_failed;
617         }
618         
619         ts->ts_wq = create_singlethread_workqueue("ts_wq");
620         if (!ts->ts_wq)
621         {
622                 printk("%s:fail to create ts_wq,ret=0x%x\n",__FUNCTION__, ENOMEM);
623                 return -ENOMEM;
624         }
625         //INIT_WORK(&ts->work, ili2102_ts_work_func);
626         INIT_DELAYED_WORK(&ts->work, ili2102_ts_work_func);
627         ts->client = client;
628         i2c_set_clientdata(client, ts);
629
630         ret = setup_resetPin(client,ts);
631         if(ret)
632         {
633                  printk("ili2102 TS setup_resetPin fail\n");
634                  goto err_alloc_data_failed;
635         }
636
637         ret=ili2102_chip_Init(ts->client);
638         if(ret<0)
639         {
640                 printk("%s:chips init failed\n",__FUNCTION__);
641                 goto err_resetpin_failed;
642         }
643
644         /* allocate input device */
645         ts->input_dev = input_allocate_device();
646         if (ts->input_dev == NULL) {
647             ret = -ENOMEM;
648             printk(KERN_ERR "ili2102_ts_probe: Failed to allocate input device\n");
649             goto err_input_dev_alloc_failed;
650         }
651
652         ts->model = pdata->model ? : 801;
653         ts->swap_xy = pdata->swap_xy;
654         ts->x_min = pdata->x_min;
655         ts->x_max = pdata->x_max;
656         ts->y_min = pdata->y_min;
657         ts->y_max = pdata->y_max;
658         snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&client->dev));
659         snprintf(ts->name, sizeof(ts->name), "ili%d-touchscreen", ts->model);
660         ts->input_dev->phys = ts->phys;
661         ts->input_dev->name = ts->name;
662         ts->input_dev->dev.parent = &client->dev;
663         ts->pendown = 0;
664         ts->valid_i2c_register = 1;
665
666         ts->input_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_ABS);
667         //ts->input_dev->absbit[0] = 
668                 //BIT(ABS_MT_POSITION_X) | BIT(ABS_MT_POSITION_Y) | 
669                 //BIT(ABS_MT_TOUCH_MAJOR) | BIT(ABS_MT_WIDTH_MAJOR);  // for android
670         input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 
671                     ts->x_min ? : 0,
672                         ts->x_max ? : 480,
673                         0, 0);
674         input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y,
675                         ts->y_min ? : 0,
676                         ts->y_max ? : 800,
677                         0, 0);
678         input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 1, 0, 0); //Finger Size
679         input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 10, 0, 0); //Touch Size
680
681         /* ts->input_dev->name = ts->keypad_info->name; */
682         ret = input_register_device(ts->input_dev);
683         if (ret) {
684             printk(KERN_ERR "ili2102_ts_probe: Unable to register %s input device\n", ts->input_dev->name);
685             goto err_input_register_device_failed;
686         }
687
688         client->irq = gpio_to_irq(client->irq);
689         if (client->irq) 
690         {
691                 ret = setup_pendown(client,ts);
692                 if(ret)
693                 {
694                          printk("ili2102 TS setup_pendown fail\n");
695                          goto err_input_register_device_failed;
696                 }
697                 
698         ret = request_irq(client->irq, ili2102_ts_irq_handler, IRQF_DISABLED | IRQF_TRIGGER_LOW, client->name, ts);
699         if (ret == 0) {
700             DBG("ili2102 TS register ISR (irq=%d)\n", client->irq);
701             ts->use_irq = 1;
702         }
703         else 
704                 dev_err(&client->dev, "request_irq failed\n");
705     }
706         
707 #if ILI2102_TS_APK_SUPPORT
708         // initialize global variable
709         g_ts = ts;
710         memset(&g_dev, 0, sizeof(struct dev_data));     
711         
712         // allocate character device driver buffer
713         ret = alloc_chrdev_region(&g_dev.devno, 0, 1, ILITEK_FILE_DRIVER_NAME);
714         if(ret){
715                 printk(ILITEK_ERROR_LEVEL "%s, can't allocate chrdev\n", __func__);
716                 return ret;
717         }
718         printk(ILITEK_DEBUG_LEVEL "%s, register chrdev(%d, %d)\n", __func__, MAJOR(g_dev.devno), MINOR(g_dev.devno));
719         
720         // initialize character device driver
721         cdev_init(&g_dev.cdev, &ilitek_fops);
722         g_dev.cdev.owner = THIS_MODULE;
723         ret = cdev_add(&g_dev.cdev, g_dev.devno, 1);
724         if(ret < 0){
725                 printk(ILITEK_ERROR_LEVEL "%s, add character device error, ret %d\n", __func__, ret);
726                 return ret;
727         }
728         g_dev.class = class_create(THIS_MODULE, ILITEK_FILE_DRIVER_NAME);
729         if(IS_ERR(g_dev.class)){
730                 printk(ILITEK_ERROR_LEVEL "%s, create class, error\n", __func__);
731                 return ret;
732         }
733         device_create(g_dev.class, NULL, g_dev.devno, NULL, "ilitek_ctrl");
734 #endif
735
736 #ifdef CONFIG_HAS_EARLYSUSPEND
737         ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
738         ts->early_suspend.suspend = ili2102_ts_early_suspend;
739         ts->early_suspend.resume = ili2102_ts_late_resume;
740         register_early_suspend(&ts->early_suspend);
741 #endif
742                 
743         struct proc_dir_entry *ili2102_proc_entry;      
744         ili2102_proc_entry = proc_create("driver/ili2102", 0777, NULL, &ili2102_proc_fops); 
745
746         printk(KERN_INFO "ili2102_ts_probe: Start touchscreen %s in %s mode\n", ts->input_dev->name, ts->use_irq ? "interrupt" : "polling");
747
748         return 0;
749
750         err_input_register_device_failed:
751         input_free_device(ts->input_dev);
752         err_resetpin_failed:
753         gpio_free(ts->gpio_reset);
754         err_input_dev_alloc_failed:
755         kfree(ts);
756         err_alloc_data_failed:
757         err_check_functionality_failed:
758         return ret;
759 }
760
761 static int ili2102_ts_remove(struct i2c_client *client)
762 {
763         struct ili2102_ts_data *ts = i2c_get_clientdata(client);
764         unregister_early_suspend(&ts->early_suspend);
765         if (ts->use_irq)
766         free_irq(client->irq, ts);
767         else
768         hrtimer_cancel(&ts->timer);
769         input_unregister_device(ts->input_dev);
770         if (ts->ts_wq)
771         cancel_delayed_work_sync(&ts->work);
772         kfree(ts);
773         
774 #if ILI2102_TS_APK_SUPPORT
775         // delete character device driver
776         cdev_del(&g_dev.cdev);
777         unregister_chrdev_region(g_dev.devno, 1);
778         device_destroy(g_dev.class, g_dev.devno);
779         class_destroy(g_dev.class);
780 #endif
781
782         return 0;
783 }
784
785 static int ili2102_ts_suspend(struct i2c_client *client, pm_message_t mesg)
786 {
787         int ret;
788         struct ili2102_ts_data *ts = i2c_get_clientdata(client);
789         uint8_t buf[1] = {0x30};
790         struct i2c_msg msg[1];
791
792         //to do suspend
793         msg[0].addr =client->addr;
794         msg[0].flags = 0;
795         msg[0].len = 1;
796         msg[0].buf = buf;
797
798         ret = i2c_transfer(client->adapter, msg, 1);
799         if (ret < 0) {
800         printk("%s:err\n",__FUNCTION__);
801         }
802
803         ret = cancel_delayed_work_sync(&ts->work);
804         if (ret && ts->use_irq) /* if work was pending disable-count is now 2 */
805         enable_irq(client->irq);
806         
807         if (ts->use_irq)
808         {
809                 free_irq(client->irq, ts);
810                 //change irq type to IRQF_TRIGGER_FALLING to avoid system death
811                 ret = request_irq(client->irq, ili2102_ts_irq_handler, IRQF_DISABLED | IRQF_TRIGGER_FALLING, client->name, ts);
812             if (ret == 0) {
813                 disable_irq_nosync(client->irq);
814                 ts->use_irq = 1;
815             }
816             else 
817                 printk("%s:request irq=%d failed,ret=%d\n",__FUNCTION__, ts->client->irq, ret);
818         }
819         else
820         hrtimer_cancel(&ts->timer);
821
822         DBG("%s\n",__FUNCTION__);
823         
824         return 0;
825 }
826
827
828 static void ili2102_ts_resume_work_func(struct work_struct *work)
829 {
830         struct ili2102_ts_data *ts = container_of(work, struct ili2102_ts_data, work);
831         int ret;
832
833         //report touch up to android
834         input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0); //Finger Size
835         input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0); //Touch Size
836         input_mt_sync(ts->input_dev);
837         input_sync(ts->input_dev);
838         
839         PREPARE_DELAYED_WORK(&ts->work, ili2102_ts_work_func);
840         mdelay(100); //wait for 100ms before i2c operation
841         
842         free_irq(ts->client->irq, ts);
843         ret = request_irq(ts->client->irq, ili2102_ts_irq_handler, IRQF_DISABLED | IRQF_TRIGGER_LOW, ts->client->name, ts);
844         if (ret == 0) {
845         ts->use_irq = 1;
846         //enable_irq(ts->client->irq);
847         }
848         else 
849         printk("%s:request irq=%d failed,ret=%d\n",__FUNCTION__,ts->client->irq,ret);
850
851         DBG("%s,irq=%d\n",__FUNCTION__,ts->client->irq);
852 }
853
854
855 static int ili2102_ts_resume(struct i2c_client *client)
856 {
857     struct ili2102_ts_data *ts = i2c_get_clientdata(client);
858
859     ili2102_init_panel(ts);
860         
861     if (ts->use_irq) {
862         if(!delayed_work_pending(&ts->work)){
863                 PREPARE_DELAYED_WORK(&ts->work, ili2102_ts_resume_work_func);
864                 queue_delayed_work(ts->ts_wq, &ts->work, 0);
865         }
866     }
867     else {
868         hrtimer_start(&ts->timer, ktime_set(1, 0), HRTIMER_MODE_REL);
869     }
870
871         DBG("%s\n",__FUNCTION__);
872
873     return 0;
874 }
875
876
877 #ifdef CONFIG_HAS_EARLYSUSPEND
878 static void ili2102_ts_early_suspend(struct early_suspend *h)
879 {
880     struct ili2102_ts_data *ts;
881     ts = container_of(h, struct ili2102_ts_data, early_suspend);
882     ili2102_ts_suspend(ts->client, PMSG_SUSPEND);
883 }
884
885 static void ili2102_ts_late_resume(struct early_suspend *h)
886 {
887     struct ili2102_ts_data *ts;
888     ts = container_of(h, struct ili2102_ts_data, early_suspend);
889     ili2102_ts_resume(ts->client);
890 }
891 #endif
892
893 #define ILI2102_TS_NAME "ili2102_ts"
894
895 static const struct i2c_device_id ili2102_ts_id[] = {
896     { ILI2102_TS_NAME, 0 },
897     { }
898 };
899
900 static struct i2c_driver ili2102_ts_driver = {
901     .probe      = ili2102_ts_probe,
902     .remove     = ili2102_ts_remove,
903 #ifndef CONFIG_HAS_EARLYSUSPEND
904     .suspend    = ili2102_ts_early_suspend,
905     .resume     = ili2102_ts_late_resume,
906 #endif
907     .id_table   = ili2102_ts_id,
908     .driver = {
909         .name   = ILI2102_TS_NAME,
910     },
911 };
912
913 static int __devinit ili2102_ts_init(void)
914 {
915     return i2c_add_driver(&ili2102_ts_driver);
916 }
917
918 static void __exit ili2102_ts_exit(void)
919 {
920         i2c_del_driver(&ili2102_ts_driver);
921 }
922
923 module_init(ili2102_ts_init);
924 module_exit(ili2102_ts_exit);
925
926 MODULE_DESCRIPTION("ili2102 Touchscreen Driver");
927 MODULE_LICENSE("GPL");