Project

General

Profile

RE: I2C Slave Communication Hanging » sitronix_i2c_touch.c

Jared Kirschner, 07/18/2017 05:00 PM

 
1
/*
2
 * drivers/input/touchscreen/sitronix_i2c_touch.c
3
 *
4
 * Touchscreen driver for Sitronix (I2C bus)
5
 *
6
 * Copyright (C) 2011 Sitronix Technology Co., Ltd.
7
 *	Rudy Huang <rudy_huang@sitronix.com.tw>
8
 */
9
/*
10
 * This program is free software; you can redistribute it and/or modify it
11
 * under the terms of the GNU General Public License as published by the Free
12
 * Software Foundation; either version 2 of the License, or (at your option)
13
 * any later version.
14
 */
15
#include <linux/version.h>
16
#include <linux/module.h>
17
#include <linux/delay.h>
18
#ifdef CONFIG_HAS_EARLYSUSPEND
19
#include <linux/earlysuspend.h>
20
#endif // CONFIG_HAS_EARLYSUSPEND
21
#include "sitronix_i2c_touch.h"
22
#ifdef SITRONIX_FW_UPGRADE_FEATURE
23
#include <linux/cdev.h>
24
#include <asm/uaccess.h>
25
#ifdef SITRONIX_PERMISSION_THREAD
26
#include <linux/fs.h>
27
#include <linux/fcntl.h>
28
#include <linux/syscalls.h>
29
#endif // SITRONIX_PERMISSION_THREAD
30
#endif // SITRONIX_FW_UPGRADE_FEATURE
31
#include <linux/i2c.h>
32
#include <linux/input.h>
33
#ifdef SITRONIX_SUPPORT_MT_SLOT
34
#include <linux/input/mt.h>
35
#endif // SITRONIX_SUPPORT_MT_SLOT
36
#include <linux/interrupt.h>
37
#include <linux/slab.h> // to be compatible with linux kernel 3.2.15
38
#include <linux/gpio.h>
39
//#include <mach/gpio.h>
40
#ifdef SITRONIX_MONITOR_THREAD
41
#include <linux/kthread.h>
42
#endif // SITRONIX_MONITOR_THREAD
43
//#include <linux/sp_capture.h>
44

    
45

    
46
#include <linux/kthread.h>
47
#include <linux/path.h>
48
#include <linux/namei.h>
49
#include <linux/of_gpio.h>
50

    
51
#ifdef SITRONIX_MULTI_SLAVE_ADDR
52
#if defined(CONFIG_MACH_OMAP4_PANDA)
53
#include <plat/gpio.h>
54
#endif //defined(CONFIG_MACH_OMAP4_PANDA)
55
#endif // SITRONIX_MULTI_SLAVE_ADDR
56

    
57
#define DRIVER_AUTHOR           "Sitronix, Inc."
58
#define DRIVER_NAME             "sitronix"
59
#define DRIVER_DESC             "Sitronix I2C touch"
60
#define DRIVER_DATE             "20150827"
61
#define DRIVER_MAJOR            2
62
#define DRIVER_MINOR         	9
63
#define DRIVER_PATCHLEVEL       17
64
#define NAME_SIZE  20
65

    
66
MODULE_AUTHOR("Petitk Kao<petitk_kao@sitronix.com.tw>");
67
MODULE_DESCRIPTION("Sitronix I2C multitouch panels");
68
MODULE_LICENSE("GPL");
69
struct ctp_config_info{
70
	int input_type;
71
	char	*name;
72
	int  int_number;
73
};
74

    
75

    
76
struct ctp_config_info config_info = {
77
	.input_type = 1,
78
	.name = NULL,
79
	.int_number = 0,
80
};
81

    
82
#define CTP_IRQ_NUMBER          (config_info.int_number)
83
#define CTP_IRQ_MODE			(IRQF_TRIGGER_FALLING)
84
#define CTP_NAME		("sitronix")
85
//#define SCREEN_MAX_X	(screen_max_x)
86
#define SCREEN_MAX_Y	(screen_max_y)
87
#define PRESS_MAX		(255)
88

    
89
#if 0
90
static int screen_max_x = 0;
91
static int screen_max_y = 0;
92
static int revert_x_flag = 0;
93
static int revert_y_flag = 0;
94
static int exchange_x_y_flag = 0;
95
#endif
96
static __u32 twi_id = 0;
97
//static char irq_pin_name[8];
98

    
99

    
100
char sitronix_sensor_key_status = 0;
101
struct sitronix_sensor_key_t sitronix_sensor_key_array[] = {
102
	{KEY_BACK}, // bit 0
103
	{KEY_HOME}, // bit 1
104
	{KEY_MENU}, // bit 2
105
};
106
#ifdef SITRONIX_AA_KEY
107
char sitronix_aa_key_status = 0;
108

    
109
#ifdef SITRONIX_KEY_BOUNDARY_MANUAL_SPECIFY
110
#define SITRONIX_TOUCH_RESOLUTION_X 480 /* max of X value in display area */
111
#define SITRONIX_TOUCH_RESOLUTION_Y 854 /* max of Y value in display area */
112
#define SITRONIX_TOUCH_GAP_Y	10  /* Gap between bottom of display and top of touch key */
113
#define SITRONIX_TOUCH_MAX_Y 915  /* resolution of y axis of touch ic */
114
struct sitronix_AA_key sitronix_aa_key_array[] = {
115
	{15, 105, SITRONIX_TOUCH_RESOLUTION_Y + SITRONIX_TOUCH_GAP_Y, SITRONIX_TOUCH_MAX_Y, KEY_MENU}, /* MENU */
116
	{135, 225, SITRONIX_TOUCH_RESOLUTION_Y + SITRONIX_TOUCH_GAP_Y, SITRONIX_TOUCH_MAX_Y, KEY_HOME},
117
	{255, 345, SITRONIX_TOUCH_RESOLUTION_Y + SITRONIX_TOUCH_GAP_Y, SITRONIX_TOUCH_MAX_Y, KEY_BACK}, /* KEY_EXIT */
118
	{375, 465, SITRONIX_TOUCH_RESOLUTION_Y + SITRONIX_TOUCH_GAP_Y, SITRONIX_TOUCH_MAX_Y, KEY_SEARCH},
119
};
120
#else
121
#define SCALE_KEY_HIGH_Y 15
122
struct sitronix_AA_key sitronix_aa_key_array[] = {
123
	{0, 0, 0, 0, KEY_MENU}, /* MENU */
124
	{0, 0, 0, 0, KEY_HOME},
125
	{0, 0, 0, 0, KEY_BACK}, /* KEY_EXIT */
126
	{0, 0, 0, 0, KEY_SEARCH},
127
};
128
#endif // SITRONIX_KEY_BOUNDARY_MANUAL_SPECIFY
129
#endif // SITRONIX_AA_KEY
130
struct rst_pin_ctrl{
131
	struct i2c_client *client;
132
	struct pinctrl		*pinctrl;
133
	struct pinctrl_state	*rst_pin_ts_active;
134
	struct pinctrl_state	*rst_pin_ts_suspend;
135
	struct pinctrl_state	*rst_pin_ts_release;
136

    
137
};
138
struct sitronix_ts_data {
139
	struct i2c_client *client;
140
	struct input_dev *input_dev;
141
	struct input_dev *keyevent_input;
142
	int use_irq;
143
#ifndef SITRONIX_INT_POLLING_MODE
144
	struct work_struct  work;
145
#else
146
	struct delayed_work work;
147
#endif // SITRONIX_INT_POLLING_MODE
148
#ifdef CONFIG_HAS_EARLYSUSPEND
149
	struct early_suspend early_suspend;
150
#endif // CONFIG_HAS_EARLYSUSPEND
151
	uint8_t fw_revision[4];
152
	int resolution_x;
153
	int resolution_y;
154
	uint8_t max_touches;
155
	uint8_t touch_protocol_type;
156
	uint8_t pixel_length;
157
	uint8_t chip_id;
158
#ifdef SITRONIX_MONITOR_THREAD
159
	uint8_t enable_monitor_thread;
160
	uint8_t RawCRC_enabled;
161
	int (*sitronix_mt_fp)(void *);
162
#endif // SITRONIX_MONITOR_THREAD
163
	uint8_t Num_X;
164
	uint8_t Num_Y;
165
	uint8_t sensing_mode;
166
	int suspend_state;
167
	spinlock_t irq_lock;
168
	u8 irq_is_disable;
169
	int irq_gpio;
170
	u32 irq_gpio_flags;
171
	int reset_gpio;
172
	u32 reset_gpio_flags;
173
	//int irq;
174
#if (CTP_AP_SP_SYNC_WAY != CTP_AP_SP_SYNC_NONE)
175
	// gavin TOUCH_DRIVE_T sitronix_driver_ops;
176
#endif
177

    
178
#if(CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_GPIO)
179
	struct work_struct sitronix_io_sync_work;
180
#endif
181
};
182

    
183
#if (CTP_AP_SP_SYNC_WAY != CTP_AP_SP_SYNC_NONE)
184
static struct sitronix_ts_data *gSitronixPtr = NULL;
185
#endif
186

    
187
#if(CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_GPIO)
188
//static struct gpio_config sitronix_sync_io;
189
static struct timer_list ctp_sync_timer;
190
static int ctp_sync_io_last_status = 1;
191
static int ctp_sync_pulse_count = 0;
192
static spinlock_t ctp_sync_lock;
193
static struct workqueue_struct *sitronix_io_sync_workqueue = NULL;
194
#endif
195

    
196
static int i2cErrorCount = 0;
197

    
198
#ifdef SITRONIX_MONITOR_THREAD
199
static struct task_struct * SitronixMonitorThread = NULL;
200
static int gMonitorThreadSleepInterval = 300; // 0.3 sec
201
static atomic_t iMonitorThreadPostpone = ATOMIC_INIT(0);
202

    
203
static uint8_t PreCheckData[4] ;
204
static int StatusCheckCount = 0;
205
static int sitronix_ts_delay_monitor_thread_start = DELAY_MONITOR_THREAD_START_PROBE; 
206
#endif // SITRONIX_MONITOR_THREAD
207

    
208
#ifdef CONFIG_HAS_EARLYSUSPEND
209
static void sitronix_ts_early_suspend(struct early_suspend *h);
210
static void sitronix_ts_late_resume(struct early_suspend *h);
211
#endif // CONFIG_HAS_EARLYSUSPEND
212

    
213
static struct sitronix_ts_data sitronix_ts_gpts = {0};
214
static struct rst_pin_ctrl *rst_pin;
215
static atomic_t sitronix_ts_irq_on = ATOMIC_INIT(0);
216
static atomic_t sitronix_ts_in_int = ATOMIC_INIT(0);
217
#ifdef SITRONIX_SYSFS
218
static bool sitronix_ts_sysfs_created = false;
219
static bool sitronix_ts_sysfs_using = false;
220
#endif // SITRONIX_SYSFS
221

    
222
static void sitronix_ts_reset_ic(void);
223
//static int sitronix_ts_disable_int(struct sitronix_ts_data *ts, uint8_t value);
224

    
225
#ifdef ST_UPGRADE_FIRMWARE
226
extern int st_upgrade_fw(void);
227
#endif //ST_UPGRADE_FIRMWARE
228

    
229
#ifdef ST_TEST_RAW
230
extern int st_drv_test_raw();
231
#endif //ST_TEST_RAW
232

    
233
#ifdef SITRONIX_FW_UPGRADE_FEATURE
234
#ifdef SITRONIX_PERMISSION_THREAD
235
SYSCALL_DEFINE3(fchmodat, int, dfd, const char __user *, filename, mode_t, mode);
236
static struct task_struct * SitronixPermissionThread = NULL;
237
static int sitronix_ts_delay_permission_thread_start = 1000;
238

    
239
static int sitronix_ts_permission_thread(void *data)
240
{
241
	int ret = 0;
242
	int retry = 0;
243
	mm_segment_t fs = get_fs();
244
	set_fs(KERNEL_DS);
245

    
246
	DbgMsg("%s start\n", __FUNCTION__);
247
	do{
248
		DbgMsg("delay %d ms\n", sitronix_ts_delay_permission_thread_start);
249
		msleep(sitronix_ts_delay_permission_thread_start);
250
		ret = sys_fchmodat(AT_FDCWD, "/dev/"SITRONIX_I2C_TOUCH_DEV_NAME , 0666);
251
		if(ret < 0)
252
			printk("fail to execute sys_fchmodat, ret = %d\n", ret);
253
		if(retry++ > 10)
254
			break;
255
	}while(ret == -ENOENT);
256
	set_fs(fs);
257
	DbgMsg("%s exit\n", __FUNCTION__);
258
	return 0;
259
}
260
#endif // SITRONIX_PERMISSION_THREAD
261

    
262
int      sitronix_release(struct inode *, struct file *);
263
int      sitronix_open(struct inode *, struct file *);
264
ssize_t  sitronix_write(struct file *file, const char *buf, size_t count, loff_t *ppos);
265
ssize_t  sitronix_read(struct file *file, char *buf, size_t count, loff_t *ppos);
266
long	 sitronix_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
267
static struct cdev sitronix_cdev;
268
static struct class *sitronix_class;
269
static int sitronix_major = 0;
270

    
271
int  sitronix_open(struct inode *inode, struct file *filp)
272
{
273
	return 0;
274
}
275
EXPORT_SYMBOL(sitronix_open);
276

    
277
int  sitronix_release(struct inode *inode, struct file *filp)
278
{
279
	return 0;
280
}
281
EXPORT_SYMBOL(sitronix_release);
282

    
283
ssize_t  sitronix_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
284
{
285
	int ret;
286
	char *tmp;
287

    
288
	if(!(sitronix_ts_gpts.client))
289
		return -EIO;
290

    
291
	if (count > 8192)
292
		count = 8192;
293

    
294
	tmp = (char *)kmalloc(count,GFP_KERNEL);
295
	if (tmp==NULL)
296
		return -ENOMEM;
297
	if (copy_from_user(tmp,buf,count)) {
298
		kfree(tmp);
299
		return -EFAULT;
300
	}
301
	UpgradeMsg("writing %zu bytes.\n", count);
302

    
303
	ret = i2c_master_send(sitronix_ts_gpts.client, tmp, count);
304
	kfree(tmp);
305
	return ret;
306
}
307
EXPORT_SYMBOL(sitronix_write);
308

    
309
ssize_t  sitronix_read(struct file *file, char *buf, size_t count, loff_t *ppos)
310
{
311
	char *tmp;
312
	int ret;
313

    
314
	if(!(sitronix_ts_gpts.client))
315
		return -EIO;
316

    
317
	if (count > 8192)
318
		count = 8192;
319

    
320
	tmp = (char *)kmalloc(count,GFP_KERNEL);
321
	if (tmp==NULL)
322
		return -ENOMEM;
323

    
324
	UpgradeMsg("reading %zu bytes.\n", count);
325

    
326
	ret = i2c_master_recv(sitronix_ts_gpts.client, tmp, count);
327
	if (ret >= 0)
328
		ret = copy_to_user(buf,tmp,count)?-EFAULT:ret;
329
	kfree(tmp);
330
	return ret;
331
}
332
EXPORT_SYMBOL(sitronix_read);
333

    
334
static int sitronix_ts_resume(struct i2c_client *client);
335
static int sitronix_ts_suspend(struct i2c_client *client);
336
void sitronix_ts_reprobe(void);
337
long	 sitronix_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
338
{
339
	int err = 0;
340
	int retval = 0;
341
	uint8_t temp[4];
342

    
343
	if (!(sitronix_ts_gpts.client))
344
		return -EIO;
345

    
346
	if (_IOC_TYPE(cmd) != SMT_IOC_MAGIC) return -ENOTTY;
347
	if (_IOC_NR(cmd) > SMT_IOC_MAXNR) return -ENOTTY;
348
	if (_IOC_DIR(cmd) & _IOC_READ)
349
		err = !access_ok(VERIFY_WRITE,(void __user *)arg,\
350
				 _IOC_SIZE(cmd));
351
	else if (_IOC_DIR(cmd) & _IOC_WRITE)
352
		err =  !access_ok(VERIFY_READ,(void __user *)arg,\
353
				  _IOC_SIZE(cmd));
354
	if (err) return -EFAULT;
355

    
356
	switch(cmd) {
357
		case IOCTL_SMT_GET_DRIVER_REVISION:
358
			UpgradeMsg("IOCTL_SMT_GET_DRIVER_REVISION\n");
359
			temp[0] = SITRONIX_TOUCH_DRIVER_VERSION;
360
			if(copy_to_user((uint8_t __user *)arg, &temp[0], 1)){
361
				UpgradeMsg("fail to get driver version\n");
362
				retval = -EFAULT;
363
			}
364
			break;
365
		case IOCTL_SMT_GET_FW_REVISION:
366
			UpgradeMsg("IOCTL_SMT_GET_FW_REVISION\n");
367
			if(copy_to_user((uint8_t __user *)arg, &(sitronix_ts_gpts.fw_revision[0]), 4))
368
					retval = -EFAULT;
369
			break;
370
		case IOCTL_SMT_ENABLE_IRQ:
371
			UpgradeMsg("IOCTL_SMT_ENABLE_IRQ\n");
372
			//sitronix_ts_disable_int(&sitronix_ts_gpts, 0);
373
			if(!atomic_read(&sitronix_ts_in_int)){
374
				if(!atomic_read(&sitronix_ts_irq_on)){
375
					atomic_set(&sitronix_ts_irq_on, 1);
376
					enable_irq(sitronix_ts_gpts.client->irq);
377
#ifdef SITRONIX_MONITOR_THREAD
378
					if(sitronix_ts_gpts.enable_monitor_thread == 1){
379
						if(!SitronixMonitorThread){
380
							atomic_set(&iMonitorThreadPostpone,1);
381
							SitronixMonitorThread = kthread_run(sitronix_ts_gpts.sitronix_mt_fp,"Sitronix","Monitorthread");
382
							if(IS_ERR(SitronixMonitorThread))
383
								SitronixMonitorThread = NULL;
384
						}
385
					}
386
#endif // SITRONIX_MONITOR_THREAD
387
				}
388
			}
389
			break;
390
		case IOCTL_SMT_DISABLE_IRQ:
391
			UpgradeMsg("IOCTL_SMT_DISABLE_IRQ\n");
392
			//sitronix_ts_disable_int(&sitronix_ts_gpts, 1);
393
#ifndef SITRONIX_INT_POLLING_MODE
394
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)
395
//gavin			flush_work_sync(&sitronix_ts_gpts.work);
396
#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)
397
#else
398
			cancel_delayed_work_sync(&sitronix_ts_gpts.work);
399
#endif
400
			if(atomic_read(&sitronix_ts_irq_on)){
401
				atomic_set(&sitronix_ts_irq_on, 0);
402
				disable_irq_nosync(sitronix_ts_gpts.client->irq);
403
#ifdef SITRONIX_MONITOR_THREAD
404
				if(sitronix_ts_gpts.enable_monitor_thread == 1){
405
					if(SitronixMonitorThread){
406
						kthread_stop(SitronixMonitorThread);
407
						SitronixMonitorThread = NULL;
408
					}
409
				}
410
#endif // SITRONIX_MONITOR_THREAD
411
			}
412
			break;
413
		case IOCTL_SMT_RESUME:
414
			UpgradeMsg("IOCTL_SMT_RESUME\n");
415
			sitronix_ts_resume(sitronix_ts_gpts.client);
416
			break;
417
		case IOCTL_SMT_SUSPEND:
418
			UpgradeMsg("IOCTL_SMT_SUSPEND\n");
419
			sitronix_ts_suspend(sitronix_ts_gpts.client);
420
			break;
421
		case IOCTL_SMT_HW_RESET:
422
			UpgradeMsg("IOCTL_SMT_HW_RESET\n");
423
			sitronix_ts_reset_ic();
424
			break;
425
		case IOCTL_SMT_REPROBE:
426
			UpgradeMsg("IOCTL_SMT_REPROBE\n");
427
			sitronix_ts_reprobe();
428
			break;
429
#ifdef ST_TEST_RAW			
430
		case IOCTL_SMT_RAW_TEST:
431
			UpgradeMsg("IOCTL_SMT_RAW_TEST\n");
432
			retval = - st_drv_test_raw();			
433
			break;
434
#endif			
435
		default:
436
			retval = -ENOTTY;
437
	}
