import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / input / touchscreen / mediatek / GT818B / gt818b_driver.c
CommitLineData
6fa3eb70
S
1#include <linux/init.h>
2#include <linux/module.h>
3#include <linux/delay.h>
4#include <linux/i2c.h>
5#include <linux/input.h>
6#include <linux/slab.h>
7#include <linux/gpio.h>
8#include <linux/sched.h>
9#include <linux/kthread.h>
10#include <linux/bitops.h>
11#include <linux/kernel.h>
12#include <linux/delay.h>
13#include <linux/byteorder/generic.h>
14#ifdef CONFIG_HAS_EARLYSUSPEND
15#include <linux/earlysuspend.h>
16#endif
17#include <linux/interrupt.h>
18#include <linux/time.h>
19#include <linux/rtpm_prio.h>
20
21#include <linux/proc_fs.h>
22#include <asm/uaccess.h>
23
24
25
26#include "tpd_custom_GT818B.h"
27#include <mach/mt_pm_ldo.h>
28#include <mach/mt_typedefs.h>
29#include <mach/mt_boot.h>
30
31#include "tpd.h"
32#include <cust_eint.h>
33#include <linux/jiffies.h>
34
35#ifndef TPD_NO_GPIO
36#include "cust_gpio_usage.h"
37#endif
38
39#include "gt818_fw.h"
40
41extern struct tpd_device *tpd;
42
43static int tpd_flag = 0;
44static int tpd_halt=0;
45static struct task_struct *thread = NULL;
46static DECLARE_WAIT_QUEUE_HEAD(waiter);
47static DEFINE_MUTEX(esd_check);
48
49
50#ifdef TPD_HAVE_BUTTON
51static int tpd_keys_local[TPD_KEY_COUNT] = TPD_KEYS;
52static int tpd_keys_dim_local[TPD_KEY_COUNT][4] = TPD_KEYS_DIM;
53#endif
54#if (defined(TPD_WARP_START) && defined(TPD_WARP_END))
55static int tpd_wb_start_local[TPD_WARP_CNT] = TPD_WARP_START;
56static int tpd_wb_end_local[TPD_WARP_CNT] = TPD_WARP_END;
57#endif
58#if (defined(TPD_HAVE_CALIBRATION) && !defined(TPD_CUSTOM_CALIBRATION))
59//static int tpd_calmat_local[8] = TPD_CALIBRATION_MATRIX;
60static int tpd_def_calmat_local[8] = TPD_CALIBRATION_MATRIX;
61#endif
62
63static void tpd_eint_interrupt_handler(void);
64static int touch_event_handler(void *unused);
65static int tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id);
66static int tpd_i2c_detect(struct i2c_client *client, struct i2c_board_info *info);
67static int tpd_i2c_remove(struct i2c_client *client);
68#if 0
69extern void mt65xx_eint_unmask(unsigned int line);
70extern void mt65xx_eint_mask(unsigned int line);
71extern void mt65xx_eint_set_hw_debounce(kal_uint8 eintno, kal_uint32 ms);
72extern kal_uint32 mt65xx_eint_set_sens(kal_uint8 eintno, kal_bool sens);
73extern void mt65xx_eint_registration(kal_uint8 eintno, kal_bool Dbounce_En,
74 kal_bool ACT_Polarity, void (EINT_FUNC_PTR)(void),
75 kal_bool auto_umask);
76#endif
77#ifdef CREATE_WR_NODE
78extern s32 init_wr_node(struct i2c_client*);
79extern void uninit_wr_node(void);
80#endif
81
82extern int gt818_downloader( struct i2c_client *client, unsigned short ver, unsigned char * data );
83//#define TPD_DITO_SENSOR
84//#define TPD_CONDITION_SWITCH
85#define TPD_RESET_ISSUE_WORKAROUND
86#define TPD_MAX_RESET_COUNT 3
87
88#ifdef ESD_PROTECT
89static struct delayed_work tpd_esd_check_work;
90static struct workqueue_struct * tpd_esd_check_workqueue = NULL;
91static void tpd_esd_check_func(struct work_struct *);
92#define ESD_CHECK_CIRCLE 500
93#define ESD_CHECK_DATA_LEN 6
94#define ESD_CHECK_TIME 3
95unsigned char esd_check_data[ESD_CHECK_TIME*ESD_CHECK_DATA_LEN];
96int esd_checked_time = 0;
97#endif
98#define TPD_OK 0
99
100#define TPD_CONFIG_REG_BASE 0x6A2
101#define TPD_FREQ_CAL_RESULT 0x70F
102#define TPD_TOUCH_INFO_REG_BASE 0x712
103#define TPD_POINT_INFO_REG_BASE 0x722
104#define TPD_VERSION_INFO_REG 0x713
105#define TPD_VERSION_BASIC_REG 0x717
106#define TPD_KEY_INFO_REG_BASE 0x721
107#define TPD_POWER_MODE_REG 0x692
108#define TPD_HANDSHAKING_START_REG 0xFFF
109#define TPD_HANDSHAKING_END_REG 0x8000
110#define TPD_FREQ_REG 0x1522
111#define TPD_SOFT_RESET_MODE 0x01
112#define TPD_POINT_INFO_LEN 8
113#define TPD_MAX_POINTS 5
114#define MAX_TRANSACTION_LENGTH 8
115#define I2C_DEVICE_ADDRESS_LEN 2
116