Merge tag 'v4.4-rc6'
[firefly-linux-kernel-4.4.55.git] / drivers / input / touchscreen / 86v_gt811_ts.h
1 /* drivers/input/touchscreen/gt811.h\r
2  *\r
3  * Copyright (C) 2010 - 2011 Goodix, Inc.\r
4  * \r
5  * This program is free software; you can redistribute it and/or modify\r
6  * it under the terms of the GNU General Public License as published by\r
7  * the Free Software Foundation; either version 2 of the License, or\r
8  * (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful, but WITHOUT\r
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
13  * more details.\r
14  *\r
15  *Any problem,please contact andrew@goodix.com,+86 755-33338828\r
16  *\r
17  */\r
18 \r
19 #ifndef         _LINUX_GT811_H\r
20 #define         _LINUX_GT811_H\r
21 \r
22 #include <linux/earlysuspend.h>\r
23 #include <linux/hrtimer.h>\r
24 #include <linux/i2c.h>\r
25 #include <linux/input.h>\r
26 \r
27 //*************************TouchScreen Work Part*****************************\r
28 #define GOODIX_I2C_NAME "gt811_ts"\r
29 #define GT801_PLUS\r
30 #define GT801_NUVOTON\r
31 #define GUITAR_UPDATE_STATE 0x02\r
32 \r
33 //define resolution of the touchscreen\r
34 #define TOUCH_MAX_HEIGHT        800                     \r
35 #define TOUCH_MAX_WIDTH         480\r
36 //#define STOP_IRQ_TYPE                     // if define then   no stop irq in irq_handle   kuuga add 1202S\r
37 #define REFRESH 0     //0~0x64   Scan rate = 10000/(100+REFRESH)//define resolution of the LCD\r
38 \r
39 #define SHUTDOWN_PORT       RK30_PIN0_PB6// RK2928_PIN0_PD3 \r
40 #define INT_PORT                iomux_mode_to_gpio(SPI0_CS1)// RK30_PIN1_PB7//RK2928_PIN1_PB0  \r
41 \r
42 \r
43 #ifdef INT_PORT\r
44         #define TS_INT                  gpio_to_irq(INT_PORT)                   //Interrupt Number,EINT18(119)\r
45 //      #define INT_CFG               S3C_GPIO_SFN(3)                                   //IO configer as EINT\r
46 #else\r
47         #define TS_INT  0\r
48 #endif  \r
49 \r
50 /////////////////////////////// UPDATE STEP 5 START /////////////////////////////////////////////////////////////////\r
51 #define TPD_CHIP_VERSION_C_FIRMWARE_BASE 0x5A\r
52 #define TPD_CHIP_VERSION_D1_FIRMWARE_BASE 0x7A\r
53 #define TPD_CHIP_VERSION_E_FIRMWARE_BASE 0x9A\r
54 #define TPD_CHIP_VERSION_D2_FIRMWARE_BASE 0xBA\r
55 \r
56 \r
57 /////////////////////////////// UPDATE STEP 5 END /////////////////////////////////////////////////////////////////\r
58 \r
59 #define FLAG_UP         0\r
60 #define FLAG_DOWN               1\r
61 //set GT801 PLUS trigger mode,Ö»ÄÜÉèÖÃ0»ò1 \r
62 //#define INT_TRIGGER           1          // 1=rising 0=falling\r
63 #define POLL_TIME               10      //actual query spacing interval:POLL_TIME+6\r
64 \r
65 #define GOODIX_MULTI_TOUCH\r
66 #ifdef GOODIX_MULTI_TOUCH\r
67         #define MAX_FINGER_NUM  5       \r
68 #else\r
69         #define MAX_FINGER_NUM  1       \r
70 #endif\r
71 \r
72 #if defined(INT_PORT)\r
73         #if MAX_FINGER_NUM <= 3\r
74         #define READ_BYTES_NUM 2+2+MAX_FINGER_NUM*5\r
75         #elif MAX_FINGER_NUM == 4\r
76         #define READ_BYTES_NUM 2+28\r
77         #elif MAX_FINGER_NUM == 5\r
78         #define READ_BYTES_NUM 2+34\r
79         #endif\r
80 #else   \r
81         #define READ_BYTES_NUM 2+34\r
82 #endif\r
83 \r
84 #define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0)\r
85 \r
86 #define READ_TOUCH_ADDR_H 0x07\r
87 #define READ_TOUCH_ADDR_L 0x21                          //GT811 0x721\r
88 #define READ_KEY_ADDR_H 0x07\r
89 #define READ_KEY_ADDR_L 0x21\r
90 #define READ_COOR_ADDR_H 0x07\r
91 #define READ_COOR_ADDR_L 0x22\r
92 #define READ_ID_ADDR_H 0x00\r
93 #define READ_ID_ADDR_L 0xff\r
94 //****************************Éý¼¶Ä£¿é²ÎÊý******************************************\r
95 \r
96 //******************************************************************************\r
97 struct gt811_ts_data {\r
98         uint16_t addr;\r
99         uint8_t bad_data;\r
100         struct i2c_client *client;\r
101         struct input_dev *input_dev;\r
102         int use_reset;          //use RESET flag\r
103         int use_irq;            //use EINT flag\r
104         int read_mode;          //read moudle mode,20110221 by andrew\r
105         struct hrtimer timer;\r
106         struct work_struct  work;\r
107         char phys[32];\r
108         int retry;\r
109         int irq;\r
110         spinlock_t                              irq_lock;      //add by kuuga\r
111         int                              irq_is_disable; /* 0: irq enable */ //add by kuuga\r
112         uint16_t abs_x_max;\r
113         uint16_t abs_y_max;\r
114         uint8_t max_touch_num;\r
115         uint8_t int_trigger_type;\r
116         uint8_t btn_state;                    // key states\r
117 /////////////////////////////// UPDATE STEP 6 START /////////////////////////////////////////////////////////////////\r
118        unsigned int version;\r
119 /////////////////////////////// UPDATE STEP 6 END /////////////////////////////////////////////////////////////////\r
120 \r
121         struct early_suspend early_suspend;\r
122         int (*power)(struct gt811_ts_data * ts, int on);\r
123 };\r
124 \r
125 //*****************************End of Part I *********************************\r
126 \r
127 //*************************Touchkey Surpport Part*****************************\r
128 /*#define HAVE_TOUCH_KEY\r
129 //#define READ_KEY_VALUE\r
130 //#define READ_KEY_COOR\r
131 \r
132 #ifdef HAVE_TOUCH_KEY\r
133         const uint16_t toucher_key_array[]={\r
134                                                                           KEY_MENU,                             //MENU\r
135                                                                           KEY_HOME,\r
136                                                                           KEY_BACK,                             \r
137                                                                           KEY_SEARCH            \r
138                                                                          }; \r
139         #define MAX_KEY_NUM      (sizeof(toucher_key_array)/sizeof(toucher_key_array[0]))\r
140 #endif\r
141 */\r
142 //#define COOR_TO_KEY\r
143     #ifdef COOR_TO_KEY\r
144 \r
145     #define KEY_X       40\r
146     #define KEY_Y       20\r
147     #if 0\r
148     #define AREA_X      0\r
149     #else\r
150     #define AREA_Y      800\r
151     #endif\r
152 \r
153     enum {x, y};\r
154     s32 key_center[MAX_KEY_NUM][2] = {\r
155                 \r
156         {48,840},{124,840},{208,840},{282,840}\r
157         \r
158                            };\r
159 \r
160     #endif \r
161 \r
162 //*****************************End of Part II*********************************\r
163 \r
164 /////////////////////////////// UPDATE STEP 7 START /////////////////////////////////////////////////////////////////\r
165 //*************************Firmware Update part*******************************\r
166 //#define AUTO_UPDATE_GT811\r
167 \r
168 #define CONFIG_TOUCHSCREEN_GOODIX_IAP        \r
169 #ifdef CONFIG_TOUCHSCREEN_GOODIX_IAP\r
170 static int goodix_update_write(struct file *filp, const char __user *buff, unsigned long len, void *data);\r
171 static int goodix_update_read( char *page, char **start, off_t off, int count, int *eof, void *data );\r
172 \r
173 #define PACK_SIZE                                       64                                      //update file package size\r
174 //#define MAX_TIMEOUT                                   30000                           //update time out conut\r
175 //#define MAX_I2C_RETRIES                               10                                      //i2c retry times\r
176 \r
177 //write cmd\r
178 #define APK_UPDATE_TP               1\r
179 #define APK_READ_FUN                 10\r
180 #define APK_WRITE_CFG               11\r
181 \r
182 //fun cmd\r
183 //#define CMD_DISABLE_TP             0\r
184 //#define CMD_ENABLE_TP              1\r
185 #define CMD_READ_VER               2\r
186 #define CMD_READ_RAW               3\r
187 #define CMD_READ_DIF               4\r
188 #define CMD_READ_CFG               5\r
189 #define CMD_READ_CHIP_TYPE         6\r
190 //#define CMD_SYS_REBOOT             101\r
191 \r
192 //read mode\r
193 #define MODE_RD_VER                1\r
194 #define MODE_RD_RAW                2\r
195 #define MODE_RD_DIF                3\r
196 #define MODE_RD_CFG                4\r
197 #define MODE_RD_CHIP_TYPE          5\r
198 \r
199 #if 0\r
200 struct tpd_firmware_info_t\r
201 {\r
202     int magic_number_1;\r
203     int magic_number_2;\r
204     unsigned short version;\r
205     unsigned short length;    \r
206     unsigned short checksum;\r
207     unsigned char data;\r
208 };\r
209 #else\r
210 #pragma pack(1)\r
211 struct tpd_firmware_info_t\r
212 {\r
213         unsigned char  chip_type;\r
214         unsigned short version;\r
215         unsigned char  rom_version;\r
216         unsigned char  reserved[3];\r
217         unsigned short start_addr;\r
218         unsigned short length;\r
219         unsigned char  checksum[3];\r
220         unsigned char  mandatory_flag[6];\r
221         unsigned char  data;    \r
222 };\r
223 #pragma pack()\r
224 #endif\r
225 \r
226 #define  NVRAM_LEN               0x0FF0   //    nvram total space\r
227 #define  NVRAM_BOOT_SECTOR_LEN   0x0100 // boot sector \r
228 #define  NVRAM_UPDATE_START_ADDR 0x4100\r
229 \r
230 #define  BIT_NVRAM_STROE            0\r
231 #define  BIT_NVRAM_RECALL           1\r
232 #define BIT_NVRAM_LOCK 2\r
233 #define  REG_NVRCS_H 0X12\r
234 #define  REG_NVRCS_L 0X01\r
235 #define GT811_SET_INT_PIN( level ) gpio_direction_output(INT_PORT, level) //null macro now\r
236 #endif\r
237 //*****************************End of Part III********************************\r
238 /////////////////////////////// UPDATE STEP 7 END /////////////////////////////////////////////////////////////////\r
239 \r
240 struct gt811_platform_data {\r
241         uint32_t version;       /* Use this entry for panels with */\r
242     u16     model;          /* 801. */\r
243     bool    swap_xy;        /* swap x and y axes */\r
244     u16     x_min, x_max;\r
245     u16     y_min, y_max;\r
246     bool    x_reverse, y_reverse;\r
247     int     (*get_pendown_state)(void);\r
248     int     (*init_platform_hw)(void);\r
249     int     (*platform_sleep)(void);\r
250     int     (*platform_wakeup)(void);\r
251     void    (*exit_platform_hw)(void);\r
252     int     gpio_reset;\r
253     bool    gpio_reset_active_low;\r
254     \r
255 \r
256     //reservation\r
257 };\r
258 \r
259 #define RAW_DATA_READY          1\r
260 #define RAW_DATA_NON_ACTIVE     0xffffffff\r
261 #define RAW_DATA_ACTIVE         0\r
262 \r
263 \r
264 enum CHIP_TYPE\r
265 {\r
266     GT800 = 1,\r
267     GT800PLUS,\r
268     GT800PLUS3,\r
269     GT816,\r
270     GT811,\r
271     GT8105,\r
272     GT8110,\r
273     GT818PLUS\r
274 };\r
275 \r
276 \r
277 #endif /* _LINUX_GOODIX_TOUCH_H */\r