438

    
439
	return retval;
440
}
441
EXPORT_SYMBOL(sitronix_ioctl);
442
#endif // SITRONIX_FW_UPGRADE_FEATURE
443

    
444
static void sitronix_ts_reset_ic(void)
445
{
446
		printk("%s\n", __FUNCTION__);
447
#if 0
448
	struct sitronix_i2c_touch_platform_data *pdata;
449
	uint8_t rc;
450
	printk("%s,line=%d\n", __FUNCTION__,__LINE__);
451
	rc = gpio_request(pdata->reset_gpio, "reset_gpio");
452

    
453
	gpio_direction_output(pdata->reset_gpio, 0);
454
	msleep(3);
455
	gpio_direction_output(pdata->reset_gpio, 1);
456
	msleep(150);
457
#endif
458
#if 0
459
	printk("%s\n", __FUNCTION__);
460
	__gpio_set_value(config_info.wakeup_gpio.gpio, 0);
461
	msleep(3);
462
	__gpio_set_value(config_info.wakeup_gpio.gpio, 1);
463
	msleep(SITRONIX_TS_CHANGE_MODE_DELAY);
464
#endif
465
}
466

    
467
static int sitronix_i2c_read_bytes(struct i2c_client *client, u8 addr, u8 *rxbuf, int len)
468
{
469
	int ret = 0;
470
	u8 txbuf = addr;
471
	//printk("%s,line=%d\n", __FUNCTION__,__LINE__);
472
#if defined(SITRONIX_I2C_COMBINED_MESSAGE)
473
	struct i2c_msg msg[2] = {
474
		{
475
			.addr = client->addr,
476
			.flags = 0,
477
			.len = 1,
478
			.buf = &txbuf,
479
		},
480
		{
481
			.addr = client->addr,
482
			.flags = I2C_M_RD,
483
			.len = len,
484
			.buf = rxbuf,
485
		},
486
	};
487
#endif // defined(SITRONIX_I2C_COMBINED_MESSAGE)
488

    
489
	if(rxbuf == NULL)
490
		return -1;
491
#if defined(SITRONIX_I2C_COMBINED_MESSAGE)
492
	ret = i2c_transfer(client->adapter, &msg[0], 2);
493
#elif defined(SITRONIX_I2C_SINGLE_MESSAGE)
494
	ret = i2c_master_send(client, &txbuf, 1);
495
	if (ret < 0){
496
		printk("write 0x%x error (%d)\n", addr, ret);
497
		return ret;
498
	}
499
	ret = i2c_master_recv(client, rxbuf, len);
500
#endif // defined(SITRONIX_I2C_COMBINED_MESSAGE)
501
	if (ret < 0){
502
		DbgMsg("read 0x%x error (%d)\n", addr, ret);
503
		return ret;
504
	}
505
	return 0;
506
}
507

    
508
static int sitronix_i2c_write_bytes(struct i2c_client *client, u8 *txbuf, int len)
509
{
510
	int ret = 0;
511
	//printk("%s,line=%d\n", __FUNCTION__,__LINE__);
512
#if defined(SITRONIX_I2C_COMBINED_MESSAGE)
513
	struct i2c_msg msg[1] = {
514
		{
515
			.addr = client->addr,
516
			.flags = 0,
517
			.len = len,
518
			.buf = txbuf,
519
		},
520
	};
521
#endif // defined(SITRONIX_I2C_COMBINED_MESSAGE)
522

    
523
	if(txbuf == NULL)
524
		return -1;
525
#if defined(SITRONIX_I2C_COMBINED_MESSAGE)
526
	ret = i2c_transfer(client->adapter, &msg[0], 1);
527
#elif defined(SITRONIX_I2C_SINGLE_MESSAGE)
528
	ret = i2c_master_send(client, txbuf, len);
529
#endif // defined(SITRONIX_I2C_COMBINED_MESSAGE)
530
	if (ret < 0){
531
		printk("write 0x%x error (%d)\n", *txbuf, ret);
532
		return ret;
533
	}
534
	return 0;
535
}
536

    
537
static int sitronix_get_fw_revision(struct sitronix_ts_data *ts)
538
{
539
	int ret = 0;
540
	uint8_t buffer[4];
541
	printk("%s,line=%d\n", __FUNCTION__,__LINE__);
542

    
543
	ret = sitronix_i2c_read_bytes(ts->client, FIRMWARE_REVISION_3, buffer, 4);
544
	if (ret < 0){
545
		printk("read fw revision error (%d)\n", ret);
546
		return ret;
547
	}else{
548
		memcpy(ts->fw_revision, buffer, 4);
549
		printk("fw revision (hex) = %x %x %x %x\n", buffer[0], buffer[1], buffer[2], buffer[3]);
550
	}
551
	return 0;
552
}
553
static int sitronix_get_max_touches(struct sitronix_ts_data *ts)
554
{
555
	int ret = 0;
556
	uint8_t buffer[1];
557
	printk("%s,line=%d\n", __FUNCTION__,__LINE__);
558

    
559
	ret = sitronix_i2c_read_bytes(ts->client, MAX_NUM_TOUCHES, buffer, 1);
560
	if (ret < 0){
561
		printk("read max touches error (%d)\n", ret);
562
		return ret;
563
	}else{
564
		ts->max_touches = buffer[0];
565
		if (ts->max_touches > SITRONIX_MAX_SUPPORTED_POINT)
566
			ts->max_touches = SITRONIX_MAX_SUPPORTED_POINT;
567
		printk("max touches = %d \n",ts->max_touches);
568
	}
569
	return 0;
570
}
571

    
572
static int sitronix_get_protocol_type(struct sitronix_ts_data *ts)
573
{
574
	int ret = 0;
575
	uint8_t buffer[1];
576
	printk("%s,line=%d\n", __FUNCTION__,__LINE__);
577

    
578
	if(ts->chip_id <= 3){
579
		ret = sitronix_i2c_read_bytes(ts->client, I2C_PROTOCOL, buffer, 1);
580
		if (ret < 0){
581
			printk("read i2c protocol error (%d)\n", ret);
582
			return ret;
583
		}else{
584
			ts->touch_protocol_type = buffer[0] & I2C_PROTOCOL_BMSK;
585
			printk("i2c protocol = %d \n", ts->touch_protocol_type);
586
			ts->sensing_mode = (buffer[0] & (ONE_D_SENSING_CONTROL_BMSK << ONE_D_SENSING_CONTROL_SHFT)) >> ONE_D_SENSING_CONTROL_SHFT;
587
			printk("sensing mode = %d \n", ts->sensing_mode);
588
		}
589
	}else{
590
		ts->touch_protocol_type = SITRONIX_A_TYPE;
591
		printk("i2c protocol = %d \n", ts->touch_protocol_type);
592
		ret = sitronix_i2c_read_bytes(ts->client, 0xf0, buffer, 1);
593
		if (ret < 0){
594
			printk("read sensing mode error (%d)\n", ret);
595
			return ret;
596
		}else{
597
			ts->sensing_mode = (buffer[0] & ONE_D_SENSING_CONTROL_BMSK);
598
			printk("sensing mode = %d \n", ts->sensing_mode);
599
		}
600
	}
601
	return 0;
602
}
603

    
604
static int sitronix_get_resolution(struct sitronix_ts_data *ts)
605
{
606
	/*
607
	int ret = 0;
608
	uint8_t buffer[4];
609
	int newResX = 800;
610
	int newResY = 480;
611
	
612
	buffer[0] = XY_RESOLUTION_HIGH;
613
	buffer[1] = (newResX>>8)<<4 | (newResY>>8);
614
	buffer[2] = (newResX&0xFF);
615
	buffer[3] = (newResY&0xFF);
616
	
617
	ret = sitronix_i2c_write_bytes(ts->client, buffer, 4);
618
	if (ret < 0){
619
		printk("set resolution error (%d)\n", ret);
620
		return ret;
621
	}else{
622
		ts->resolution_x = newResX;
623
		ts->resolution_y = newResY;
624
		printk("resolution = %d x %d\n", ts->resolution_x, ts->resolution_y);
625
	}
626
	*/
627
	int ret = 0;
628
	uint8_t buffer[4];
629
		printk("%s,line=%d\n", __FUNCTION__,__LINE__);
630
	ret = sitronix_i2c_read_bytes(ts->client, XY_RESOLUTION_HIGH, buffer, 3);
631
	if (ret < 0){
632
		printk("read resolution error (%d)\n", ret);
633
		return ret;
634
	}else{
635
		ts->resolution_x = ((buffer[0] & (X_RES_H_BMSK << X_RES_H_SHFT)) << 4) | buffer[1];
636
		ts->resolution_y = ((buffer[0] & Y_RES_H_BMSK) << 8) | buffer[2];
637
		printk("resolution = %d x %d\n", ts->resolution_x, ts->resolution_y);
638
	}
639
	return 0;
640
	
641
}
642

    
643
static int sitronix_ts_get_CHIP_ID(struct sitronix_ts_data *ts)
644
{
645
	int ret = 0;
646
	uint8_t buffer[3];
647
	printk("%s,line=%d\n", __FUNCTION__,__LINE__);
648

    
649
	DbgMsg("%s\n", __FUNCTION__);
650

    
651
	ret = sitronix_i2c_read_bytes(ts->client, CHIP_ID, buffer, 3);
652
	if (ret < 0){
653
		printk("read Chip ID error (%d)\n", ret);
654
		return ret;
655
	}else{
656
		if(buffer[0] == 0){
657
			if(buffer[1] + buffer[2] > 32)
658
				ts->chip_id = 2;
659
			else
660
				ts->chip_id = 0;
661
		}else
662
			ts->chip_id = buffer[0];
663
		ts->Num_X = buffer[1];
664
		ts->Num_Y = buffer[2];
665
		printk("Chip ID = %d\n", ts->chip_id);
666
		printk("Num_X = %d\n", ts->Num_X);
667
		printk("Num_Y = %d\n", ts->Num_Y);
668
	}
669

    
670
	return 0;
671
}
672

    
673
static int sitronix_ts_set_powerdown_bit(struct sitronix_ts_data *ts, int value)
674
{
675
	int ret = 0;
676
	uint8_t buffer[2];
677
	printk("%s,line=%d\n", __FUNCTION__,__LINE__);
678

    
679
	DbgMsg("%s, value = %d\n", __FUNCTION__, value);
680
	ret = sitronix_i2c_read_bytes(ts->client, DEVICE_CONTROL_REG, buffer, 1);
681
	if (ret < 0){
682
		printk("read device control status error (%d)\n", ret);
683
		return ret;
684
	}else{
685
		DbgMsg("dev status = %d \n", buffer[0]);
686
	}
687

    
688
	if(value == 0)
689
		buffer[1] = buffer[0] & 0xfd;
690
	else
691
		buffer[1] = buffer[0] | 0x2;
692

    
693
	buffer[0] = DEVICE_CONTROL_REG;
694
	ret = sitronix_i2c_write_bytes(ts->client, buffer, 2);
695
	if (ret < 0){
696
		printk("write power down error (%d)\n", ret);
697
		return ret;
698
	}
699

    
700
	return 0;
701
}
702

    
703
#if 0
704
static int sitronix_ts_disable_int(struct sitronix_ts_data *ts, uint8_t value)
705
{
706
	int ret = 0;
707
	uint8_t buffer[2];
708
	sitronix_i2c_protocol_map *i2c_ptcl;
709
	printk("%s,line=%d\n", __FUNCTION__,__LINE__);
710

    
711
	DbgMsg("%s, value = %d\n", __FUNCTION__, value);
712
	i2c_ptcl = (ts->chip_id > 3)? &sitronix_i2c_ptcl_v2 : &sitronix_i2c_ptcl_v1;
713

    
714
	ret = sitronix_i2c_read_bytes(ts->client, i2c_ptcl->dis_coord_flag.offset, buffer, 1);
715
	if (ret < 0){
716
		printk("read disable coord. flag error (%d)\n", ret);
717
		return ret;
718
	}
719

    
720
	buffer[1] = buffer[0] & ~(i2c_ptcl->dis_coord_flag.bmsk << i2c_ptcl->dis_coord_flag.shft);
721
	buffer[1] |= value;
722

    
723
	buffer[0] = i2c_ptcl->dis_coord_flag.offset;
724
	ret = sitronix_i2c_write_bytes(ts->client, buffer, 2);
725
	if (ret < 0){
726
		printk("write disable coord. flag error (%d)\n", ret);
727
		return ret;
728
	}
729
	return 0;
730
}
731
#endif
732
static int sitronix_ts_get_touch_info(struct sitronix_ts_data *ts)
733
{
734
	int ret = 0;
735
		printk("%s,line=%d\n", __FUNCTION__,__LINE__);
736
	ret = sitronix_get_resolution(ts);
737
	if(ret < 0)
738
		return ret;
739
	ret = sitronix_ts_get_CHIP_ID(ts);
740
	if(ret < 0)
741
		return ret;
742
	ret = sitronix_get_fw_revision(ts);
743
	if(ret < 0)
744
		return ret;
745
	ret = sitronix_get_protocol_type(ts);
746
	if(ret < 0)
747
		return ret;
748
	ret = sitronix_get_max_touches(ts);
749
	if(ret < 0)
750
		return ret;
751

    
752
	if((ts->fw_revision[0] == 0) && (ts->fw_revision[1] == 0)){
753
		if(ts->touch_protocol_type == SITRONIX_RESERVED_TYPE_0){
754
			ts->touch_protocol_type = SITRONIX_B_TYPE;
755
			printk("i2c protocol (revised) = %d \n", ts->touch_protocol_type);
756
		}
757
	}
758
	if(ts->touch_protocol_type == SITRONIX_A_TYPE)
759
		ts->pixel_length = PIXEL_DATA_LENGTH_A;
760
	else if(ts->touch_protocol_type == SITRONIX_B_TYPE){
761
		ts->pixel_length = PIXEL_DATA_LENGTH_B;
762
		ts->max_touches = 2;
763
		printk("max touches (revised) = %d \n", ts->max_touches);
764
	}
765

    
766
#ifdef SITRONIX_MONITOR_THREAD
767
	ts->RawCRC_enabled = 0;
768
	if(ts->chip_id > 3){
769
		ts->enable_monitor_thread = 1;
770
		ts->RawCRC_enabled = 1;
771
	}else if(ts->chip_id == 3){
772
		ts->enable_monitor_thread = 1;		
773
		//if(((ts->fw_revision[2] << 8) | ts->fw_revision[3]) >= (9 << 8 | 3))
774
		if(((ts->fw_revision[2] << 8) | ts->fw_revision[3]) >= (6 << 8 | 3))
775
			ts->RawCRC_enabled = 1;
776
	}else
777
		ts->enable_monitor_thread = 0;
778
#endif // SITRONIX_MONITOR_THREAD
779

    
780
	return 0;
781
}
782

    
783
static int sitronix_ts_get_device_status(struct i2c_client *client, uint8_t *err_code, uint8_t *dev_status)
784
{
785
	int ret = 0;
786
	uint8_t buffer[8];
787
	printk("%s,line=%d\n",__FUNCTION__,__LINE__);
788
	DbgMsg("%s\n", __FUNCTION__);
789
	ret = sitronix_i2c_read_bytes(client, STATUS_REG, buffer, 8);
790
	if (ret < 0){
791
		printk("read status reg error (%d)\n", ret);
792
		return ret;
793
	}else{
794
		printk("status reg = %d \n", buffer[0]);
795
	}
796

    
797
	*err_code = (buffer[0] & 0xf0) >> 4;
798
	*dev_status = buffer[0] & 0xf;
799

    
800
	return 0;
801
}
802

    
803
#ifdef SITRONIX_IDENTIFY_ID
804
static int sitronix_ts_Enhance_Function_control(struct sitronix_ts_data *ts, uint8_t *value)
805
{
806
	int ret = 0;
807
	uint8_t buffer[1];
808

    
809
	DbgMsg("%s\n", __FUNCTION__);
810
	ret = sitronix_i2c_read_bytes(ts->client, 0xF0, buffer, 1);
811
	if (ret < 0){
812
		printk("read Enhance Functions status error (%d)\n", ret);
813
		return ret;
814
	}else{
815
		DbgMsg("Enhance Functions status = %d \n", buffer[0]);
816
	}
817

    
818
	*value = buffer[0] & 0x4;
819

    
820
	return 0;
821
}
822

    
823
static int sitronix_ts_FW_Bank_Select(struct sitronix_ts_data *ts, uint8_t value)
824
{
825
	int ret = 0;
826
	uint8_t buffer[2];
827

    
828
	DbgMsg("%s\n", __FUNCTION__);
829
	ret = sitronix_i2c_read_bytes(ts->client, 0xF1, buffer, 1);
830
	if (ret < 0){
831
		printk("read FW Bank Select status error (%d)\n", ret);
832
		return ret;
833
	}else{
834
		DbgMsg("FW Bank Select status = %d \n", buffer[0]);
835
	}
836

    
837
	buffer[1] = ((buffer[0] & 0xfc) | value);
838
	buffer[0] = 0xF1;
839
	ret = sitronix_i2c_write_bytes(ts->client, buffer, 2);
840
	if (ret < 0){
841
		printk("send FW Bank Select command error (%d)\n", ret);
842
		return ret;
843
	}
844

    
845
	return 0;
846
}
847

    
848
static int sitronix_get_id_info(struct sitronix_ts_data *ts, uint8_t *id_info)
849
{
850
	int ret = 0;
851
	uint8_t buffer[4];
852

    
853
	ret = sitronix_i2c_read_bytes(ts->client, 0x0C, buffer, 4);
854
	if (ret < 0){
855
		printk("read id info error (%d)\n", ret);
856
		return ret;
857
	}else{
858
		memcpy(id_info, buffer, 4);
859
	}
860
	return 0;
861
}
862

    
863
static int sitronix_ts_identify(struct sitronix_ts_data *ts)
864
{
865
	int ret = 0;
866
	uint8_t id[4];
867
	uint8_t Enhance_Function = 0;
868

    
869
	ret = sitronix_ts_FW_Bank_Select(ts, 1);
870
	if(ret < 0)
871
		return ret;
872
	ret = sitronix_ts_Enhance_Function_control(ts, &Enhance_Function);
873
	if(ret < 0)
874
		return ret;
875
	if(Enhance_Function == 0x4){
876
		ret = sitronix_get_id_info(ts, &id[0]);
877
		if(ret < 0)
878
			return ret;
879
		printk("id (hex) = %x %x %x %x\n", id[0], id[1], id[2], id[3]);
880
		if((id[0] == 1)&&(id[1] == 2)&&(id[2] == 0xb)&&(id[3] == 1)){
881
			return 0;
882
		}else{
883
			printk("Error: It is not Sitronix IC\n");
884
			return -1;
885
		}
886
	}else{
887
		printk("Error: Can not get ID of Sitronix IC\n");
888
		return -1;
889
	}
890
}
891
#endif // SITRONIX_IDENTIFY_ID
892

    
893
#ifdef SITRONIX_MONITOR_THREAD
894
static int sitronix_set_raw_data_type(struct sitronix_ts_data *ts)
895
{
896
	int ret = 0;
897
	uint8_t buffer[2] = {0};
898

    
899
	ret = sitronix_i2c_read_bytes(ts->client, DEVICE_CONTROL_REG, buffer, 1);
900
	if (ret < 0){
901
		DbgMsg("read DEVICE_CONTROL_REG error (%d)\n", ret);
902
		return ret;
903
	}else{
904
		DbgMsg("read DEVICE_CONTROL_REG status = %d \n", buffer[0]);
905
	}
906
	if(ts->sensing_mode == SENSING_BOTH_NOT){
907
		buffer[1] = ((buffer[0] & 0xf3) | (0x01 << 2));
908
	}else{
909
		buffer[1] = (buffer[0] & 0xf3);
910
	}
911
	buffer[0] = DEVICE_CONTROL_REG;
912
	ret = sitronix_i2c_write_bytes(ts->client, buffer, 2);
913
	if (ret < 0){
914
		DbgMsg("write DEVICE_CONTROL_REG error (%d)\n", ret);
915
		return ret;
916
	}
917
	return 0;
918
}
919

    
920
static int sitronix_ts_monitor_thread(void *data)
921
{
922
	int ret = 0;
923
	uint8_t buffer[4] = { 0, 0, 0, 0 };
924
	int result = 0;
925
	int once = 1;
926
	uint8_t raw_data_ofs = 0;
927

    
928
	DbgMsg("%s:\n", __FUNCTION__);
929

    
930
	printk("delay %d ms\n", sitronix_ts_delay_monitor_thread_start);
931
	msleep(sitronix_ts_delay_monitor_thread_start);
932
	while(!kthread_should_stop()){
933
		DbgMsg("%s:\n", "Sitronix_ts_monitoring 2222");
934
		if(atomic_read(&iMonitorThreadPostpone)){
935
		 		atomic_set(&iMonitorThreadPostpone,0);
936
		}else{
937
			if(once == 1){
938
				ret = sitronix_set_raw_data_type(&sitronix_ts_gpts);
939
				if (ret < 0)
940
					goto exit_i2c_invalid;
941

    
942
				if((sitronix_ts_gpts.sensing_mode == SENSING_BOTH) || (sitronix_ts_gpts.sensing_mode == SENSING_X_ONLY)){
943
					raw_data_ofs = 0x40;
944
				}else if(sitronix_ts_gpts.sensing_mode == SENSING_Y_ONLY){
945
					raw_data_ofs = 0x40 + sitronix_ts_gpts.Num_X * 2; 
946
				}else{
947
					raw_data_ofs = 0x40;
948
				}
949

    
950
				once = 0;
951
			}
952
			if(raw_data_ofs != 0x40){
953
				ret = sitronix_i2c_read_bytes(sitronix_ts_gpts.client, 0x40, buffer, 1);
954
				if (ret < 0){
955
					DbgMsg("read raw data error (%d)\n", ret);
956
					result = 0;
957
					goto exit_i2c_invalid;
958
				}
959
			}
960
			ret = sitronix_i2c_read_bytes(sitronix_ts_gpts.client, raw_data_ofs, buffer, 4);
961
			if (ret < 0){
962
				DbgMsg("read raw data error (%d)\n", ret);
963
				result = 0;
964
				goto exit_i2c_invalid;
965
			}else{
966
				DbgMsg("%dD data h%x-%x = 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", (sitronix_ts_gpts.sensing_mode == SENSING_BOTH_NOT ? 2:1), raw_data_ofs, raw_data_ofs + 3, buffer[0], buffer[1], buffer[2], buffer[3]);
967
				//printk("%dD data h%x-%x = 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", (sitronix_ts_gpts.sensing_mode == SENSING_BOTH_NOT ? 2:1), raw_data_ofs, raw_data_ofs + 3, buffer[0], buffer[1], buffer[2], buffer[3]);
968
				result = 1;
969
				if ((PreCheckData[0] == buffer[0]) && (PreCheckData[1] == buffer[1]) && 
970
				(PreCheckData[2] == buffer[2]) && (PreCheckData[3] == buffer[3]))
971
					StatusCheckCount ++;
972
				else
973
					StatusCheckCount =0;
974
				PreCheckData[0] = buffer[0];
975
				PreCheckData[1] = buffer[1];
976
				PreCheckData[2] = buffer[2];
977
				PreCheckData[3] = buffer[3];
978
				if (3 <= StatusCheckCount){
979
					DbgMsg("IC Status doesn't update! \n");
980
					result = -1;
981
					StatusCheckCount = 0;
982
				}
983
			}
984
			if (-1 == result){
985
				printk("Chip abnormal, reset it!\n");
986
				sitronix_ts_reset_ic();
987
		   		i2cErrorCount = 0;
988
		   		StatusCheckCount = 0;
989
				if(sitronix_ts_gpts.RawCRC_enabled == 0){
990
					ret = sitronix_set_raw_data_type(&sitronix_ts_gpts);
991
					if (ret < 0)
992
						goto exit_i2c_invalid;
993
				}
994
			}
995
exit_i2c_invalid:
996
			if(0 == result){
997
				i2cErrorCount ++;
998
				if ((2 <= i2cErrorCount)){
999
					printk("I2C abnormal, reset it!\n");
1000
					sitronix_ts_reset_ic();
1001
					if(sitronix_ts_gpts.RawCRC_enabled == 0)
1002
						sitronix_set_raw_data_type(&sitronix_ts_gpts);
1003
		    			i2cErrorCount = 0;
1004
		    			StatusCheckCount = 0;
1005
		    		}
1006
		    	}else
1007
		    		i2cErrorCount = 0;
1008
		}
1009
		msleep(gMonitorThreadSleepInterval);
1010
	}
1011
	DbgMsg("%s exit\n", __FUNCTION__);
1012
	return 0;
1013
}
1014

    
1015
static int sitronix_ts_monitor_thread_v2(void *data)
1016
{
1017
	int ret = 0;
1018
	uint8_t buffer[1] = {0};
1019
	int result = 0;
1020

    
1021
	DbgMsg("%s:\n", __FUNCTION__);
1022

    
1023
	printk("delay %d ms\n", sitronix_ts_delay_monitor_thread_start);	
1024
	msleep(sitronix_ts_delay_monitor_thread_start);
1025
	while(!kthread_should_stop()){
1026
		DbgMsg("%s:\n", "Sitronix_ts_monitoring");
1027
		if(atomic_read(&iMonitorThreadPostpone)){
1028
		 		atomic_set(&iMonitorThreadPostpone,0);
1029
		}else{
1030
			ret = sitronix_i2c_read_bytes(sitronix_ts_gpts.client, 0xA, buffer, 1);
1031
			if (ret < 0){
1032
				DbgMsg("read Raw CRC error (%d)\n", ret);
1033
				result = 0;
1034
				goto exit_i2c_invalid;
1035
			}else{
1036
				DbgMsg("Raw CRC = 0x%02x\n", buffer[0]);
1037
				//printk("Raw CRC = 0x%02x\n", buffer[0]);
1038
				result = 1;
1039
				if (PreCheckData[0] == buffer[0])
1040
					StatusCheckCount ++;
1041
				else
1042
					StatusCheckCount =0;
1043
				PreCheckData[0] = buffer[0];
1044
				if (3 <= StatusCheckCount){
1045
					DbgMsg("IC Status doesn't update! \n");
1046
					result = -1;
1047
					StatusCheckCount = 0;
1048
				}
1049
			}
1050
			if (-1 == result){
1051
				printk("Chip abnormal, reset it!\n");
1052
				sitronix_ts_reset_ic();
1053
		   		i2cErrorCount = 0;
1054
		   		StatusCheckCount = 0;
1055
			}
1056
exit_i2c_invalid:
1057
			if(0 == result){
1058
				i2cErrorCount ++;
1059
				if ((2 <= i2cErrorCount)){
1060
					printk("I2C abnormal, reset it!\n");
1061
					sitronix_ts_reset_ic();
1062
		    			i2cErrorCount = 0;
1063
		    			StatusCheckCount = 0;
1064
		    		}
1065
		    	}else
1066
		    		i2cErrorCount = 0;
1067
		}
1068
		msleep(gMonitorThreadSleepInterval);
1069
	}
1070
	DbgMsg("%s exit\n", __FUNCTION__);
1071
	return 0;
1072
}
1073
#endif // SITRONIX_MONITOR_THREAD
1074

    
1075
static inline void sitronix_ts_pen_down(struct input_dev *input_dev, int id, u16 x, u16 y)
1076
{
1077
	//printk("%s,line=%d\n", __FUNCTION__,__LINE__);
1078

    
1079
#ifdef SITRONIX_SUPPORT_MT_SLOT
1080
	input_mt_slot(input_dev, id);
1081
	input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, true);
1082
#ifndef SITRONIX_SWAP_XY
1083
	input_report_abs(input_dev,  ABS_MT_POSITION_X, x);
1084
	input_report_abs(input_dev,  ABS_MT_POSITION_Y, y);
1085
#else
1086
	input_report_abs(input_dev,  ABS_MT_POSITION_X, y);
1087
	input_report_abs(input_dev,  ABS_MT_POSITION_Y, x);
1088
#endif // SITRONIX_SWAP_XY
1089
#else
1090
	input_report_abs(input_dev,  ABS_MT_TRACKING_ID, id);
1091
#ifndef SITRONIX_SWAP_XY
1092
	input_report_abs(input_dev,  ABS_MT_POSITION_X, x);
1093
	input_report_abs(input_dev,  ABS_MT_POSITION_Y, y);
1094
#else
1095
	input_report_abs(input_dev,  ABS_MT_POSITION_X, y);
1096
	input_report_abs(input_dev,  ABS_MT_POSITION_Y, x);
1097
#endif // SITRONIX_SWAP_XY
1098
	input_report_abs(input_dev,  ABS_MT_TOUCH_MAJOR, 10);
1099
	input_report_abs(input_dev,  ABS_MT_WIDTH_MAJOR, 10);
1100
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
1101
	input_report_abs(input_dev, ABS_MT_PRESSURE, 10);
1102
#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
1103
	input_mt_sync(input_dev);
1104
#endif // SITRONIX_SUPPORT_MT_SLOT
1105
	DbgMsg("[%d](%d, %d)+\n", id, x, y);
1106
}
1107

    
1108
static inline void sitronix_ts_pen_up(struct input_dev *input_dev, int id)
1109
{
1110
	//printk("%s,line=%d\n", __FUNCTION__,__LINE__);
1111

    
1112
#ifdef SITRONIX_SUPPORT_MT_SLOT
1113
	input_mt_slot(input_dev, id);
1114
	input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, false);
1115
#else // for android 2.1
1116
	input_report_abs(input_dev,  ABS_MT_TRACKING_ID, id);
1117
	input_report_abs(input_dev,  ABS_MT_TOUCH_MAJOR, 0);
1118
	input_report_abs(input_dev,  ABS_MT_WIDTH_MAJOR, 0);
1119
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
1120
	input_report_abs(input_dev, ABS_MT_PRESSURE, 0);
1121
#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
1122
#endif // SITRONIX_SUPPORT_MT_SLOT
1123
	DbgMsg("[%d]-\n", id);
1124
}
1125

    
1126
static inline void sitronix_ts_handle_sensor_key(struct input_dev *input_dev, struct sitronix_sensor_key_t *key_array, char *pre_key_status, char cur_key_status, int key_count)
1127
{
1128
	
1129
	int i = 0;
1130
	for(i = 0; i < key_count; i++){
1131
		if(cur_key_status & (1 << i)){
1132
			DbgMsg("sensor key[%d] down\n", i);
1133
			//printk("kkk down now key %d \n",cur_key_status);
1134
			input_report_key(input_dev, key_array[i].code, 1);
1135

    
1136
			input_sync(input_dev);
1137
		}else{
1138
			if(*pre_key_status & (1 << i)){
1139
				//printk("kkk up now key %d \n",cur_key_status);
1140
				DbgMsg("sensor key[%d] up\n", i);
1141
				input_report_key(input_dev, key_array[i].code, 0);				
1142
				input_sync(input_dev);
1143
			}
1144
		}
1145
	}
1146
	*pre_key_status = cur_key_status;
1147
}
1148

    
1149
#ifdef SITRONIX_AA_KEY
1150
static inline void sitronix_ts_handle_aa_key(struct input_dev *input_dev, struct sitronix_AA_key *key_array, char *pre_key_status, char cur_key_status, int key_count)
1151
{
1152
	
1153
	int i = 0;
1154
	for(i = 0; i < key_count; i++){
1155
		if(cur_key_status & (1 << i)){
1156
			DbgMsg("aa key[%d] down\n", i);
1157
			input_report_key(input_dev, key_array[i].code, 1);
1158
			input_sync(input_dev);
1159
		}else{
1160
			if(*pre_key_status & (1 << i)){
1161
				DbgMsg("aa key[%d] up\n", i);
1162
				input_report_key(input_dev, key_array[i].code, 0);
1163
				input_sync(input_dev);
1164
			}
1165
		}
1166
	}
1167
	*pre_key_status = cur_key_status;
1168
}
1169
#endif // SITRONIX_AA_KEY
1170

    
1171
#ifdef SITRONIX_GESTURE
1172

    
1173
static void sitronix_gesture_func(struct input_dev *input_dev,int id)
1174
{
1175
	if(id == G_PALM)
1176
	{
1177
		printk("Gesture for Palm to suspend \n");
1178
		input_report_key(input_dev,KEY_POWER,1);// KEY_LEFT, 1);
1179
		input_sync(input_dev);
1180
		input_report_key(input_dev, KEY_POWER, 0);
1181
		input_sync(input_dev);				
1182
	}
1183
}
1184

    
1185

    
1186

    
1187
#endif
1188

    
1189
#ifdef SITRONIX_SMART_WAKE_UP
1190
static int swk_flag = 0;
1191
static void sitronix_swk_set_swk_enable(struct sitronix_ts_data *ts)
1192
{
1193
	
1194
	int ret = 0;
1195
	unsigned char buffer[2] = {0};
1196
	ret = sitronix_i2c_read_bytes(ts->client, MISC_CONTROL, buffer, 1);
1197
	if(ret == 0)
1198
	{
1199
		buffer[1] = buffer[0] | 0x80;
1200
		buffer[0] = MISC_CONTROL;
1201
		sitronix_i2c_write_bytes(ts->client, buffer, 2);
1202
				
1203
		msleep(500);
1204
	}
1205
	
1206
	
1207
}
1208
static void sitronix_swk_func(struct input_dev *input_dev, int id)
1209
{
1210
	if(id == DOUBLE_CLICK || id == SINGLE_CLICK)
1211
	{
1212
		if(swk_flag == 1)
1213
		{
1214
			//do wake up here
1215
			printk("Smark Wake Up by Double click! \n");
1216
			input_report_key(input_dev, KEY_POWER, 1);
1217
			input_sync(input_dev);
1218
			input_report_key(input_dev, KEY_POWER, 0);
1219
			input_sync(input_dev);
1220
			swk_flag = 0;
1221
		}
1222
	}
1223
	else if(id == TOP_TO_DOWN_SLIDE)
1224
	{
1225
		printk("Smark Wake Up by TOP_TO_DOWN_SLIDE \n");
1226
		//do wake up here		
1227
	}
1228
	else if(id == DOWN_TO_UP_SLIDE)
1229
	{
1230
		printk("Smark Wake Up by DOWN_TO_UP_SLIDE \n");
1231
		//do wake up here
1232
			}
1233
	else if(id == LEFT_TO_RIGHT_SLIDE)
1234
	{
1235
		printk("Smark Wake Up by LEFT_TO_RIGHT_SLIDE \n");
1236
		//do wake up here
1237
	}
1238
	else if(id == RIGHT_TO_LEFT_SLIDE)
1239
	{
1240
		printk("Smark Wake Up by RIGHT_TO_LEFT_SLIDE \n");
1241
		//do wake up here
1242
	} 
1243
}
1244
#endif	//SITRONIX_SMART_WAKE_UP
1245

    
1246
static void sitronix_ts_work_func(struct work_struct *work)
1247
{
1248
	int i;
1249
#ifdef SITRONIX_AA_KEY
1250
	int j;
1251
	char aa_key_status = 0;
1252
#endif // SITRONIX_AA_KEY
1253
	int ret;
1254

    
1255

    
1256
#ifndef SITRONIX_INT_POLLING_MODE
1257
	struct sitronix_ts_data *ts = container_of(work, struct sitronix_ts_data, work);
1258
#else
1259
	struct sitronix_ts_data *ts = container_of(to_delayed_work(work), struct sitronix_ts_data, work);
1260
#endif // SITRONIX_INT_POLLING_MODE
1261
	u16 x, y;
1262
	uint8_t buffer[1+ SITRONIX_MAX_SUPPORTED_POINT * PIXEL_DATA_LENGTH_A] = {0};
1263
	uint8_t PixelCount = 0;
1264

    
1265
	DbgMsg("%s\n",  __FUNCTION__);
1266
	//printk("%s,line=%d\n,use_irq=%d,irq_num=%d,",__FUNCTION__,__LINE__,ts->use_irq,ts->client->irq);
1267
	atomic_set(&sitronix_ts_in_int, 1);
1268

    
1269
#ifdef SITRONIX_GESTURE
1270
	if(!ts->suspend_state)
1271
	{
1272
		ret = sitronix_i2c_read_bytes(ts->client, FINGERS, buffer, 1);
1273
		printk("SITRONIX_GESTURE ret:%d ,value:0x%X\n",ret,buffer[0]);
1274
		buffer[0] &= 0xF;		
1275
		if((ret == 0 && buffer[0] == G_PALM))
1276
		{
1277
			sitronix_gesture_func(ts->keyevent_input,buffer[0]);
1278
                   	goto exit_invalid_data;
1279
		}
1280
	}
1281
#endif		
1282

    
1283
#ifdef 	SITRONIX_SMART_WAKE_UP	
1284
	if(ts->suspend_state){
1285
//2.9.15 petitk add 
1286
		ret = sitronix_i2c_read_bytes(ts->client, SMART_WAKE_UP_REG, buffer, 1);
1287
		if(ret ==0 && buffer[0] !=SWK_NO)
1288
		{			
1289
			sitronix_swk_func(ts->keyevent_input, buffer[0]);
1290
			goto exit_invalid_data;
1291
		}				
1292
	}
1293
#endif	//SITRONIX_SMART_WAKE_UP	
1294

    
1295
	ret = sitronix_i2c_read_bytes(ts->client, KEYS_REG, buffer, 1 + ts->max_touches * ts->pixel_length);
1296
	if (ret < 0) {
1297
		printk("read finger error (%d)\n", ret);
1298
   		i2cErrorCount++;
1299
		goto exit_invalid_data;
1300
	}
1301

    
1302
	for(i = 0; i < ts->max_touches; i++){
1303
		if(buffer[1 + i * ts->pixel_length + XY_COORD_H] & 0x80){			
1304
			
1305
			x = (u16)(buffer[1 + i * ts->pixel_length + XY_COORD_H] & 0x70) << 4 | buffer[1 + i * ts->pixel_length + X_COORD_L];
1306
			y = (u16)(buffer[1 + i * ts->pixel_length + XY_COORD_H] & 0x07) << 8 | buffer[1 + i * ts->pixel_length + Y_COORD_L];
1307
			//printk("%s:line=%d,x=%d,y=%d\n",__FUNCTION__,__LINE__,x,y);
1308
#ifndef SITRONIX_AA_KEY
1309
			PixelCount++;
1310
			//if (SpToAp_CheckState() == SP_STATE_IN_GETPIN)
1311
		//		SpToAp_InsertTpPixel(TP_PIXEL_TYPE_DOWN, i, x, y);
1312
			//else
1313
				sitronix_ts_pen_down(ts->input_dev, i, x, y);
1314
#else
1315
#ifdef SITRONIX_KEY_BOUNDARY_MANUAL_SPECIFY
1316
			if(y < SITRONIX_TOUCH_RESOLUTION_Y){
1317
#else
1318
			if(y < (ts->resolution_y - ts->resolution_y / SCALE_KEY_HIGH_Y)){
1319
#endif // SITRONIX_KEY_BOUNDARY_MANUAL_SPECIFY
1320
				PixelCount++;
1321
				sitronix_ts_pen_down(ts->input_dev, i, x, y);
1322
				//DbgMsg("AREA_DISPLAY\n");
1323
			}else{
1324
				for(j = 0; j < (sizeof(sitronix_aa_key_array)/sizeof(struct sitronix_AA_key)); j++){
1325
					if((x >= sitronix_aa_key_array[j].x_low) &&
1326
					(x <= sitronix_aa_key_array[j].x_high) &&
1327
					(y >= sitronix_aa_key_array[j].y_low) &&
1328
					(y <= sitronix_aa_key_array[j].y_high)){
1329
						aa_key_status |= (1 << j);
1330
						//DbgMsg("AREA_KEY [%d]\n", j);
1331
						break;
1332
					}
1333
				}
1334
			}
1335
#endif // SITRONIX_AA_KEY
1336
		}else{
1337
			//sitronix_ts_pen_up(ts->input_dev, i);
1338
		}
1339
	}
1340
	if(PixelCount == 0)
1341
	{
1342
	//	if (SpToAp_CheckState() == SP_STATE_IN_GETPIN)
1343
		//	SpToAp_InsertTpPixel(TP_PIXEL_TYPE_UP,0, 0, 0);
1344
	//	else
1345
			sitronix_ts_pen_up(ts->input_dev, 0);
1346
	}
1347
		
1348
	
1349
	input_report_key(ts->input_dev, BTN_TOUCH, PixelCount > 0);
1350
	input_sync(ts->input_dev);	
1351

    
1352
	sitronix_ts_handle_sensor_key(ts->keyevent_input, sitronix_sensor_key_array, &sitronix_sensor_key_status, buffer[0], (sizeof(sitronix_sensor_key_array)/sizeof(struct sitronix_sensor_key_t)));
1353
#ifdef SITRONIX_AA_KEY
1354
	sitronix_ts_handle_aa_key(ts->keyevent_input, sitronix_aa_key_array, &sitronix_aa_key_status, aa_key_status, (sizeof(sitronix_aa_key_array)/sizeof(struct sitronix_AA_key)));
1355
#endif // SITRONIX_AA_KEY
1356

    
1357
exit_invalid_data:
1358
#ifdef SITRONIX_INT_POLLING_MODE
1359
	if(PixelCount > 0){
1360
#ifdef SITRONIX_MONITOR_THREAD
1361
		if(ts->enable_monitor_thread == 1){
1362
			atomic_set(&iMonitorThreadPostpone,1);
1363
		}
1364
#endif // SITRONIX_MONITOR_THREAD
1365
		schedule_delayed_work(&ts->work, msecs_to_jiffies(INT_POLLING_MODE_INTERVAL));
1366
	}else{
1367
#ifdef CONFIG_HARDIRQS_SW_RESEND
1368
		printk("Please not set HARDIRQS_SW_RESEND to prevent kernel from sending SW IRQ\n");
1369
#endif // CONFIG_HARDIRQS_SW_RESEND
1370
		if (ts->use_irq){
1371
			atomic_set(&sitronix_ts_irq_on, 1);
1372
			enable_irq(ts->client->irq);
1373
		}
1374
	}
1375
#endif // SITRONIX_INT_POLLING_MODE
1376
#if defined(SITRONIX_LEVEL_TRIGGERED)
1377
	if (ts->use_irq){
1378
		atomic_set(&sitronix_ts_irq_on, 1);
1379
		enable_irq(ts->client->irq);
1380
	}
1381
#endif // defined(SITRONIX_LEVEL_TRIGGERED)
1382
	if ((2 <= i2cErrorCount)){
1383
		printk("I2C abnormal in work_func(), reset it!\n");
1384
		sitronix_ts_reset_ic();
1385
   		i2cErrorCount = 0;
1386
#ifdef SITRONIX_MONITOR_THREAD
1387
		if(ts->enable_monitor_thread == 1){
1388
			StatusCheckCount = 0;
1389
			if(ts->RawCRC_enabled == 0)
1390
				sitronix_set_raw_data_type(&sitronix_ts_gpts);
1391
		}
1392
#endif // SITRONIX_MONITOR_THREAD
1393
	}
1394
	atomic_set(&sitronix_ts_in_int, 0);
1395
	
1396
}
1397

    
1398
static irqreturn_t sitronix_ts_irq_handler(int irq, void *dev_id)
1399
{
1400
	struct sitronix_ts_data *ts = dev_id;
1401
	printk("%s,line=%d\n",__FUNCTION__,__LINE__);
1402
	DbgMsg("%s\n", __FUNCTION__);
1403
	atomic_set(&sitronix_ts_in_int, 1);
1404
#if defined(SITRONIX_LEVEL_TRIGGERED) || defined(SITRONIX_INT_POLLING_MODE)
1405
	atomic_set(&sitronix_ts_irq_on, 0);
1406
	disable_irq_nosync(ts->client->irq);
1407
#endif // defined(SITRONIX_LEVEL_TRIGGERED) || defined(SITRONIX_INT_POLLING_MODE)
1408
#ifdef SITRONIX_MONITOR_THREAD
1409
	if(ts->enable_monitor_thread == 1){
1410
		atomic_set(&iMonitorThreadPostpone,1);
1411
	}
1412
#endif // SITRONIX_MONITOR_THREAD
1413
#ifndef SITRONIX_INT_POLLING_MODE
1414
	schedule_work(&ts->work);
1415
#else
1416
	schedule_delayed_work(&ts->work, msecs_to_jiffies(0));
1417
#endif // SITRONIX_INT_POLLING_MODE
1418
	return IRQ_HANDLED;
1419
}
1420

    
1421
#ifdef SITRONIX_SYSFS
1422
static ssize_t sitronix_ts_reprobe_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
1423
{
1424
	printk("sitronix_ts_reprobe_store!!!!!\n");
1425
	sitronix_ts_sysfs_using = true;
1426
	sitronix_ts_reprobe();
1427
	sitronix_ts_sysfs_using = false;
1428
	return count;
1429
}
1430

    
1431
static DEVICE_ATTR(reprobe, 0220, NULL, sitronix_ts_reprobe_store);
1432

    
1433
static struct attribute *sitronix_ts_attrs_v0[] = {
1434
	&dev_attr_reprobe.attr,
1435
	NULL,
1436
};
1437

    
1438
static struct attribute_group sitronix_ts_attr_group_v0 = {
1439
	.name = "sitronix_ts_attrs",
1440
	.attrs = sitronix_ts_attrs_v0,
1441
};
1442

    
1443
static int sitronix_ts_create_sysfs_entry(struct i2c_client *client)
1444
{
1445
	int err;
1446

    
1447
	err = sysfs_create_group(&(client->dev.kobj), &sitronix_ts_attr_group_v0);
1448
	if (err) {
1449
		dev_warn(&client->dev, "%s(%u): sysfs_create_group() failed!\n", __FUNCTION__, __LINE__);
1450
	}
1451
	return err;
1452
}
1453

    
1454
static void sitronix_ts_destroy_sysfs_entry(struct i2c_client *client)
1455
{
1456
	sysfs_remove_group(&(client->dev.kobj), &sitronix_ts_attr_group_v0);
1457

    
1458
	return;
1459
}
1460
#endif // SITRONIX_SYSFS
1461

    
1462
/*******************************************************
1463
Function:
1464
	Disable IRQ Function.
1465

    
1466
Input:
1467
	data:	i2c client private struct.
1468
	
1469
Output:
1470
	None.
1471
*******************************************************/
1472
void sitronix_irq_disable(struct sitronix_ts_data *data)
1473
{
1474
        unsigned long irqflags;
1475
		int ret;
1476

    
1477
        DbgMsg("%s ---start!---\n", __func__);
1478
        spin_lock_irqsave(&data->irq_lock, irqflags);
1479
        if (!data->irq_is_disable) {
1480
               data->irq_is_disable = 1; 
1481
               //ret = input_set_int_enable(&(config_info.input_type), 0);
1482
			   if (ret < 0)		          
1483
			   	  ErrorMsg("%s irq disable failed\n", __func__);
1484
        }
1485
        spin_unlock_irqrestore(&data->irq_lock, irqflags);
1486
}
1487

    
1488
/*******************************************************
1489
Function:
1490
	Disable IRQ Function.
1491

    
1492
Input:
1493
	data:	i2c client private struct.
1494
	
1495
Output:
1496
	None.
1497
*******************************************************/
1498
void sitronix_irq_enable(struct sitronix_ts_data *data)
1499
{
1500
        unsigned long irqflags = 0;
1501
		int ret;
1502

    
1503
        DbgMsg("%s ---start!---\n", __func__);
1504
    
1505
        spin_lock_irqsave(&data->irq_lock, irqflags);
1506
        if (data->irq_is_disable) {
1507
                data->irq_is_disable = 0; 
1508
                //ret = input_set_int_enable(&(config_info.input_type), 1);	
1509
				if (ret < 0)		            
1510
					ErrorMsg("%s irq enable failed\n", __func__);
1511
        }
1512
        spin_unlock_irqrestore(&data->irq_lock, irqflags);
1513
}
1514

    
1515

    
1516
#if (CTP_AP_SP_SYNC_WAY != CTP_AP_SP_SYNC_NONE)
1517
int sitronix_touch_reinit(void)
1518
{
1519
	if(gSitronixPtr == NULL)
1520
		return -1;
1521
	 printk("%s\n",__func__);
1522
	 sitronix_irq_enable(gSitronixPtr);
1523
	 return 0;
1524
}
1525

    
1526
int sitronix_touch_uninit(void)
1527
{
1528
	if(gSitronixPtr == NULL)
1529
		return -1;
1530
	 printk("%s\n",__func__);
1531
	 sitronix_irq_disable(gSitronixPtr);	
1532
	 while(cancel_work_sync(&gSitronixPtr->work));
1533
        //flush_workqueue(sitronix_wq);
1534
	return 0;
1535
}
1536
#endif
1537

    
1538
#if  (CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_GPIO)
1539
#define CTP_SYNC_IO_OUT	1
1540
#define CTP_SYNC_IO_IN		0
1541
#if 0
1542

    
1543
static int ap_sp_sync_gpio(struct gpio_config gpio, int direction, int value)
1544
{
1545
	//int status = 0;
1546
	int ret = 0;
1547

    
1548
	if(0 != gpio_request(gpio.gpio, "ctp_sync_io")) {
1549
		ErrorMsg("ap_sp_sync_gpio gpio_request is failed\n");
1550
		return -1;
1551
	}
1552

    
1553
	if(CTP_SYNC_IO_OUT == direction)
1554
	{
1555
		if (0 != gpio_direction_output(gpio.gpio, value)) {
1556
			ErrorMsg(KERN_ERR "ap_sp_sync_gpio gpio set err!");
1557
			return -1;
1558
		}
1559
	}
1560
	else if(CTP_SYNC_IO_IN == direction)
1561
	{
1562
		if (0 != gpio_direction_input(gpio.gpio)) {
1563
			ErrorMsg(KERN_ERR "ap_sp_sync_gpio gpio set err!");
1564
			return -1;
1565
		}
1566
		ret =  __gpio_get_value(gpio.gpio);
1567
	}
1568

    
1569
	gpio_free(gpio.gpio);
1570

    
1571
	return ret;
1572
}
1573
#endif
1574

    
1575
static void sitronix_io_sync_work_func(struct work_struct *work)
1576
{
1577
	int pin_val = 0xff;
1578
	unsigned long irqflags;
1579
	printk("%s:line=%d,",__FUNCTION__,__LINE__);
1580
	// pin_val = ap_sp_sync_gpio(sitronix_sync_io,CTP_SYNC_IO_IN,0);
1581
	 //printk("P:%d\n",pin_val);
1582
	 if(0 == pin_val)
1583
	 {
1584
	 	spin_lock_irqsave(&ctp_sync_lock,irqflags);
1585
	 	ctp_sync_pulse_count++;
1586
	 	if(1 == ctp_sync_io_last_status)
1587
	 	{
1588
	 		ctp_sync_io_last_status = 0;
1589
	 	}
1590
		spin_unlock_irqrestore(&ctp_sync_lock,irqflags);
1591
		
1592
	 }
1593
	else if(1 == pin_val)
1594
	{
1595
		if(!ctp_sync_io_last_status)
1596
		{
1597
			printk("C:%d\n",ctp_sync_pulse_count);
1598
			if((ctp_sync_pulse_count > 1) && (ctp_sync_pulse_count < 4)) //tp switch to sp siginal
1599
			{
1600
				printk("U\n");
1601
				sitronix_touch_uninit();//\B4˺\AF\CA\FD\BB\E1\D7\E8\C8\FB\D0\E8Ҫ\D4ٿ\AAһ\B8\F6\B9\A4\D7\F7\B6\D3\C1\D0?
1602
			}
1603
			else if((ctp_sync_pulse_count > 3) && (ctp_sync_pulse_count < 6)) //tp switch to ap siginal
1604
			{
1605
				printk("R\n");
1606
				sitronix_touch_reinit();
1607
			}
1608
		}
1609
		spin_lock_irqsave(&ctp_sync_lock,irqflags);
1610
		ctp_sync_io_last_status = 1;
1611
		ctp_sync_pulse_count = 0;
1612
		spin_unlock_irqrestore(&ctp_sync_lock,irqflags);
1613
		
1614
	}
1615

    
1616
}
1617

    
1618
void ctp_sync_timer_func(unsigned long data)
1619
{
1620
	printk("%s:line=%d,",__FUNCTION__,__LINE__);
1621

    
1622
	queue_work(sitronix_io_sync_workqueue, &gSitronixPtr->sitronix_io_sync_work);
1623
	
1624
	mod_timer(&ctp_sync_timer,jiffies+HZ/50);  
1625
}
1626
#endif
1627

    
1628
#define SITRONIX_COORDS_ARR_SIZE	4
1629
#define MAX_BUTTONS		4
1630
#define PROP_NAME_SIZE		24
1631

    
1632

    
1633
static int sitronix_ts_get_dt_coords(struct device *dev, char *name,
1634
				   struct sitronix_i2c_touch_platform_data *pdata)
1635
{
1636
	struct property *prop;
1637
	struct device_node *np = dev->of_node;
1638
	int rc;
1639
	u32 coords[SITRONIX_COORDS_ARR_SIZE];
1640
	printk("%s,%d\n",__FUNCTION__,__LINE__);
1641

    
1642
	prop = of_find_property(np, name, NULL);
1643
	if (!prop)
1644
		return -EINVAL;
1645
	if (!prop->value)
1646
		return -ENODATA;
1647

    
1648
	rc = of_property_read_u32_array(np, name, coords,
1649
					SITRONIX_COORDS_ARR_SIZE);
1650
	if (rc && (rc != -EINVAL)) {
1651
		dev_err(dev, "Unable to read %s\n", name);
1652
		return rc;
1653
	}
1654

    
1655
	if (!strcmp(name, "sitronix,panel-coords")) {
1656
		pdata->panel_minx = coords[0];
1657
		pdata->panel_miny = coords[1];
1658
		pdata->panel_maxx = coords[2];
1659
		pdata->panel_maxy = coords[3];
1660
		printk("%s:panel-coords,minx=%d,miny=%d,maxx=%d,maxy=%d\n",__FUNCTION__,\
1661
				pdata->panel_minx,pdata->panel_miny,pdata->panel_maxx,pdata->panel_maxy);
1662
	} else if (!strcmp(name, "sitronix,display-coords")) {
1663
		pdata->x_min = coords[0];
1664
		pdata->y_min = coords[1];
1665
		pdata->x_max = coords[2];
1666
		pdata->y_max = coords[3];
1667
		printk("%s:display-coords,minx=%d,miny=%d,maxx=%d,maxy=%d\n",__FUNCTION__,\
1668
				pdata->panel_minx,pdata->panel_miny,pdata->panel_maxx,pdata->panel_maxy);
1669
	} else {
1670
		dev_err(dev, "unsupported property %s\n", name);
1671
		return -EINVAL;
1672
	}
1673

    
1674
	return 0;
1675
}
1676
#if 1
1677

    
1678
static int sitronix_parse_dt(struct device *dev,
1679
			   struct sitronix_i2c_touch_platform_data *pdata)
1680
{
1681
	int rc;
1682
	struct device_node *np = dev->of_node;
1683
	struct property *prop;
1684
	u32 temp_val, num_buttons;
1685
	u32 button_map[MAX_BUTTONS];
1686
	//char prop_name[PROP_NAME_SIZE];
1687
	//int i, read_cfg_num;
1688

    
1689
	printk("%s,%d\n",__FUNCTION__,__LINE__);
1690

    
1691
	pdata->name = "sitronix";
1692
	rc = sitronix_ts_get_dt_coords(dev, "sitronix,panel-coords", pdata);
1693
	if (rc && (rc != -EINVAL))
1694
		return rc;
1695

    
1696
	rc = sitronix_ts_get_dt_coords(dev, "sitronix,display-coords", pdata);
1697
	if (rc)
1698
		return rc;
1699
	
1700
	pdata->i2c_pull_up = of_property_read_bool(np, "sitronix,i2c-pull-up");
1701

    
1702
	pdata->no_force_update = of_property_read_bool(np,
1703
						       "sitronix,no-force-update");
1704

    
1705
	pdata->enable_power_off = of_property_read_bool(np,
1706
							"sitronix,enable-power-off");
1707
	pdata->fw_vkey_support = of_property_read_bool(np,
1708
						       "sitronix,fw-vkey-support");
1709
	/* reset, irq gpio info */
1710
	pdata->reset_gpio = of_get_named_gpio_flags(np, "sitronix,reset-gpios",
1711
						    0,
1712
						    &pdata->reset_gpio_flags);
1713
	if (pdata->reset_gpio < 0)
1714
		return pdata->reset_gpio;
1715

    
1716
	pdata->irq_gpio = of_get_named_gpio_flags(np, "sitronix,interrupt-gpios",
1717
						  0, &pdata->irq_gpio_flags);
1718
	printk("%s,pdata->irq_gpio=%d\n",__FUNCTION__,pdata->irq_gpio);
1719
	if (pdata->irq_gpio < 0)
1720
		return pdata->irq_gpio;
1721

    
1722
	rc = of_property_read_string(np, "sitronix,product-id",
1723
				     &pdata->product_id);
1724
	if (rc && (rc != -EINVAL)) {
1725
		dev_err(dev, "Failed to parse product_id.");
1726
		return -EINVAL;
1727
	}
1728

    
1729
	rc = of_property_read_u32(np, "sitronix,num_max_touches",
1730
				  &pdata->num_max_touches);
1731
	if (rc && (rc != -EINVAL)) {
1732
		dev_err(dev, "Failed to parse num_max_touches.");
1733
		return -EINVAL;
1734
	}
1735

    
1736
	rc = of_property_read_u32(np, "sitronix,soft_rst_dly",
1737
				  &pdata->soft_rst_dly);
1738
	if (rc && (rc != -EINVAL)) {
1739
		dev_err(dev, "Failed to parse soft reset delay.");
1740
		return -EINVAL;
1741
	}
1742

    
1743
	rc = of_property_read_string(np, "sitronix,fw_name", &pdata->fw_name);
1744
	if (rc && (rc != -EINVAL)) {
1745
		dev_err(dev, "Failed to parse firmware name.\n");
1746
		return -EINVAL;
1747
	}
1748

    
1749
	prop = of_find_property(np, "sitronix,button-map", NULL);
1750
	if (prop) {
1751
		num_buttons = prop->length / sizeof(temp_val);
1752
		if (num_buttons > MAX_BUTTONS)
1753
			return -EINVAL;
1754

    
1755
		rc = of_property_read_u32_array(np,
1756
						"sitronix,button-map", button_map,
1757
						num_buttons);
1758
		if (rc) {
1759
			dev_err(dev, "Unable to read key codes\n");
1760
			return rc;
1761
		}
1762
	}
1763
#if 0
1764
	read_cfg_num = 0;
1765
	for (i = 0; i < GOODIX_MAX_CFG_GROUP; i++) {
1766
		snprintf(prop_name, sizeof(prop_name), "sitronix,cfg-data%d", i);
1767
		prop = of_find_property(np, prop_name,
1768
					&pdata->config_data_len[i]);
1769
		if (!prop || !prop->value) {
1770
			pdata->config_data_len[i] = 0;
1771
			pdata->config_data[i] = NULL;
1772
			continue;
1773
		}
1774
		pdata->config_data[i] = devm_kzalloc(dev,
1775
						     GTP_CONFIG_MAX_LENGTH +
1776
						     GTP_ADDR_LENGTH,
1777
						     GFP_KERNEL);
1778
		if (!pdata->config_data[i]) {
1779
			dev_err(dev,
1780
				"Not enough memory for panel config data %d\n",
1781
				i);
1782
			return -ENOMEM;
1783
		}
1784
		pdata->config_data[i][0] = GTP_REG_CONFIG_DATA >> 8;
1785
		pdata->config_data[i][1] = GTP_REG_CONFIG_DATA & 0xff;
1786
		memcpy(&pdata->config_data[i][GTP_ADDR_LENGTH],
1787
		       prop->value, pdata->config_data_len[i]);
1788
		read_cfg_num++;
1789
	}
1790
	dev_info(dev, "%d config data read from device tree.\n", read_cfg_num);
1791
#endif
1792
	return 0;
1793
}
1794
#endif
1795

    
1796

    
1797
#if 0//power
1798
static int sitronix_power_on(struct goodix_ts_data *ts)
1799
{
1800

    
1801
	if (ts->power_on) {
1802
		dev_info(&ts->client->dev,
1803
				"Device already power on\n");
1804
		return 0;
1805
	}
1806
	ts->power_on = true;	//[DEBUG] Modify TCT-NB Tianhongwei 05/05/2014 power off ic when sleepin if the gesture is disabled
1807
	return 0;
1808
}
1809

    
1810
static int goodix_power_off(struct goodix_ts_data *ts)
1811
{
1812
	if (!ts->power_on) {
1813
		dev_info(&ts->client->dev,
1814
				"Device already power off\n");
1815
		return 0;
1816
	}
1817
	ts->power_on = false;
1818
	return 0;
1819
}
1820

    
1821

    
1822
static int sitronix_power_init(struct goodix_ts_data *ts)
1823
{
1824

    
1825
#if 0
1826
	ts->vdd = regulator_get(&ts->client->dev, "vdd");
1827
	if (IS_ERR(ts->vdd)) {
1828
		ret = PTR_ERR(ts->vdd);
1829
		dev_info(&ts->client->dev,
1830
			"Regulator get failed vdd ret=%d\n", ret);
1831
	}
1832

    
1833
	ts->vcc_i2c = regulator_get(&ts->client->dev, "vcc_i2c");/*[BUGFIX]-MOD  by TCTNB.XQJ,09/18/2013,FR-514195,GT915 tp MIATA development,i2c,only for compil*/
1834
	if (IS_ERR(ts->vcc_i2c)) {
1835
		ret = PTR_ERR(ts->vcc_i2c);
1836
		dev_info(&ts->client->dev,
1837
			"Regulator get failed vcc_i2c ret=%d\n", ret);
1838
	}
1839
#endif
1840

    
1841
	return 0;
1842
}
1843

    
1844

    
1845
static int sitronix_power_deinit(struct goodix_ts_data *ts)
1846
{
1847
	regulator_put(ts->vdd);
1848
	regulator_put(ts->vcc_i2c);
1849
	return 0;
1850
}
1851
#endif
1852

    
1853

    
1854

    
1855
#if 0
1856
static int sit_pinctrl_init(struct rst_pin_ctrl *akm)
1857
{
1858
	struct i2c_client *client = akm->client;;
1859

    
1860
	printk("##gavin %s,line=%d\n",__FUNCTION__,__LINE__);
1861
	akm->pinctrl = devm_pinctrl_get(&client->dev);
1862

    
1863
	if (IS_ERR_OR_NULL(akm->pinctrl)) {
1864
		dev_err(&client->dev, "Failed to get pinctrl\n");
1865
		return PTR_ERR(akm->pinctrl);
1866
	}
1867
	//pmx_ts_active","pmx_ts_suspend","pmx_ts_release";
1868
	akm->rst_pin_ts_active = pinctrl_lookup_state(akm->pinctrl, "pmx_ts_active");
1869
	if (IS_ERR_OR_NULL(akm->rst_pin_ts_active)) {
1870
		dev_err(&client->dev, "Failed to look up rst_pin_ts_active state\n");
1871
		return PTR_ERR(akm->rst_pin_ts_active);
1872
	}
1873

    
1874
	akm->rst_pin_ts_suspend = pinctrl_lookup_state(akm->pinctrl, "pmx_ts_suspend");
1875
	if (IS_ERR_OR_NULL(akm->rst_pin_ts_suspend)) {
1876
		dev_err(&client->dev, "Failed to look up rst_pin_ts_suspend state\n");
1877
		return PTR_ERR(akm->rst_pin_ts_suspend);
1878
	}
1879

    
1880
	akm->rst_pin_ts_release = pinctrl_lookup_state(akm->pinctrl, "pmx_ts_release");
1881
	if (IS_ERR_OR_NULL(akm->rst_pin_ts_release)) {
1882
		dev_err(&client->dev, "Failed to look up rst_pin_ts_release state\n");
1883
		return PTR_ERR(akm->rst_pin_ts_release);
1884
	}
1885

    
1886
	return 0;
1887
}
1888

    
1889

    
1890
#endif
1891
static int sitronix_ts_probe(struct i2c_client *client, const struct i2c_device_id *id)
1892
{
1893
	int i;
1894
	int ret = 0;
1895
	uint16_t max_x = 0, max_y = 0;
1896
	uint8_t err_code = 0;
1897
	uint8_t dev_status = 0;
1898
	uint8_t rc;
1899
	struct sitronix_i2c_touch_platform_data *pdata;
1900
	//struct sitronix_ts_data *sitronix_ts_gpts;
1901

    
1902
	printk("%s,%d\n",__FUNCTION__,__LINE__);
1903

    
1904
	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) 
1905
	{
1906
		ret = -ENODEV;
1907
		goto err_check_functionality_failed;
1908
	}
1909

    
1910
	pdata = devm_kzalloc(&client->dev,
1911
						 sizeof(struct sitronix_i2c_touch_platform_data),
1912
						 GFP_KERNEL);
1913
	if (!pdata) 
1914
	{
1915
		dev_err(&client->dev,"GTP Failed to allocate memory for pdata\n");
1916
		return -ENOMEM;
1917
	}
1918
	ret = sitronix_parse_dt(&client->dev, pdata);
1919
	if (ret)
1920
		return ret;
1921

    
1922

    
1923
	sitronix_ts_gpts.irq_gpio = pdata->irq_gpio;
1924
	sitronix_ts_gpts.reset_gpio = pdata->reset_gpio;
1925
#if 0//for touchscreen reset
1926
	sitronix_ts_reset_ic();
1927
#else
1928
	printk("%s,line=%d,pdata->reset_gpio =%d\n", __FUNCTION__,__LINE__,pdata->reset_gpio);
1929
	rc = gpio_request(pdata->reset_gpio, "reset_gpio");
1930
	//if (rc)
1931
		//ret rc;
1932
	gpio_direction_output(sitronix_ts_gpts.reset_gpio, 0);
1933
    	msleep(3);
1934
	gpio_direction_output(sitronix_ts_gpts.reset_gpio, 1);
1935
	msleep(150);
1936
	#if 0//for reset pin test
1937
	for(i = 0;i<10;i++)
1938
	{
1939
	    gpio_direction_output(sitronix_ts_gpts.reset_gpio, 0);
1940
	    usleep(3);
1941
		gpio_direction_output(sitronix_ts_gpts.reset_gpio, 1);
1942
		usleep(3);
1943
	}
1944
	#endif 
1945
	//rc = gpio_request(pdata->reset_gpio, "reset_gpio");
1946
	//if (rc)
1947
		//ret rc;
1948
	//gpio_direction_output(pdata->reset_gpio, 0);
1949
	//msleep(3);
1950
	//gpio_direction_output(pdata->reset_gpio, 1);
1951
	//msleep(150);
1952
#endif
1953

    
1954
	sitronix_ts_gpts.client = client;
1955
	#ifdef ST_UPGRADE_FIRMWARE
1956
	#ifdef ST_FIREWARE_FILE
1957
		kthread_run(st_upgrade_fw, "Sitronix", "sitronix_update");
1958
	#else
1959
		st_upgrade_fw();
1960
	#endif //ST_FIREWARE_FILE
1961
		 
1962
	#endif //ST_UPGRADE_FIRMWARE
1963
		
1964

    
1965
	if(((ret = sitronix_ts_get_device_status(client, &err_code, &dev_status)) < 0) || (dev_status == 0x6) || ((err_code == 0x8)&&(dev_status == 0x0))){
1966
		if((dev_status == 0x6) || ((err_code == 0x8)&&(dev_status == 0x0))){
1967
			sitronix_ts_gpts.client = client;
1968
		}
1969
		ret = -EPERM;
1970
		goto err_device_info_error;
1971
	}
1972
	sitronix_ts_gpts.client = client;
1973
	sitronix_ts_gpts.suspend_state = 0;
1974
	i2c_set_clientdata(client, &sitronix_ts_gpts);
1975
	if((ret = sitronix_ts_get_touch_info(&sitronix_ts_gpts)) < 0)
1976
		goto err_device_info_error;
1977

    
1978

    
1979
#if 0//for touchscreen irq
1980
printk("%s:pdata->irq_gpio=%d\n",__FUNCTION__,pdata->irq_gpio);
1981
client->irq=pdata->irq_gpio;
1982
printk("gpio num:%d, irq num:%d\n",CTP_IRQ_NUMBER,client->irq);
1983
#else
1984

    
1985
#if 0
1986
ret = gpio_request(pdata->irq_gpio, "GTP_INT_IRQ");
1987
if (ret < 0) 
1988
{
1989
	GTP_ERROR("Failed to request GPIO:%d, ERRNO:%d",
1990
			  (s32) pdata->irq_gpio, ret);
1991
	ret = -ENODEV;
1992
} 
1993
else 
1994
{
1995
	printk("%s:pdata->irq_gpio=%d\n",__FUNCTION__,pdata->irq_gpio);
1996
	ret = gpio_direction_input(pdata->irq_gpio);
1997
	if (ret < 0)
1998
		gpio_free(pdata->irq_gpio);
1999
	client->irq = gpio_to_irq(pdata->irq_gpio);
2000
}
2001
printk("gpio num:%d, irq num:%d\n",CTP_IRQ_NUMBER,client->irq);
2002

    
2003
#else
2004
ret = gpio_request(sitronix_ts_gpts.irq_gpio, "GTP_INT_IRQ");
2005
if (ret < 0) 
2006
{
2007
	GTP_ERROR("Failed to request GPIO:%d, ERRNO:%d",
2008
			  (s32) sitronix_ts_gpts.irq_gpio, ret);
2009
	ret = -ENODEV;
2010
} 
2011
else 
2012
{
2013
	printk("%s:sitronix_ts_gpts.irq_gpio =%d\n",__FUNCTION__,sitronix_ts_gpts.irq_gpio);
2014
	ret = gpio_direction_input(sitronix_ts_gpts.irq_gpio);
2015
	if (ret < 0)
2016
		gpio_free(sitronix_ts_gpts.irq_gpio);
2017
	sitronix_ts_gpts.client->irq = gpio_to_irq(sitronix_ts_gpts.irq_gpio);
2018
}
2019
printk("gpio num:%d, irq num:%d\n",CTP_IRQ_NUMBER,sitronix_ts_gpts.client->irq);
2020
#endif
2021

    
2022
//client->irq = gpio_to_irq(CTP_IRQ_NUMBER);
2023
//DbgMsg("gpio num:%d, irq num:%d\n",CTP_IRQ_NUMBER,client->irq);
2024
#endif
2025

    
2026

    
2027
#ifdef SITRONIX_IDENTIFY_ID
2028
	if((ret = sitronix_ts_identify(&sitronix_ts_gpts)) < 0)
2029
		goto err_device_info_error;
2030
#endif // SITRONIX_IDENTIFY_ID
2031

    
2032
#ifndef SITRONIX_INT_POLLING_MODE
2033
	INIT_WORK(&(sitronix_ts_gpts.work), sitronix_ts_work_func);
2034
#else
2035
	INIT_DELAYED_WORK(&(sitronix_ts_gpts.work), sitronix_ts_work_func);
2036
#endif // SITRONIX_INT_POLLING_MODE
2037

    
2038
	#if(CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_GPIO)
2039
	INIT_WORK(&sitronix_ts_gpts.sitronix_io_sync_work, sitronix_io_sync_work_func);
2040
	#endif
2041
	
2042
	#if(CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_GPIO)
2043
	sitronix_io_sync_workqueue= create_singlethread_workqueue("sitronix_io_sync_workqueue");
2044
	if (!sitronix_io_sync_workqueue) {
2045
			ErrorMsg("Creat sitronix_io_sync_workqueue workqueue failed.\n");
2046
			goto err_device_info_error;
2047
	}
2048
	#endif
2049
	
2050
#ifdef SITRONIX_MONITOR_THREAD
2051
	if(sitronix_ts_gpts.enable_monitor_thread == 1){
2052
		//== Add thread to monitor chip
2053
		atomic_set(&iMonitorThreadPostpone,1);
2054
		sitronix_ts_gpts.sitronix_mt_fp = sitronix_ts_gpts.RawCRC_enabled? sitronix_ts_monitor_thread_v2 : sitronix_ts_monitor_thread;
2055
		SitronixMonitorThread = kthread_run(sitronix_ts_gpts.sitronix_mt_fp,"Sitronix","Monitorthread");
2056
		if(IS_ERR(SitronixMonitorThread))
2057
			SitronixMonitorThread = NULL;
2058
	}
2059
#endif // SITRONIX_MONITOR_THREAD
2060

    
2061
	sitronix_ts_gpts.input_dev = input_allocate_device();
2062
	if (sitronix_ts_gpts.input_dev == NULL){
2063
		printk("Can not allocate memory for input device.");
2064
		ret = -ENOMEM;
2065
		goto err_input_dev_alloc_failed;
2066
	}
2067

    
2068
	sitronix_ts_gpts.input_dev->name = SITRONIX_I2C_TOUCH_MT_INPUT_DEV_NAME;
2069
	sitronix_ts_gpts.input_dev->dev.parent = &client->dev;
2070
	sitronix_ts_gpts.input_dev->id.bustype = BUS_I2C;
2071

    
2072
	set_bit(EV_KEY, sitronix_ts_gpts.input_dev->evbit);
2073
	set_bit(BTN_TOUCH, sitronix_ts_gpts.input_dev->keybit);
2074
	set_bit(EV_ABS, sitronix_ts_gpts.input_dev->evbit);
2075
#if 1
2076
	sitronix_ts_gpts.keyevent_input = input_allocate_device();
2077
	if (sitronix_ts_gpts.keyevent_input == NULL){
2078
		printk("Can not allocate memory for key input device.");
2079
		ret = -ENOMEM;
2080
		goto err_input_dev_alloc_failed;
2081
	}
2082
	sitronix_ts_gpts.keyevent_input->name  = SITRONIX_I2C_TOUCH_KEY_INPUT_DEV_NAME;
2083
	sitronix_ts_gpts.keyevent_input->dev.parent = &client->dev;
2084
	set_bit(EV_KEY, sitronix_ts_gpts.keyevent_input->evbit);
2085
	for(i = 0; i < (sizeof(sitronix_sensor_key_array)/sizeof(struct sitronix_sensor_key_t)); i++){
2086
		set_bit(sitronix_sensor_key_array[i].code, sitronix_ts_gpts.keyevent_input->keybit);
2087
	}
2088
	#endif
2089
#ifdef SITRONIX_SMART_WAKE_UP
2090
	set_bit(KEY_POWER, sitronix_ts_gpts.keyevent_input->keybit);
2091
#endif	//SITRONIX_SMART_WAKE_UP
2092

    
2093
#ifndef SITRONIX_AA_KEY
2094
	max_x = sitronix_ts_gpts.resolution_x;
2095
	max_y = sitronix_ts_gpts.resolution_y;
2096
#else
2097
#ifdef SITRONIX_KEY_BOUNDARY_MANUAL_SPECIFY
2098
	for(i = 0; i < (sizeof(sitronix_aa_key_array)/sizeof(struct sitronix_AA_key)); i++){
2099
		set_bit(sitronix_aa_key_array[i].code, sitronix_ts_gpts.keyevent_input->keybit);
2100
	}
2101
	max_x = SITRONIX_TOUCH_RESOLUTION_X;
2102
	max_y = SITRONIX_TOUCH_RESOLUTION_Y;
2103
#else
2104
	for(i = 0; i < (sizeof(sitronix_aa_key_array)/sizeof(struct sitronix_AA_key)); i++){
2105
		sitronix_aa_key_array[i].x_low = ((sitronix_ts_gpts.resolution_x / (sizeof(sitronix_aa_key_array)/sizeof(struct sitronix_AA_key)) ) * i ) + 15;
2106
		sitronix_aa_key_array[i].x_high = ((sitronix_ts_gpts.resolution_x / (sizeof(sitronix_aa_key_array)/sizeof(struct sitronix_AA_key)) ) * (i + 1)) - 15;
2107
		sitronix_aa_key_array[i].y_low = sitronix_ts_gpts.resolution_y - sitronix_ts_gpts.resolution_y / SCALE_KEY_HIGH_Y;
2108
		sitronix_aa_key_array[i].y_high = sitronix_ts_gpts.resolution_y;
2109
		DbgMsg("key[%d] %d, %d, %d, %d\n", i, sitronix_aa_key_array[i].x_low, sitronix_aa_key_array[i].x_high, sitronix_aa_key_array[i].y_low, sitronix_aa_key_array[i].y_high);
2110
		set_bit(sitronix_aa_key_array[i].code, sitronix_ts_gpts.keyevent_input->keybit);
2111
	}
2112
	max_x = sitronix_ts_gpts.resolution_x;
2113
	max_y = sitronix_ts_gpts.resolution_y - sitronix_ts_gpts.resolution_y / SCALE_KEY_HIGH_Y;
2114
#endif // SITRONIX_KEY_BOUNDARY_MANUAL_SPECIFY
2115
#endif // SITRONIX_AA_KEY
2116

    
2117
#if 0
2118
	ret = input_register_device(sitronix_ts_gpts.keyevent_input);
2119
	if(ret < 0){
2120
		printk("Can not register key input device.\n");
2121
		goto err_input_register_device_failed;
2122
	}	
2123
#endif
2124

    
2125
#ifdef SITRONIX_SUPPORT_MT_SLOT
2126
	input_mt_init_slots(sitronix_ts_gpts.input_dev, sitronix_ts_gpts.max_touches);
2127
#else
2128
	__set_bit(ABS_X, sitronix_ts_gpts.input_dev->absbit);
2129
	__set_bit(ABS_Y, sitronix_ts_gpts.input_dev->absbit);
2130
	__set_bit(ABS_MT_TOUCH_MAJOR, sitronix_ts_gpts.input_dev->absbit);
2131
	__set_bit(ABS_MT_WIDTH_MAJOR, sitronix_ts_gpts.input_dev->absbit);
2132
	__set_bit(ABS_MT_POSITION_X, sitronix_ts_gpts.input_dev->absbit);
2133
	__set_bit(ABS_MT_POSITION_Y, sitronix_ts_gpts.input_dev->absbit);
2134
	__set_bit(ABS_MT_TOOL_TYPE, sitronix_ts_gpts.input_dev->absbit);
2135
	__set_bit(ABS_MT_BLOB_ID, sitronix_ts_gpts.input_dev->absbit);
2136
	__set_bit(ABS_MT_TRACKING_ID, sitronix_ts_gpts.input_dev->absbit);
2137

    
2138
	input_set_abs_params(sitronix_ts_gpts.input_dev, ABS_MT_TOUCH_MAJOR, 0,  255, 0, 0);
2139
	input_set_abs_params(sitronix_ts_gpts.input_dev, ABS_MT_WIDTH_MAJOR, 0,  255, 0, 0);
2140
	input_set_abs_params(sitronix_ts_gpts.input_dev, ABS_MT_TRACKING_ID, 0, sitronix_ts_gpts.max_touches, 0, 0);
2141
	input_set_abs_params(sitronix_ts_gpts.input_dev, ABS_PRESSURE, 0, 255, 0, 0);
2142
#endif // SITRONIX_SUPPORT_MT_SLOT
2143
printk("%s,line=%d\n", __FUNCTION__,__LINE__);
2144
#ifndef SITRONIX_SWAP_XY
2145
	input_set_abs_params(sitronix_ts_gpts.input_dev, ABS_MT_POSITION_X, 0, max_x, 0, 0);
2146
	input_set_abs_params(sitronix_ts_gpts.input_dev, ABS_MT_POSITION_Y, 0, max_y, 0, 0);
2147
#else
2148
	input_set_abs_params(sitronix_ts_gpts.input_dev, ABS_MT_POSITION_X, 0, max_y, 0, 0);
2149
	input_set_abs_params(sitronix_ts_gpts.input_dev, ABS_MT_POSITION_Y, 0, max_x, 0, 0);
2150
#endif // SITRONIX_SWAP_XY
2151

    
2152
	ret = input_register_device(sitronix_ts_gpts.input_dev);
2153
	if(ret < 0){
2154
		printk("Can not register input device.\n");
2155
		goto err_input_register_device_failed;
2156
	}
2157

    
2158
if (sitronix_ts_gpts.client->irq){
2159
		dev_info(&client->dev, "irq = %d\n", sitronix_ts_gpts.client->irq);
2160
#ifdef SITRONIX_LEVEL_TRIGGERED
2161
	//#define IRQF_TRIGGER_NONE	0x00000000
2162
	//#define IRQF_TRIGGER_RISING	0x00000001
2163
	//#define IRQF_TRIGGER_FALLING	0x00000002
2164
	//#define IRQF_TRIGGER_HIGH	0x00000004
2165
	//#define IRQF_TRIGGER_LOW	0x00000008
2166

    
2167
	//ret = request_irq(client->irq, sitronix_ts_irq_handler, IRQF_TRIGGER_LOW | IRQF_DISABLED, client->name, &sitronix_ts_gpts);
2168
	//ret = request_irq(sitronix_ts_gpts.client->irq, sitronix_ts_irq_handler, IRQF_TRIGGER_RISING |IRQF_TRIGGER_FALLING , SITRONIX_I2C_TOUCH_DRV_NAME, &sitronix_ts_gpts);
2169
	//ret = request_irq(sitronix_ts_gpts.client->irq, sitronix_ts_irq_handler, IRQF_TRIGGER_RISING |IRQF_DISABLED , client->name, &sitronix_ts_gpts);
2170
	ret = request_irq(sitronix_ts_gpts.client->irq, sitronix_ts_irq_handler, IRQF_TRIGGER_FALLING, client->name, &sitronix_ts_gpts);
2171
#else
2172
	ret = request_irq(sitronix_ts_gpts.client->irq, sitronix_ts_irq_handler, IRQF_TRIGGER_FALLING ,SITRONIX_I2C_TOUCH_DRV_NAME, &sitronix_ts_gpts);
2173
	//ret = request_irq(client->irq, sitronix_ts_irq_handler, IRQF_TRIGGER_FALLING | IRQF_DISABLED, client->name, &sitronix_ts_gpts);
2174

    
2175
#endif // SITRONIX_LEVEL_TRIGGERED
2176
		if (ret == 0){
2177
			atomic_set(&sitronix_ts_irq_on, 1);
2178
			sitronix_ts_gpts.use_irq = 1;
2179
		}else{
2180
			dev_err(&client->dev, "request_irq failed\n");
2181
			goto err_request_irq_failed;
2182
		}
2183
	}
2184

    
2185

    
2186
#ifdef SITRONIX_SYSFS
2187
	if(!sitronix_ts_sysfs_created){
2188
		ret = sitronix_ts_create_sysfs_entry(client);
2189
		if(ret < 0)
2190
			goto err_create_sysfs_failed;
2191
		sitronix_ts_sysfs_created = true;
2192
	}
2193
#endif // SITRONIX_SYSFS
2194
printk("%s,line=%d\n", __FUNCTION__,__LINE__);
2195

    
2196

    
2197
#ifdef CONFIG_HAS_EARLYSUSPEND
2198
	sitronix_ts_gpts.early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
2199
	sitronix_ts_gpts.early_suspend.suspend = sitronix_ts_early_suspend;
2200
	sitronix_ts_gpts.early_suspend.resume = sitronix_ts_late_resume;
2201
	register_early_suspend(&sitronix_ts_gpts.early_suspend);	
2202
#endif // CONFIG_HAS_EARLYSUSPEND
2203

    
2204
//20160624 for pinctrl
2205
#if 0
2206
	rst_pin = kzalloc(sizeof(struct rst_pin_ctrl), GFP_KERNEL);
2207
	if (!rst_pin) {
2208
		dev_err(&client->dev,"%s: memory allocation failed.", __func__);
2209
		//err = -ENOMEM;
2210
		//goto exit1;
2211
	} 
2212
	rst_pin->client = client;
2213
	if (!sit_pinctrl_init(rst_pin))
2214
	{
2215
		printk("##gavin select active state for rst pin\n");
2216
		ret = pinctrl_select_state(rst_pin->pinctrl, rst_pin->rst_pin_ts_active);
2217
		if (ret) {
2218
			dev_err(&client->dev, "Can't select pinctrl state\n");
2219
		//goto exit2;
2220
		}
2221
	}
2222
#endif
2223

    
2224
//#ifdef ST_UPGRADE_FIRMWARE
2225
//#ifdef ST_FIREWARE_FILE
2226
//	kthread_run(st_upgrade_fw, "Sitronix", "sitronix_update");
2227
//#else
2228
//	st_upgrade_fw();
2229
//#endif //ST_FIREWARE_FILE
2230
	 
2231
//#endif //ST_UPGRADE_FIRMWARE
2232

    
2233

    
2234
#ifdef ST_TEST_RAW
2235
	st_drv_test_raw();
2236
#endif //ST_TEST_RAW
2237

    
2238
	//add touch pannel prepare switch to sp interface
2239
	#if (CTP_AP_SP_SYNC_WAY != CTP_AP_SP_SYNC_NONE)
2240
	//sitronix_ts_gpts.sitronix_driver_ops.touch_device_name = CTP_NAME;
2241
	//sitronix_ts_gpts.sitronix_driver_ops.touch_pannel_reinit = sitronix_touch_reinit;
2242
	//sitronix_ts_gpts.sitronix_driver_ops.touch_pannel_uninit = sitronix_touch_uninit;
2243
	//gSitronixPtr =  &sitronix_ts_gpts;
2244
	#endif
2245

    
2246
	#if(CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_APP)
2247
	// touch_panel_driver_add(&gSitronixPtr->sitronix_driver_ops);
2248
	#endif
2249
	printk("%s,line=%d\n", __FUNCTION__,__LINE__);
2250
	
2251
	#if(CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_GPIO)
2252
	//spin_lock_init(&ctp_sync_lock);
2253
	//init_timer(&ctp_sync_timer);
2254
	//ctp_sync_timer.expires = jiffies + HZ/50; 
2255
	//ctp_sync_timer.function = ctp_sync_timer_func;   
2256
	//add_timer(&ctp_sync_timer);   //crash
2257
	#endif
2258
	
2259
	return 0;
2260
err_create_sysfs_failed:
2261
err_request_irq_failed:
2262
#ifdef SITRONIX_SYSFS
2263
	input_unregister_device(sitronix_ts_gpts.input_dev);
2264
	input_unregister_device(sitronix_ts_gpts.keyevent_input);
2265
#endif // SITRONIX_SYSFS
2266
err_input_register_device_failed:
2267
err_input_dev_alloc_failed:
2268
	#if(CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_GPIO)
2269
	destroy_workqueue(sitronix_io_sync_workqueue);
2270
	#endif
2271
	
2272
	if(sitronix_ts_gpts.input_dev)
2273
		input_free_device(sitronix_ts_gpts.input_dev);
2274
	if(sitronix_ts_gpts.keyevent_input)
2275
		input_free_device(sitronix_ts_gpts.keyevent_input);
2276
#ifdef SITRONIX_MONITOR_THREAD
2277
	if(sitronix_ts_gpts.enable_monitor_thread == 1){
2278
		if(SitronixMonitorThread){
2279
		      kthread_stop(SitronixMonitorThread);
2280
		      SitronixMonitorThread = NULL;
2281
		}
2282
	}
2283
#endif // SITRONIX_MONITOR_THREAD
2284
err_device_info_error:
2285
err_check_functionality_failed:
2286

    
2287
	return ret;
2288
}
2289

    
2290
static int sitronix_ts_remove(struct i2c_client *client)
2291
{
2292
	struct sitronix_ts_data *ts = i2c_get_clientdata(client);
2293
#ifdef CONFIG_HAS_EARLYSUSPEND
2294
	unregister_early_suspend(&ts->early_suspend);
2295
#endif // CONFIG_HAS_EARLYSUSPEND
2296
#ifdef SITRONIX_SYSFS
2297
	if(!sitronix_ts_sysfs_using){
2298
		sitronix_ts_destroy_sysfs_entry(client);
2299
		sitronix_ts_sysfs_created = false;
2300
	}
2301
#endif // SITRONIX_SYSFS
2302
#ifdef SITRONIX_MONITOR_THREAD
2303
	if(ts->enable_monitor_thread == 1){
2304
		if(SitronixMonitorThread){
2305
		      kthread_stop(SitronixMonitorThread);
2306
		      SitronixMonitorThread = NULL;
2307
		}
2308
	}
2309
#endif // SITRONIX_MONITOR_THREAD
2310
	i2c_set_clientdata(client, NULL);
2311
	if (ts->use_irq)
2312
		free_irq(client->irq, ts);
2313
	if(ts->input_dev)
2314
		input_unregister_device(ts->input_dev);
2315
	if(ts->keyevent_input)
2316
		input_unregister_device(ts->keyevent_input);
2317
	return 0;
2318
}
2319

    
2320
static int sitronix_ts_suspend(struct i2c_client *client)
2321
{
2322
	int ret;
2323
	struct sitronix_ts_data *ts = i2c_get_clientdata(client);
2324

    
2325
	DbgMsg("%s\n", __FUNCTION__);
2326
//2.9.15 petitk add
2327
#ifdef SITRONIX_SMART_WAKE_UP		
2328
	sitronix_swk_set_swk_enable(ts);
2329
	swk_flag = 1;	
2330
#endif //SITRONIX_SMART_WAKE_UP
2331

    
2332
#ifdef SITRONIX_MONITOR_THREAD
2333
	if(ts->enable_monitor_thread == 1){
2334
		if(SitronixMonitorThread){
2335
			kthread_stop(SitronixMonitorThread);
2336
			SitronixMonitorThread = NULL;
2337
		}
2338
		sitronix_ts_delay_monitor_thread_start = DELAY_MONITOR_THREAD_START_RESUME;
2339
	}
2340
#endif // SITRONIX_MONITOR_THREAD
2341
	if(ts->use_irq){
2342
		atomic_set(&sitronix_ts_irq_on, 0);
2343
//		disable_irq_nosync(ts->client->irq);
2344
	}
2345
	ts->suspend_state = 1;
2346

    
2347
	ret = sitronix_ts_set_powerdown_bit(ts, 1);
2348
	if(ts->chip_id == 2){
2349
#ifdef CONFIG_ARCH_MSM
2350
	//	gpio_tlmm_config(GPIO_CFG(SITRONIX_INT_GPIO, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
2351
	//	gpio_set_value(SITRONIX_INT_GPIO, 1);
2352
#else
2353
		#if 0
2354
		gpio_direction_output(irq_to_gpio(client->irq), 1);
2355
		#endif
2356
#endif // CONFIG_ARCH_MSM
2357
	}
2358
	DbgMsg("%s return\n", __FUNCTION__);
2359

    
2360
	return 0;
2361
}
2362

    
2363
static int sitronix_ts_resume(struct i2c_client *client)
2364
{
2365
	int ret;
2366
	struct sitronix_ts_data *ts = i2c_get_clientdata(client);
2367

    
2368
	DbgMsg("%s\n", __FUNCTION__);
2369

    
2370
	if(ts->chip_id == 2){
2371
#ifdef CONFIG_ARCH_MSM
2372
		//gpio_set_value(SITRONIX_INT_GPIO, 0);
2373
		//gpio_tlmm_config(GPIO_CFG(SITRONIX_INT_GPIO, 0, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
2374
#else
2375
		#if 0
2376
		ret = irq_to_gpio(client->irq);
2377
		gpio_set_value(ret, 0);
2378
		gpio_direction_input(ret);
2379
		#endif
2380
#endif // CONFIG_ARCH_MSM
2381
	}else{
2382
		//ret = sitronix_ts_set_powerdown_bit(ts, 0);
2383
	}
2384

    
2385
	ts->suspend_state = 0;
2386
	if(ts->use_irq){
2387
		atomic_set(&sitronix_ts_irq_on, 1);
2388
		enable_irq(ts->client->irq);
2389
	}
2390
#ifdef SITRONIX_MONITOR_THREAD
2391
	if(ts->enable_monitor_thread == 1){
2392
		atomic_set(&iMonitorThreadPostpone,1);
2393
		SitronixMonitorThread = kthread_run(sitronix_ts_gpts.sitronix_mt_fp,"Sitronix","Monitorthread");
2394
		if(IS_ERR(SitronixMonitorThread))
2395
			SitronixMonitorThread = NULL;
2396
	}
2397
#endif // SITRONIX_MONITOR_THREAD
2398
	DbgMsg("%s return\n", __FUNCTION__);
2399
	
2400
	return 0;
2401
}
2402

    
2403
#ifdef CONFIG_HAS_EARLYSUSPEND
2404
static void sitronix_ts_early_suspend(struct early_suspend *h)
2405
{
2406
	struct sitronix_ts_data *ts;
2407
	DbgMsg("%s\n", __FUNCTION__);
2408
	ts = container_of(h, struct sitronix_ts_data, early_suspend);
2409
	sitronix_ts_suspend(ts->client);
2410
}
2411

    
2412
static void sitronix_ts_late_resume(struct early_suspend *h)
2413
{
2414
	struct sitronix_ts_data *ts;
2415
	DbgMsg("%s\n", __FUNCTION__);
2416
	ts = container_of(h, struct sitronix_ts_data, early_suspend);
2417
	sitronix_ts_resume(ts->client);
2418
}
2419
#endif // CONFIG_HAS_EARLYSUSPEND
2420

    
2421
static const struct i2c_device_id sitronix_ts_id[] = {
2422
	{ SITRONIX_I2C_TOUCH_DRV_NAME, 0 },
2423
	{ }
2424
};
2425
#ifdef SITRONIX_MULTI_SLAVE_ADDR
2426
static int sitronix_ts_detect(struct i2c_client *client, struct i2c_board_info *info)
2427
{
2428
	uint8_t buffer[8];
2429
	sitronix_ts_reset_ic();
2430
	printk("%s: bus = %d\n", __FUNCTION__, client->adapter->nr);
2431
	if((client->adapter->nr == twi_id) && (!sitronix_i2c_read_bytes(client, STATUS_REG, buffer, 8))){
2432
		printk("detect successed\n");
2433
		strlcpy(info->type, SITRONIX_I2C_TOUCH_DRV_NAME, strlen(SITRONIX_I2C_TOUCH_DRV_NAME)+1);
2434
		return 0;
2435
	}else{
2436
		printk("detect failed\n");
2437
		return -ENODEV;
2438
	}
2439
}
2440

    
2441
const unsigned short sitronix_i2c_addr[] = {0x20, 0x38, 0x55, 0x70, 0x60, I2C_CLIENT_END};
2442
#endif // SITRONIX_MULTI_SLAVE_ADDR
2443

    
2444

    
2445

    
2446
static struct of_device_id sitronix_match_table[] = {
2447
	{ .compatible = "sitronix,st1633i", },
2448
	{ },
2449
};
2450

    
2451
#if 1// (!defined(CONFIG_FB) && !defined(CONFIG_HAS_EARLYSUSPEND))
2452
static const struct dev_pm_ops sitronix_ts_dev_pm_ops = {
2453
	.suspend = sitronix_ts_suspend,
2454
	.resume = sitronix_ts_resume,
2455
};
2456
#else
2457
static const struct dev_pm_ops sitronix_ts_dev_pm_ops = {
2458
	.suspend = sitronix_ts_suspend_rst,////20160614 for pinctrl
2459
	.resume = sitronix_ts_resume_rst,
2460
};
2461
#endif
2462
static struct i2c_driver sitronix_ts_driver = {
2463
#ifdef SITRONIX_MULTI_SLAVE_ADDR
2464
	.class 		= I2C_CLASS_HWMON,
2465
#endif // SITRONIX_MULTI_SLAVE_ADDR
2466
	.probe		= sitronix_ts_probe,
2467
	.remove		= sitronix_ts_remove,
2468
	.id_table	= sitronix_ts_id,
2469
	.driver = {
2470
		.name	= SITRONIX_I2C_TOUCH_DRV_NAME,
2471
		.owner = THIS_MODULE,
2472
		.of_match_table = sitronix_match_table,
2473
#if CONFIG_PM
2474
		.suspend = NULL,
2475
		.resume = NULL,//fts_resume,
2476
#endif
2477
	},
2478
#ifdef SITRONIX_MULTI_SLAVE_ADDR
2479
	//.address_list = sitronix_i2c_addr,
2480
	.detect = sitronix_ts_detect,
2481
#endif // SITRONIX_MULTI_SLAVE_ADDR
2482
};
2483

    
2484
#ifdef SITRONIX_FW_UPGRADE_FEATURE
2485
static struct file_operations nc_fops = {
2486
	.owner =        THIS_MODULE,
2487
	.write		= sitronix_write,
2488
	.read		= sitronix_read,
2489
	.open		= sitronix_open,
2490
	.unlocked_ioctl = sitronix_ioctl,
2491
	.release	= sitronix_release,
2492
};
2493
#endif // SITRONIX_FW_UPGRADE_FEATURE
2494
void sitronix_ts_reprobe(void)
2495
{
2496
	int retval = 0;	
2497
	printk("sitronix call reprobe!\n");
2498
	i2c_del_driver(&sitronix_ts_driver);
2499
	retval = i2c_add_driver(&sitronix_ts_driver);
2500
	if(retval < 0)
2501
		printk("fail to reprobe driver!\n");
2502
}
2503

    
2504
#ifdef CONFIG_ARCH_SUNXI
2505
/**
2506
 * ctp_print_info - sysconfig print function
2507
 * return value:
2508
 *
2509
 */
2510
void sitronix_print_info(struct ctp_config_info info)
2511
{
2512
	DbgMsg("info.ctp_used:%d\n",info.ctp_used);
2513
	DbgMsg("info.twi_id:%d\n",info.twi_id);
2514
	DbgMsg("info.screen_max_x:%d\n",info.screen_max_x);
2515
	DbgMsg("info.screen_max_y:%d\n",info.screen_max_y);
2516
	DbgMsg("info.revert_x_flag:%d\n",info.revert_x_flag);
2517
	DbgMsg("info.revert_y_flag:%d\n",info.revert_y_flag);
2518
	DbgMsg("info.exchange_x_y_flag:%d\n",info.exchange_x_y_flag);
2519
	DbgMsg("info.irq_gpio_number:%d\n",info.irq_gpio.gpio);
2520
	DbgMsg("info.wakeup_gpio_number:%d\n",info.wakeup_gpio.gpio);
2521
}
2522

    
2523

    
2524
static int ctp_get_system_config(void)
2525
{   
2526
        sitronix_print_info(config_info);
2527
        twi_id = config_info.twi_id;
2528
        screen_max_x = config_info.screen_max_x;
2529
        screen_max_y = config_info.screen_max_y;
2530
        revert_x_flag = config_info.revert_x_flag;
2531
        revert_y_flag = config_info.revert_y_flag;
2532
        exchange_x_y_flag = config_info.exchange_x_y_flag; 
2533
        if((screen_max_x == 0) || (screen_max_y == 0)){
2534
                ErrorMsg("%s:read config error!\n",__func__);
2535
                return 0;
2536
        }
2537
        return 1;
2538
}
2539
#endif
2540

    
2541
static int __init sitronix_ts_init(void)
2542
{
2543

    
2544
#ifdef CONFIG_ARCH_SUNXI
2545
	s32 ret = -1;
2546
#endif
2547
	s32 ret_iic = -2;
2548
	#if(CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_GPIO)
2549
	//script_item_u   val;
2550
	//script_item_value_type_e  type;
2551
	//int pin_val = 0;
2552
	#endif
2553
#ifdef SITRONIX_FW_UPGRADE_FEATURE
2554
	int result;
2555
	int err = 0;
2556
	dev_t devno = MKDEV(sitronix_major, 0);
2557
#endif // SITRONIX_FW_UPGRADE_FEATURE
2558

    
2559
	#if(CTP_AP_SP_SYNC_WAY & CTP_AP_SP_SYNC_GPIO)
2560
	//type = script_get_item("ctp_para", "ctp_sync_io", &val);
2561
	//if(SCIRPT_ITEM_VALUE_TYPE_PIO != type) {
2562
	//	ErrorMsg("%s: ctp_sync_io script_get_item err. \n",__func__ );
2563
	//}
2564
	//else
2565
	{
2566
		printk("ctp_sync_io get ok\n");
2567
		//sitronix_sync_io = val.gpio;
2568
	}
2569

    
2570
	//ap_sp_sync_gpio(sitronix_sync_io, CTP_SYNC_IO_IN, pin_val);
2571
	#endif
2572
#ifdef CONFIG_ARCH_SUNXI
2573
	DbgMsg("****************************************************************\n");
2574
	if (0)//(input_fetch_sysconfig_para(&(config_info.input_type))) 
2575
	{
2576
		ErrorMsg("%s: ctp_fetch_sysconfig_para err.\n", __func__);
2577
		return 0;
2578
	} 
2579
	else 
2580
	{
2581
		//ret = input_init_platform_resource(&(config_info.input_type));
2582
		if (0 != ret) {
2583
			ErrorMsg("%s:ctp_ops.init_platform_resource err. \n", __func__);    
2584
		}
2585
	}
2586
	
2587
	if(config_info.ctp_used == 0)
2588
	{
2589
		ErrorMsg("*** ctp_used set to 0 !\n");
2590
		ErrorMsg("*** if use ctp,please put the sys_config.fex ctp_used set to 1. \n");
2591
		return 0;
2592
	}
2593

    
2594
	if(!ctp_get_system_config())
2595
	{
2596
		ErrorMsg("%s:read config fail!\n",__func__);
2597
		return ret;
2598
	}
2599
	DbgMsg("%s\n",__func__);
2600
	
2601
	//input_set_power_enable(&(config_info.input_type), 1);
2602
	
2603
	//sunxi_gpio_to_name(CTP_IRQ_NUMBER,irq_pin_name);
2604
	
2605
	//sitronix_i2c_driver.detect = ctp_detect;
2606
#endif
2607

    
2608
	printk("Sitronix touch driver %d.%d.%d\n", DRIVER_MAJOR, DRIVER_MINOR, DRIVER_PATCHLEVEL);
2609
	printk("Release date: %s\n", DRIVER_DATE);
2610
#ifdef SITRONIX_FW_UPGRADE_FEATURE
2611
	result  = alloc_chrdev_region(&devno, 0, 1, SITRONIX_I2C_TOUCH_DEV_NAME);
2612
	if(result < 0){
2613
		printk("fail to allocate chrdev (%d) \n", result);
2614
		return 0;
2615
	}
2616
	sitronix_major = MAJOR(devno);
2617
	cdev_init(&sitronix_cdev, &nc_fops);
2618
	sitronix_cdev.owner = THIS_MODULE;
2619
	sitronix_cdev.ops = &nc_fops;
2620
        err =  cdev_add(&sitronix_cdev, devno, 1);
2621
	if(err){
2622
		printk("fail to add cdev (%d) \n", err);
2623
		return 0;
2624
	}
2625
	printk("%s,%d\n",__FUNCTION__,__LINE__);
2626

    
2627
	sitronix_class = class_create(THIS_MODULE, SITRONIX_I2C_TOUCH_DEV_NAME);
2628
	if (IS_ERR(sitronix_class)) {
2629
		result = PTR_ERR(sitronix_class);
2630
		unregister_chrdev(sitronix_major, SITRONIX_I2C_TOUCH_DEV_NAME);
2631
		printk("fail to create class (%d) \n", result);
2632
		return result;
2633
	}
2634
	printk("%s,%d\n",__FUNCTION__,__LINE__);
2635
	device_create(sitronix_class, NULL, MKDEV(sitronix_major, 0), NULL, SITRONIX_I2C_TOUCH_DEV_NAME);
2636
#ifdef SITRONIX_PERMISSION_THREAD
2637
	SitronixPermissionThread = kthread_run(sitronix_ts_permission_thread,"Sitronix","Permissionthread");
2638
	if(IS_ERR(SitronixPermissionThread))
2639
		SitronixPermissionThread = NULL;
2640
#endif // SITRONIX_PERMISSION_THREAD
2641
#endif // SITRONIX_FW_UPGRADE_FEATURE
2642

    
2643
	ret_iic= i2c_add_driver(&sitronix_ts_driver);
2644
	printk("IIC ADD DRIVER %s,ret_iic=%d\n",__FUNCTION__,ret_iic);
2645

    
2646
	return  ret_iic;
2647
	//return i2c_add_driver(&sitronix_ts_driver);
2648
}
2649

    
2650
static void __exit sitronix_ts_exit(void)
2651
{
2652
#ifdef SITRONIX_FW_UPGRADE_FEATURE
2653
	dev_t dev_id = MKDEV(sitronix_major, 0);
2654
#endif // SITRONIX_FW_UPGRADE_FEATURE
2655
	i2c_del_driver(&sitronix_ts_driver);
2656
#ifdef SITRONIX_FW_UPGRADE_FEATURE
2657
	cdev_del(&sitronix_cdev);
2658

    
2659
	device_destroy(sitronix_class, dev_id); //delete device node under /dev
2660
	class_destroy(sitronix_class); //delete class created by us
2661
	unregister_chrdev_region(dev_id, 1);
2662
#ifdef SITRONIX_PERMISSION_THREAD
2663
	if(SitronixPermissionThread)
2664
		SitronixPermissionThread = NULL;
2665
#endif // SITRONIX_PERMISSION_THREAD
2666
#endif // SITRONIX_FW_UPGRADE_FEATURE
2667
}
2668

    
2669
module_init(sitronix_ts_init);
2670
module_exit(sitronix_ts_exit);
2671

    
2672
MODULE_DESCRIPTION("Sitronix Multi-Touch Driver");
2673
MODULE_LICENSE("GPL");
2674

    
2675

    
2676
#if defined(ST_TEST_RAW) || defined(ST_UPGRADE_FIRMWARE)
2677

    
2678
static int st_i2c_read_direct(st_u8 *rxbuf, int len)
2679
{
2680
	
2681
	int ret = 0;	
2682
	ret = i2c_master_recv(sitronix_ts_gpts.client, rxbuf, len);
2683

    
2684
	if (ret < 0){
2685
		stmsg("read direct error (%d)\n", ret);
2686
		return ret;
2687
	}
2688
	return len;
2689
}
2690

    
2691
static int st_i2c_read_bytes(st_u8 addr, st_u8 *rxbuf, int len)
2692
{
2693
	
2694
	int ret = 0;
2695
	st_u8 txbuf = addr;
2696
	
2697
	ret = i2c_master_send(sitronix_ts_gpts.client, &txbuf, 1);
2698
	if (ret < 0){
2699
		stmsg("write 0x%x error (%d)\n", addr, ret);
2700
		return ret;
2701
	}
2702
	ret = i2c_master_recv(sitronix_ts_gpts.client, rxbuf, len);
2703

    
2704
	if (ret < 0){
2705
		stmsg("read 0x%x error (%d)\n", addr, ret);
2706
		return ret;
2707
	}
2708
	return len;
2709
}
2710

    
2711
static int st_i2c_write_bytes(st_u8 *txbuf, int len)
2712
{
2713
	
2714
	int ret = 0;
2715
	if(txbuf == NULL)
2716
		return -1;
2717

    
2718
	ret = i2c_master_send(sitronix_ts_gpts.client, txbuf, len);
2719
	if (ret < 0){
2720
		stmsg("write 0x%x error (%d)\n", *txbuf, ret);
2721
		return ret;
2722
	}
2723
	return len;
2724
}
2725
#endif
2726

    
2727
#ifdef ST_UPGRADE_FIRMWARE
2728
static int st_get_device_status(void)
2729
{
2730
	int ret = 0;
2731
	st_u8 buffer[8];
2732

    
2733
	ret = st_i2c_read_bytes(STATUS_REG, buffer, 8);
2734
	if (ret < 0){
2735
		stmsg("read status reg error (%d)\n", ret);
2736
		return ret;
2737
	}else{
2738
		stmsg("status reg = %d\n", buffer[0]);
2739
	}
2740

    
2741

    
2742
	return buffer[0];
2743
}
2744

    
2745
static int st_check_device_status(int ck1,int ck2,int delay)
2746
{
2747
	int maxTimes = 100;
2748
	int isInStauts = 0;
2749
	int status = -1;
2750
	while(maxTimes-->0 && isInStauts==0)
2751
	{
2752
		status = st_get_device_status();
2753
		if(status == ck1 || status == ck2)
2754
			isInStauts=1;
2755
		st_msleep(delay);
2756
	}
2757
	if(isInStauts==0)
2758
		return -1;
2759
	else
2760
		return 0;
2761
}
2762

    
2763
static int st_power_up(void)
2764
{
2765
	st_u8 reset[2];
2766
	reset[0] = 2;
2767
	reset[1] = 0;
2768
	return st_i2c_write_bytes(reset,2);
2769
}
2770
int st_isp_off(void)
2771
{
2772
	unsigned char data[8];
2773
	int rt = 0;
2774
	
2775
	stmsg("ISP off\n");
2776
	memset(data, 0, sizeof(data));
2777
	data[0] = ISP_CMD_RESET;
2778
	
2779
	rt += st_i2c_write_bytes(data,sizeof(data));
2780

    
2781
	if(rt < 0)
2782
	{
2783
		stmsg("ISP off error\n");
2784
		return -1;
2785
	}
2786
	st_msleep(300);
2787
	
2788

    
2789
	return st_check_device_status(0,4,10);
2790
}
2791
static int st_isp_on(void)
2792
{
2793
	unsigned char IspKey[] = {0,'S',0,'T',0,'X',0,'_',0,'F',0,'W',0,'U',0,'P'};
2794
	unsigned char i;
2795
	int icStatus = st_get_device_status();
2796
	
2797
	stmsg("ISP on\n");		
2798
		
2799
	if(icStatus <0)
2800
		return -1;
2801
	if(icStatus == 0x6)
2802
		return 0;
2803
	else if(icStatus == 0x5)
2804
		st_power_up();	
2805

    
2806
	for(i=0;i<sizeof(IspKey); i+=2)
2807
	{
2808
		if(st_i2c_write_bytes(&IspKey[i],2) < 0)
2809
		{
2810
			stmsg("Entering ISP fail.\n");
2811
			return -1;
2812
		}
2813
	}
2814
	st_msleep(150);	//This delay is very important for ISP mode changing.	
2815
					//Do not remove this delay arbitrarily.
2816
	return st_check_device_status(6,99,10);
2817
}
2818

    
2819
static int st_irq_off(void)
2820
{
2821
	if (sitronix_ts_gpts.use_irq){
2822
		atomic_set(&sitronix_ts_irq_on, 0);
2823
		disable_irq_nosync(sitronix_ts_gpts.client->irq);
2824
	}
2825
	return 0;
2826
}
2827
static int st_irq_on(void)
2828
{
2829
	if (sitronix_ts_gpts.use_irq)
2830
	{
2831
		atomic_set(&sitronix_ts_irq_on, 1);
2832
		enable_irq(sitronix_ts_gpts.client->irq);
2833
	}
2834
	return 0;
2835
}
2836

    
2837
unsigned short st_flash_get_checksum(unsigned char *Buf, unsigned short ValidDataSize)
2838
{
2839
	unsigned short Checksum;
2840
	int i;
2841

    
2842
	Checksum = 0;
2843
	for(i = 0; i < ValidDataSize; i++)
2844
		Checksum += (unsigned short)Buf[i];
2845

    
2846
	return Checksum;
2847
}
2848

    
2849
static int st_flash_unlock(void)
2850
{
2851
	unsigned char PacketData[ISP_PACKET_SIZE];
2852
	
2853
	int retryCount=0;
2854
	int isSuccess=0;
2855
	while(isSuccess==0 && retryCount++ < 2)
2856
	{
2857
		memset(PacketData,0,ISP_PACKET_SIZE);
2858
		PacketData[0] = ISP_CMD_UNLOCK;		
2859
		if(st_i2c_write_bytes(PacketData,ISP_PACKET_SIZE) == ISP_PACKET_SIZE)
2860
		{	
2861
			if(retryCount > 1)
2862
				st_msleep(150);
2863
				
2864
			if(st_i2c_read_direct(PacketData,ISP_PACKET_SIZE) == ISP_PACKET_SIZE)
2865
			{
2866
				if(PacketData[0] == ISP_CMD_READY)
2867
					isSuccess = 1;
2868
			}
2869
			else
2870
				st_msleep(50);
2871
		}
2872
		
2873
		if(isSuccess ==0)
2874
		{
2875
			stmsg("Read ISP_Unlock_Ready packet fail retry : %d\n",retryCount);
2876
			//MSLEEP(30);			
2877
		}
2878
		
2879
		
2880
	}
2881
	
2882
	if(isSuccess == 0)
2883
	{
2884
		stmsg("Read ISP_Unlock_Ready packet fail.\n");
2885
		return -1;
2886
	}
2887
	
2888
	return 0;
2889
}
2890

    
2891
int st_flash_erase_page(unsigned short PageNumber)
2892
{
2893
	unsigned char PacketData[ISP_PACKET_SIZE];
2894
	
2895
	int retryCount=0;
2896
	int isSuccess=0;
2897
	while(isSuccess==0 && retryCount++ < 2)
2898
	{
2899
		memset(PacketData,0,ISP_PACKET_SIZE);
2900
		PacketData[0] = ISP_CMD_ERASE;
2901
		PacketData[2] = (unsigned char)PageNumber;
2902
		if(st_i2c_write_bytes(PacketData,ISP_PACKET_SIZE) == ISP_PACKET_SIZE)
2903
		{	
2904
			//if(retryCount > 1)
2905
				st_msleep(150);
2906
				
2907
			if(st_i2c_read_direct(PacketData,ISP_PACKET_SIZE) == ISP_PACKET_SIZE)
2908
			{
2909
				if(PacketData[0] == ISP_CMD_READY)
2910
					isSuccess = 1;
2911
			}
2912
			else
2913
			{
2914
				//time out 
2915
				st_msleep(50);				
2916
			}
2917
		}
2918
		
2919
		if(isSuccess ==0)
2920
		{
2921
			stmsg("Read ISP_Erase_Ready packet fail with page %d retry : %d\n",PageNumber,retryCount);
2922
			//MSLEEP(30);			
2923
		}
2924
		
2925
		
2926
	}
2927
	
2928
	if(isSuccess == 0)
2929
	{
2930
		stmsg("Read ISP_Erase_Ready packet fail.\n");
2931
		return -1;
2932
	}
2933
	
2934
	return 0;
2935
}
2936

    
2937
static int st_flash_read_page(unsigned char *Buf,unsigned short PageNumber)
2938
{
2939
	unsigned char PacketData[ISP_PACKET_SIZE];
2940
	short ReadNumByte;
2941
	short ReadLength;
2942

    
2943
	ReadNumByte = 0;
2944
	memset(PacketData,0,ISP_PACKET_SIZE);
2945
	PacketData[0] = ISP_CMD_READ_FLASH;
2946
	PacketData[2] = (unsigned char)PageNumber;
2947
	if(st_i2c_write_bytes(PacketData,ISP_PACKET_SIZE) != ISP_PACKET_SIZE)
2948
	{
2949
		stmsg("Send ISP_Read_Flash packet fail.\n");
2950
		return -1;
2951
	}
2952

    
2953
	while(ReadNumByte < ST_FLASH_PAGE_SIZE)
2954
	{
2955
		if((ReadLength = st_i2c_read_direct(Buf+ReadNumByte,ISP_PACKET_SIZE)) != ISP_PACKET_SIZE)
2956
		{
2957
			stmsg("ISP read page data fail.\n");
2958
			return -1;
2959
		}
2960
		if(ReadLength == 0)
2961
			break;
2962
		ReadNumByte += ReadLength;
2963
	}
2964
	return ReadNumByte;
2965
}
2966

    
2967
static int st_flash_write_page(unsigned char *Buf,unsigned short PageNumber)
2968
{
2969
	unsigned char PacketData[ISP_PACKET_SIZE];
2970
	short WriteNumByte;
2971
	short WriteLength;
2972
	unsigned short Checksum;
2973
	unsigned char RetryCount;
2974

    
2975
	RetryCount = 0;
2976
	while(RetryCount++ < 1)
2977
	{
2978
		WriteNumByte = 0;
2979
		memset(PacketData,0,ISP_PACKET_SIZE);
2980
		Checksum = st_flash_get_checksum(Buf,ST_FLASH_PAGE_SIZE);
2981
			
2982
		PacketData[0] = ISP_CMD_WRITE_FLASH;
2983
		PacketData[2] = (unsigned char)PageNumber;
2984
		PacketData[4] = (unsigned char)(Checksum & 0xFF);
2985
		PacketData[5] = (unsigned char)(Checksum >> 8);
2986
		if(st_i2c_write_bytes(PacketData,ISP_PACKET_SIZE) != ISP_PACKET_SIZE )
2987
		{
2988
			stmsg("Send ISP_Write_Flash packet fail.\n");
2989
			return -1;
2990
		}
2991
		PacketData[0] = ISP_CMD_SEND_DATA;
2992
		while(WriteNumByte < ST_FLASH_PAGE_SIZE)
2993
		{
2994
			WriteLength = ST_FLASH_PAGE_SIZE - WriteNumByte;
2995
			if(WriteLength > 7)
2996
				WriteLength = 7;
2997
			memcpy(&PacketData[1],&Buf[WriteNumByte],WriteLength);
2998
			if(st_i2c_write_bytes(PacketData,ISP_PACKET_SIZE) != ISP_PACKET_SIZE)
2999
			{
3000
				stmsg("Send ISP_Write_Flash_Data packet error.\n");
3001
				return -1;
3002
			}
3003
			WriteNumByte += WriteLength;
3004
		}
3005

    
3006
		st_msleep(150);
3007
		if(st_i2c_read_direct(PacketData,ISP_PACKET_SIZE) != ISP_PACKET_SIZE)
3008
		{
3009
			stmsg("ISP get \"Write Data Ready Packet\" fail.\n");
3010
			return -1;
3011
		}
3012
		if(PacketData[0] != ISP_CMD_READY)
3013
		{
3014
			stmsg("Command ID of \"Write Data Ready Packet\" error.\n");
3015
			return -1;
3016
		}
3017
		
3018
		if((PacketData[2] & 0x10) != 0)
3019
		{
3020
			stmsg("Error occurs during write page data into flash. Error Code = 0x%X\n",PacketData[2]);
3021
			return -1;
3022
		}			
3023
		
3024
		break;
3025
	}
3026

    
3027
	return WriteNumByte;
3028
}
3029

    
3030
int st_flash_write(unsigned char *Buf, int Offset, int NumByte)
3031
{	
3032
	unsigned short StartPage;
3033
	unsigned short PageOffset;
3034
	int WriteNumByte;
3035
	short WriteLength;
3036
	//unsigned char TempBuf[ST_FLASH_PAGE_SIZE];
3037
	unsigned char * TempBuf;
3038
	int retry = 0;
3039
	int isSuccess = 0;
3040

    
3041
    TempBuf = kzalloc(ST_FLASH_PAGE_SIZE, GFP_KERNEL);
3042
    if (TempBuf == NULL)
3043
    {
3044
        printk("Alloc GFP_KERNEL memory failed.");
3045
        return -ENOMEM;
3046
    }
3047
	
3048

    
3049

    
3050
	stmsg("Write flash offset:0x%X , length:0x%X\n",Offset,NumByte);
3051
	
3052
	WriteNumByte = 0;
3053
	if(NumByte == 0)
3054
		return WriteNumByte;
3055
	
3056
	if((Offset + NumByte) > ST_FLASH_SIZE)
3057
		NumByte = ST_FLASH_SIZE - Offset;
3058
		
3059
	StartPage = Offset / ST_FLASH_PAGE_SIZE;
3060
	PageOffset = Offset % ST_FLASH_PAGE_SIZE;
3061
	while(NumByte > 0)
3062
	{
3063
		if((PageOffset != 0) || (NumByte < ST_FLASH_PAGE_SIZE))
3064
		{
3065
			if(st_flash_read_page(TempBuf,StartPage) < 0)
3066
				return -1;
3067
		}
3068

    
3069
		WriteLength = ST_FLASH_PAGE_SIZE - PageOffset;
3070
		if(NumByte < WriteLength)
3071
			WriteLength = NumByte;
3072
		memcpy(&TempBuf[PageOffset],Buf,WriteLength);
3073
				
3074
		retry = 0;
3075
		isSuccess = 0;
3076
		while(retry++ <2 && isSuccess ==0)
3077
		{
3078
			if(st_flash_unlock() >= 0 && st_flash_erase_page(StartPage) >= 0)
3079
			{	
3080
				stmsg("write page:%d\n",StartPage);			
3081
				if(st_flash_unlock() >= 0 && st_flash_write_page(TempBuf,StartPage) >= 0)
3082
					isSuccess =1;
3083
			}
3084
			isSuccess =1;
3085
			
3086
			if(isSuccess==0)
3087
				stmsg("FIOCTL_IspPageWrite write page %d retry: %d\n",StartPage,retry);
3088
		}
3089
		if(isSuccess==0)
3090
		{
3091
			stmsg("FIOCTL_IspPageWrite write page %d error\n",StartPage);
3092
			return -1;
3093
		}
3094
		else
3095
			StartPage++;
3096
		
3097
		NumByte -= WriteLength;
3098
		Buf += WriteLength;
3099
		WriteNumByte += WriteLength;
3100
		PageOffset = 0;
3101
	}
3102
	return WriteNumByte;
3103
}
3104

    
3105
#ifdef ST_FIREWARE_FILE
3106
static int st_check_fs_mounted(st_char *path_name)
3107
{
3108
    struct path root_path;
3109
    struct path path;
3110
    int err;
3111
    err = kern_path("/", LOOKUP_FOLLOW, &root_path);
3112

    
3113
    if (err)
3114
        return -1;
3115

    
3116
    err = kern_path(path_name, LOOKUP_FOLLOW, &path);
3117

    
3118
    if (err)
3119
        return -1;
3120

    
3121
   return 0;
3122

    
3123
}
3124
static int st_load_cfg_from_file(unsigned st_char *buf)
3125
{
3126
	int j;
3127
	struct st_file  *cfg_fp;
3128
	mm_segment_t fs;
3129
	int fileSize = 0;
3130
		
3131
	cfg_fp = st_filp_open(ST_CFG_PATH, O_RDWR,0666);
3132
	if(IS_ERR(cfg_fp)){
3133
	       	stmsg("Test: filp_open error!!. %d\n",j);				        	
3134
	}else
3135
	{
3136
		fs = get_fs();
3137
		set_fs(get_ds());
3138
			
3139
		fileSize = cfg_fp->f_op->read(cfg_fp,buf,ST_FW_LEN,&cfg_fp->f_pos);
3140
		set_fs(fs);
3141
		st_filp_close(cfg_fp,NULL);
3142
	}
3143
	return fileSize;
3144
}
3145

    
3146
static int st_load_fw_from_file(unsigned st_char *buf)
3147
{
3148
	int i,j;
3149
	struct st_file  *fw_fp;
3150
	mm_segment_t fs;
3151
	int fileSize = 0;
3152

    
3153
	for(j=0;j<10;j++)
3154
	{
3155
		st_msleep(1000);
3156
		stmsg("Wati for FS %d\n", j);
3157

    
3158
		if (st_check_fs_mounted(ST_FW_DIR) == 0)
3159
		{
3160
                	stmsg("%s mounted ~!!!!\n",ST_FW_DIR);
3161
                	fileSize = 1;
3162
                	break;
3163
		}
3164
	}
3165
	if(fileSize ==0)
3166
	{
3167
		stmsg("%s don't mounted ~!!!!\n",ST_FW_DIR);
3168
		return -1;
3169
	}
3170
	for(j=0;j<10;j++)
3171
	{
3172
 		st_msleep(1000);
3173
 		fileSize = 0;
3174
		fw_fp = st_filp_open(ST_FW_PATH, O_RDWR,0666);
3175
	 	if(IS_ERR(fw_fp)){
3176
	        	stmsg("Test: filp_open error!!. %d\n",j);
3177
			fileSize = 0;	        	
3178
	        }else
3179
	        {
3180
	        	fileSize = 0;
3181
			fs = get_fs();
3182
			set_fs(get_ds());
3183
			//f->f_op->read(f,buf,ROM_SIZE,&f->f_pos);
3184
			fileSize = fw_fp->f_op->read(fw_fp,buf,ST_FW_LEN,&fw_fp->f_pos);
3185
			set_fs(fs);
3186
	 		stmsg("fw file size:0x%X\n",fileSize);
3187
			//for(i=0;i<0x10;i++)
3188
			//	stmsg("Test: data is %X",buf[i]);			
3189
	          	st_filp_close(fw_fp,NULL);
3190
			break;
3191
	    	}
3192
	}
3193
	return fileSize;
3194
}
3195

    
3196
unsigned char fw_buf[ST_FW_LEN];
3197
unsigned char cfg_buf[ST_CFG_LEN];
3198
#else
3199
unsigned char fw_buf[] = SITRONIX_FW;
3200
unsigned char cfg_buf[] = SITRONIX_CFG;
3201
#endif //ST_FIREWARE_FILE
3202

    
3203

    
3204
static int st_get_fw_info_offset(int fwSize,unsigned st_char *buf)
3205
{
3206
	int i=0;
3207
	for(i=fwSize-ST_FW_INFO_LEN-4;i>=4;i--)
3208
	{
3209
		if(	buf[i]   == 0x54 &&
3210
			buf[i+1] == 0x46 &&
3211
			buf[i+2] == 0x49 &&
3212
			buf[i+3] == 0x32 )
3213
		{
3214
			stmsg("TOUCH_FW_INFO offset = 0x%X\n",i+4);
3215
			return i+4;
3216
		}		
3217
	}
3218
	stmsg("can't find TOUCH_FW_INFO offset\n");
3219
	return -1;
3220
}
3221
static int st_compare_array(unsigned st_char *b1,unsigned st_char *b2,int len)
3222
{
3223
	int i=0;
3224
	for(i=0;i<len;i++)
3225
		if(b1[i] != b2[i])
3226
			return -1;
3227
	return 0;
3228
}
3229

    
3230
unsigned char fw_check[ST_FLASH_PAGE_SIZE];
3231

    
3232
int st_upgrade_fw(void)
3233
{
3234
	int rt=0;
3235
	int fwSize =0;
3236
	int cfgSize =0;	
3237
	int fwInfoOff = 0;
3238
	int powerfulWrite = 0;
3239
	
3240
#ifdef ST_FIREWARE_FILE	
3241
	fwSize = st_load_fw_from_file(fw_buf);
3242
	
3243
	cfgSize = st_load_cfg_from_file(cfg_buf);
3244
#else
3245
	fwSize = sizeof(fw_buf);
3246
	cfgSize = sizeof(cfg_buf);
3247
	stmsg("fwSize 0x%X,cfgsize 0x%X\n",fwSize,cfgSize);
3248
#endif //ST_FIREWARE_FILE
3249

    
3250
	cfgSize = min(cfgSize,ST_CFG_LEN);
3251
	if(fwSize != 0)
3252
	{
3253
		fwInfoOff = st_get_fw_info_offset(fwSize,fw_buf);
3254
		if(fwInfoOff <0)
3255
			fwSize = 0;
3256
	}
3257
	
3258
	if(fwSize ==0 && cfgSize ==0)
3259
	{
3260
		stmsg("can't find FW or CFG , cancel upgrade\n");
3261
		return -1;
3262
	}
3263
    	
3264
    	if(st_get_device_status() == 0x6)
3265
    		powerfulWrite = 1;    		
3266

    
3267
    	st_irq_off();
3268
    	
3269
    	rt = st_isp_on();
3270
    	if(rt !=0)
3271
    	{
3272
    		stmsg("ISP on fail\n");
3273
    		goto ST_IRQ_ON;
3274
    	}
3275
    	
3276
    	if(powerfulWrite ==0 &&(fwSize !=0 || cfgSize!=0))
3277
    	{
3278
    		//check fw and cfg
3279
    		int checkOff = (0x3F00 / ST_FLASH_PAGE_SIZE) *ST_FLASH_PAGE_SIZE;
3280
    		if(st_flash_read_page(fw_check,0x3F00 / ST_FLASH_PAGE_SIZE)< 0 )
3281
    		{
3282
    			stmsg("read flash fail , cancel upgrade\n");
3283
    			rt = -1;
3284
    			goto ST_ISP_OFF;
3285
    		}
3286
    		
3287
    		if(fwSize !=0)
3288
    		{
3289
    			if(0 == st_compare_array(fw_check+(fwInfoOff-checkOff),fw_buf+fwInfoOff,ST_FW_INFO_LEN) )
3290
    			{
3291
    				stmsg("fw compare :same\n");
3292
    				fwSize = 0;
3293
    			}
3294
    			
3295
    		}
3296
    		
3297
    		if(cfgSize !=0)
3298
    		{
3299
    			if(0 == st_compare_array(fw_check+(ST_CFG_OFFSET-checkOff),cfg_buf,cfgSize) )
3300
    			{
3301
    				stmsg("cfg compare :same\n");
3302
    				cfgSize = 0;
3303
    			}
3304
    			else
3305
    				stmsg("cfg compare : different\n");
3306
    			
3307
    		}
3308
    		
3309
    	}
3310
    	
3311
    	if(cfgSize !=0)
3312
    		st_flash_write(cfg_buf,ST_CFG_OFFSET,cfgSize);
3313
    	
3314
    	if(fwSize !=0)
3315
    		st_flash_write(fw_buf,0,fwSize);
3316
    	
3317
ST_ISP_OFF:    	
3318
    	rt = st_isp_off();
3319
ST_IRQ_ON:    	    		
3320
    	st_irq_on();
3321
    	return rt;
3322
}
3323
#endif //ST_UPGRADE_FIRMWARE
3324

    
3325

    
3326
#ifdef ST_TEST_RAW
3327
st_int st_drv_Get_2D_Length(st_int tMode[])
3328
{
3329
	if(tMode[0] ==0)
3330
		return tMode[1];
3331
	else
3332
		return tMode[2];
3333
}
3334
st_int st_drv_Get_2D_Count(st_int tMode[])
3335
{
3336
	if(tMode[0] == 0)
3337
		return tMode[2];
3338
	else
3339
		return tMode[1];
3340
}
3341

    
3342
st_int st_drv_Get_2D_RAW(st_int tMode[],st_int rawJ[],st_int gsMode)
3343
{
3344
	st_int count =st_drv_Get_2D_Count(tMode);
3345
	st_int length = st_drv_Get_2D_Length(tMode);
3346
	st_int maxTimes = 40;
3347
	st_int dataCount=0;
3348
	st_int times = maxTimes;
3349
	
3350
	st_u8 raw[0x40];
3351
	memset(raw,0,0x40);
3352
	st_int i=0;
3353
	st_int j=0;
3354
	st_int index;
3355
	st_int keyAddCount = (tMode[3] >0)? 1:0;
3356
	st_int rawI;
3357
	st_int errorCount = 0;	
3358
	st_u8 isFillData[MAX_SENSOR_COUNT];
3359
	memset(isFillData,0,count+keyAddCount);
3360
	
3361
	//stmsg("isFill 0 : %d",isFillData[0]);
3362
	while(dataCount != (count+keyAddCount) && times-- >0)
3363
	{	
3364
		st_i2c_read_bytes(0x40,raw,0x40);
3365
		//stmsg("%X %X %X data:%d key:%d",raw[0],raw[1],raw[2],dataCount,tMode[3]);
3366
		if(raw[0] == 6)
3367
		{
3368
			int index = raw[2];
3369
			//stmsg("isFill %d : %d %d , %d",index,isFillData[index],dataCount,count+keyAddCount);
3370
			if(isFillData[index] ==0)
3371
			{	
3372
				//stmsg("index %d",index);			
3373
				isFillData[index] = 1;
3374
				dataCount++;
3375
				//index = index*length;
3376
				for(i=0;i<length;i++)
3377
				{
3378
					rawI = raw[4+2*i]*0x100 + raw[5+2*i];
3379
					stmsg("Sensor RAW %d,%d = %d",index,i,rawI);
3380
					if(rawI > MAX_RAW_LIMIT || rawI  < MIN_RAW_LIMIT)
3381
					{
3382
						stmsg("Error: Sensor RAW %d,%d = %d out of limity (%d,%d)",index,i,rawI,MIN_RAW_LIMIT,MAX_RAW_LIMIT);
3383
						errorCount++;
3384
					}
3385
					//rawI[index+i] = raw[4+2*i]*0x100 + raw[5+2*i];
3386
				}
3387
			}
3388
		}
3389
		else if(raw[0]==7)
3390
		{
3391
			//key
3392
			//stmsg("key");
3393
			if(isFillData[count] ==0)
3394
			{	
3395
				isFillData[count] = 1 ;				
3396
				dataCount++;
3397
				for(i=0;i<tMode[3];i++)
3398
				{
3399
					rawI = raw[4+2*i]*0x100 + raw[5+2*i];
3400
					//stmsg("Key RAW %d = %d",i,rawI);
3401
					if(rawI > MAX_RAW_LIMIT || rawI  < MIN_RAW_LIMIT)
3402
					{
3403
						stmsg("Error: Key RAW %d = %d out of limity ",i,rawI,MIN_RAW_LIMIT,MAX_RAW_LIMIT);
3404
						errorCount++;
3405
					}
3406
					//rawI[count*length+i] = raw[4+2*i]*0x100 + raw[5+2*i];
3407
					
3408
				}
3409
			}
3410
		}		
3411
	}
3412
	
3413
	if(times <=0)
3414
	{
3415
		stmsg("Get 2D RAW fail!");
3416
		return -1;
3417
	}
3418
	return errorCount;
3419
}
3420
int st_drv_test_raw()
3421
{
3422
	stmsg("start of st_drv_test_raw");	
3423
	st_int result = 0;
3424
	st_u8 buf[8];
3425
	st_int sensorCount =0;
3426
	st_int raw_J[MAX_SENSOR_COUNT];
3427
		
3428
	/////////////////////////////
3429
	//check status
3430
	memset(buf,0,8);
3431
	if( st_i2c_read_bytes(1,buf,8) <0)
3432
	{
3433
		stmsg("get status fail");
3434
		return -1;	
3435
	}
3436

    
3437
	stmsg("status :0x%X",buf[0]);
3438
	if(buf[0] != 0 && buf[0] != 4)
3439
	{
3440
		stmsg("can't test in this status");
3441
		result = -1;
3442
		goto st_drv_notest;
3443
	}
3444
	//////////////////////////////
3445
	//go develop page
3446
	memset(buf,0,8);
3447
	st_i2c_read_bytes(0xFF, buf,8);
3448
	if(buf[1] != 0x53 || buf[2] != 0x54 || buf[3] != 0x50 || buf[4] != 0x41)
3449
	{
3450
		stmsg("ic check fail , not sitronix protocol type");
3451
		goto st_drv_notest;
3452
	}
3453
	
3454
	buf[0] = buf[6];
3455
	buf[1] = buf[7];
3456
	st_i2c_write_bytes(buf,2);	
3457
	
3458
	st_i2c_read_bytes(0xFF,buf,2);
3459
	stmsg("page 0x%X",buf[0]);
3460
	if(buf[0] != 0xEF)
3461
	{
3462
		stmsg("change page fail");
3463
		goto st_drv_notest;
3464
	}
3465
	///////////////////////////////
3466
	//get tmode
3467
	st_int tMode[4];
3468
	tMode[0] = TX_ASSIGNMENT;	//tx is ?
3469
	st_i2c_read_bytes(0xF5,buf,3);
3470
	tMode[1] = buf[0];	//x
3471
	tMode[2] = buf[1];	//y
3472
	tMode[3] = buf[2]&0xf;	// key
3473

    
3474
	sensorCount = tMode[1]+tMode[2]+tMode[3];
3475
	
3476
	stmsg("sensor count:%d %d %d",tMode[1],tMode[2],tMode[3]);
3477
	//////////////////////////////
3478
	//get raw and judge
3479
	result = st_drv_Get_2D_RAW(tMode,raw_J,0);
3480
	if(result !=0)
3481
	{
3482
		stmsg("Error: Test fail with %d sensor",result);
3483
		result = -1;		
3484
	}
3485
	else
3486
	{
3487
	stmsg("Test successed!");
3488
	}
3489
	//////////////////////////////
3490
	//reset
3491
	buf[0] = 2;
3492
	buf[1] = 1;
3493
	st_i2c_write_bytes(buf,2);
3494

    
3495
	st_msleep(100);	
3496
st_drv_notest:		
3497
	return result;
3498
}
3499
#endif //ST_TEST_RAW
(2-2/2) Go to top
Add picture from clipboard (Maximum size: 1 GB)