input: touchscreen: add touch screen of gslx680 for rk3399-firefly-edp
[firefly-linux-kernel-4.4.55.git] / drivers / input / touchscreen / atmel_mxt1386.h
1 /*\r
2  *  Atmel maXTouch header file\r
3  *  \r
4  *  Copyright (c) 2010 Atmel Corporation\r
5  *\r
6  *  This program is free software; you can redistribute it and/or modify\r
7  *  it under the terms of the GNU General Public License version 2 or 3 as\r
8  *  published by the Free Software Foundation.\r
9  *  See the file "COPYING" in the main directory of this archive\r
10  *  for more details.\r
11  *\r
12  */\r
13   #include <linux/device.h>\r
14 \r
15 \r
16 #define MXT224_I2C_ADDR1                                0x4A\r
17 #define MXT224_I2C_ADDR2                                0x4B\r
18 #define MXT1386_I2C_ADDR1                               0x4C\r
19 #define MXT1386_I2C_ADDR2                               0x4D\r
20 #define MXT1386_I2C_ADDR3                               0x5A\r
21 #define MXT1386_I2C_ADDR4                               0x5B\r
22 \r
23 /*\r
24  * Select this address from above depending on what maXTouch\r
25  * chip you have and how it's address pins are configured;\r
26  * see datasheet.\r
27  */\r
28 \r
29 #define MXT_I2C_ADDRESS                                 MXT1386_I2C_ADDR1\r
30 \r
31 #define MXT_BL_ADDRESS                                  0x25\r
32 \r
33 #define MXT224_FAMILYID                                 0x80\r
34 #define MXT1386_FAMILYID                                0xA0\r
35 \r
36 #define MXT224_CAL_VARIANTID                            0x01\r
37 #define MXT224_UNCAL_VARIANTID                          0x00\r
38 #define MXT1386_CAL_VARIANTID                           0x00\r
39 \r
40 #define MXT_MAX_REPORTED_WIDTH                          255\r
41 #define MXT_MAX_REPORTED_PRESSURE                       255\r
42 #define MXT_MAX_TOUCH_SIZE                              255\r
43 #define MXT_MAX_NUM_TOUCHES                             10\r
44 \r
45 /* Fixed addresses inside maXTouch device */\r
46 #define MXT_ADDR_INFO_BLOCK                             0\r
47 #define MXT_ADDR_OBJECT_TABLE                           7\r
48 #define MXT_ID_BLOCK_SIZE                               7\r
49 #define MXT_OBJECT_TABLE_ELEMENT_SIZE                   6\r
50 \r
51 /* Object types */\r
52 #define MXT_DEBUG_DELTAS_T2                             2\r
53 #define MXT_DEBUG_REFERENCES_T3                         3\r
54 #define MXT_GEN_MESSAGEPROCESSOR_T5                     5\r
55 #define MXT_GEN_COMMANDPROCESSOR_T6                     6\r
56 #define MXT_GEN_POWERCONFIG_T7                          7\r
57 #define MXT_GEN_ACQUIRECONFIG_T8                        8\r
58 #define MXT_TOUCH_MULTITOUCHSCREEN_T9                   9\r
59 #define MXT_TOUCH_SINGLETOUCHSCREEN_T10                 10\r
60 #define MXT_TOUCH_XSLIDER_T11                           11\r
61 #define MXT_TOUCH_YSLIDER_T12                           12\r
62 #define MXT_TOUCH_XWHEEL_T13                            13\r
63 #define MXT_TOUCH_YWHEEL_T14                            14\r
64 #define MXT_TOUCH_KEYARRAY_T15                          15\r
65 #define MXT_SPT_COMMSCONFIG_T18                         18\r
66 #define MXT_SPT_GPIOPWM_T19                             19\r
67 #define MXT_PROCI_GRIPFACESUPPRESSION_T20               20\r
68 #define MXT_PROCG_NOISESUPPRESSION_T22                  22\r
69 #define MXT_TOUCH_PROXIMITY_T23                         23\r
70 #define MXT_PROCI_ONETOUCHGESTUREPROCESSOR_T24          24\r
71 #define MXT_SPT_SELFTEST_T25                            25\r
72 #define MXT_DEBUG_CTERANGE_T26                          26\r
73 #define MXT_PROCI_TWOTOUCHGESTUREPROCESSOR_T27          27\r
74 #define MXT_SPT_CTECONFIG_T28                           28\r
75 #define MXT_TOUCH_KEYSET_T31                            31\r
76 #define MXT_TOUCH_XSLIDERSET_T32                        32\r
77 #define MXT_DEBUG_DIAGNOSTIC_T37                        37\r
78 #define MXT_USER_INFO_T38                               38\r
79 #define MXT_PROCI_GRIPSUPPRESSION_T40                   40\r
80 #define MXT_PROCI_PALMSUPPRESSION_T41                   41\r
81 #define MXT_SPT_DIGITIZER_T43                           43\r
82 \r
83 \r
84 \r
85 /*\r
86  * If a message is read from mXT when there's no new messages available,\r
87  * the report ID of the message will be 0xFF.\r
88  */\r
89 #define MXT_END_OF_MESSAGES                             0xFF\r
90 \r
91 \r
92 /* GEN_COMMANDPROCESSOR_T6 Register offsets from T6 base address */\r
93 #define MXT_ADR_T6_RESET                                0x00\r
94 #define MXT_ADR_T6_BACKUPNV                             0x01\r
95 #define MXT_ADR_T6_CALIBRATE                            0x02\r
96 #define MXT_ADR_T6_REPORTALL                            0x03\r
97 #define MXT_ADR_T6_RESERVED                             0x04\r
98 #define MXT_ADR_T6_DIAGNOSTIC                           0x05\r
99 \r
100 /* T6 Debug Diagnostics Commands */\r
101 #define MXT_CMD_T6_PAGE_UP          0x01\r
102 #define MXT_CMD_T6_PAGE_DOWN        0x02\r
103 #define MXT_CMD_T6_DELTAS_MODE      0x10\r
104 #define MXT_CMD_T6_REFERENCES_MODE  0x11\r
105 #define MXT_CMD_T6_CTE_MODE         0x31\r
106 \r
107 /* T6 Backup Command */\r
108 #define MXT_CMD_T6_BACKUP           0x55\r
109 \r
110 /* SPT_DEBUG_DIAGNOSTIC_T37 Register offsets from T37 base address */\r
111 #define MXT_ADR_T37_PAGE                                0x01\r
112 #define MXT_ADR_T37_DATA                                0x02\r
113 \r
114 \r
115 \r
116 /************************************************************************\r
117  * MESSAGE OBJECTS ADDRESS FIELDS\r
118  *\r
119  ************************************************************************/\r
120 #define MXT_MSG_REPORTID                                0x00\r
121 \r
122 \r
123 /* MXT_GEN_MESSAGEPROCESSOR_T5 Message address definitions              */\r
124 #define MXT_MSG_T5_REPORTID                             0x00\r
125 #define MXT_MSG_T5_MESSAGE                              0x01\r
126 #define MXT_MSG_T5_CHECKSUM                             0x08\r
127 \r
128 /* MXT_GEN_COMMANDPROCESSOR_T6 Message address definitions              */\r
129 #define MXT_MSG_T6_STATUS                               0x01\r
130 #define         MXT_MSGB_T6_COMSERR             0x04\r
131 #define         MXT_MSGB_T6_CFGERR              0x08\r
132 #define         MXT_MSGB_T6_CAL                 0x10\r
133 #define         MXT_MSGB_T6_SIGERR              0x20\r
134 #define         MXT_MSGB_T6_OFL                 0x40\r
135 #define         MXT_MSGB_T6_RESET               0x80\r
136 /* Three bytes */\r
137 #define MXT_MSG_T6_CHECKSUM                             0x02\r
138 \r
139 /* MXT_GEN_POWERCONFIG_T7 NO Message address definitions                */\r
140 /* MXT_GEN_ACQUIRECONFIG_T8 Message address definitions                 */\r
141 /* MXT_TOUCH_MULTITOUCHSCREEN_T9 Message address definitions            */\r
142 \r
143 #define MXT_MSG_T9_STATUS                               0x01\r
144 /* Status bit field */\r
145 #define         MXT_MSGB_T9_SUPPRESS            0x02\r
146 #define         MXT_MSGB_T9_AMP                 0x04\r
147 #define         MXT_MSGB_T9_VECTOR              0x08\r
148 #define         MXT_MSGB_T9_MOVE                0x10\r
149 #define         MXT_MSGB_T9_RELEASE             0x20\r
150 #define         MXT_MSGB_T9_PRESS               0x40\r
151 #define         MXT_MSGB_T9_DETECT              0x80\r
152 \r
153 #define MXT_MSG_T9_XPOSMSB                              0x02\r
154 #define MXT_MSG_T9_YPOSMSB                              0x03\r
155 #define MXT_MSG_T9_XYPOSLSB                             0x04\r
156 #define MXT_MSG_T9_TCHAREA                              0x05\r
157 #define MXT_MSG_T9_TCHAMPLITUDE                         0x06\r
158 #define MXT_MSG_T9_TCHVECTOR                            0x07\r
159 \r
160 \r
161 /* MXT_SPT_GPIOPWM_T19 Message address definitions                      */\r
162 #define MXT_MSG_T19_STATUS                              0x01\r
163 \r
164 /* MXT_PROCI_GRIPFACESUPPRESSION_T20 Message address definitions        */\r
165 #define MXT_MSG_T20_STATUS                              0x01\r
166 #define         MXT_MSGB_T20_FACE_SUPPRESS      0x01\r
167 /* MXT_PROCG_NOISESUPPRESSION_T22 Message address definitions           */\r
168 #define MXT_MSG_T22_STATUS                              0x01\r
169 #define         MXT_MSGB_T22_FHCHG              0x01\r
170 #define         MXT_MSGB_T22_GCAFERR            0x04\r
171 #define         MXT_MSGB_T22_FHERR              0x08\r
172 #define MXT_MSG_T22_GCAFDEPTH                           0x02\r
173 \r
174 /* MXT_TOUCH_PROXIMITY_T23 Message address definitions                  */\r
175 #define MXT_MSG_T23_STATUS                              0x01\r
176 #define         MXT_MSGB_T23_FALL               0x20\r
177 #define         MXT_MSGB_T23_RISE               0x40\r
178 #define         MXT_MSGB_T23_DETECT             0x80\r
179 /* 16 bit */\r
180 #define MXT_MSG_T23_PROXDELTA                           0x02\r
181 \r
182 /* MXT_PROCI_ONETOUCHGESTUREPROCESSOR_T24 Message address definitions   */\r
183 #define MXT_MSG_T24_STATUS                              0x01\r
184 #define MXT_MSG_T24_XPOSMSB                             0x02\r
185 #define MXT_MSG_T24_YPOSMSB                             0x03\r
186 #define MXT_MSG_T24_XYPOSLSB                            0x04\r
187 #define MXT_MSG_T24_DIR                                 0x05\r
188 /* 16 bit */\r
189 #define MXT_MSG_T24_DIST                                0x06\r
190 \r
191 /* MXT_SPT_SELFTEST_T25 Message address definitions                     */\r
192 #define MXT_MSG_T25_STATUS                              0x01\r
193 /* 5 Bytes */\r
194 #define         MXT_MSGR_T25_OK                 0xFE\r
195 #define         MXT_MSGR_T25_INVALID_TEST       0xFD\r
196 #define         MXT_MSGR_T25_PIN_FAULT          0x11\r
197 #define         MXT_MSGR_T25_SIGNAL_LIMIT_FAULT 0x17\r
198 #define         MXT_MSGR_T25_GAIN_ERROR         0x20\r
199 #define MXT_MSG_T25_INFO                                0x02\r
200 \r
201 /* MXT_PROCI_TWOTOUCHGESTUREPROCESSOR_T27 Message address definitions   */\r
202 #define MXT_MSG_T27_STATUS                      0x01\r
203 #define         MXT_MSGB_T27_ROTATEDIR          0x10\r
204 #define         MXT_MSGB_T27_PINCH              0x20\r
205 #define         MXT_MSGB_T27_ROTATE             0x40\r
206 #define         MXT_MSGB_T27_STRETCH            0x80\r
207 #define MXT_MSG_T27_XPOSMSB                     0x02\r
208 #define MXT_MSG_T27_YPOSMSB                     0x03\r
209 #define MXT_MSG_T27_XYPOSLSB                    0x04\r
210 #define MXT_MSG_T27_ANGLE                       0x05\r
211 \r
212 /* 16 bit */\r
213 #define MXT_MSG_T27_SEPARATION                          0x06\r
214 \r
215 /* MXT_SPT_CTECONFIG_T28 Message address definitions                    */\r
216 #define MXT_MSG_T28_STATUS                              0x01\r
217 #define MXT_MSGB_T28_CHKERR             0x01\r
218 \r
219 /* One Touch Events */\r
220 #define MXT_GESTURE_RESERVED            0x00\r
221 #define MXT_GESTURE_PRESS               0x01\r
222 #define MXT_GESTURE_RELEASE             0x02\r
223 #define MXT_GESTURE_TAP                 0x03\r
224 #define MXT_GESTURE_DOUBLE_TAP          0x04\r
225 #define MXT_GESTURE_FLICK               0x05\r
226 #define MXT_GESTURE_DRAG                0x06\r
227 #define MXT_GESTURE_SHORT_PRESS         0x07\r
228 #define MXT_GESTURE_LONG_PRESS          0x08\r
229 #define MXT_GESTURE_REPEAT_PRESS        0x09\r
230 #define MXT_GESTURE_TAP_AND_PRESS       0x0a\r
231 #define MXT_GESTURE_THROW               0x0b\r
232 \r
233 /* Two-touch events */\r
234 #define MXT_GESTURE_STRETCH             (1 << 7)\r
235 #define MXT_GESTURE_ROTATE              (1 << 6)\r
236 #define MXT_GESTURE_PINCH               (1 << 5)\r
237 #define MXT_GESTURE_ROTATEDIR           (1 << 4)\r
238 \r
239 /* Bootloader states */\r
240 #define WAITING_BOOTLOAD_COMMAND   0xC0\r
241 #define WAITING_FRAME_DATA         0x80\r
242 #define APP_CRC_FAIL               0x40\r
243 #define FRAME_CRC_CHECK            0x02\r
244 #define FRAME_CRC_PASS             0x04\r
245 #define FRAME_CRC_FAIL             0x03\r
246 \r
247 #define MXT_MAX_FRAME_SIZE         276\r
248 \r
249 /* Debug levels */\r
250 #define DEBUG_INFO     1\r
251 #define DEBUG_VERBOSE  2\r
252 #define DEBUG_MESSAGES 5\r
253 #define DEBUG_RAW      8\r
254 #define DEBUG_TRACE   10\r
255 \r
256 /* IOCTL commands */\r
257 /* TODO: get correct numbers! */\r
258 #define MXT_SET_ADDRESS_IOCTL ('x' + 1)  /* Sets the internal address pointer */\r
259 #define MXT_RESET_IOCTL       ('x' + 2)  /* Resets the device */\r
260 #define MXT_CALIBRATE_IOCTL   ('x' + 3)  /* Calibrates the device */\r
261 #define MXT_BACKUP_IOCTL      ('x' + 4)  /* Backups the current state of registers to \r
262                                   NVM */\r
263 #define MXT_NONTOUCH_MSG_IOCTL ('x' + 5)  /* Only non-touch messages can be read from\r
264                                   the message buffer (/dev/maXTouch_messages)*/\r
265 #define MXT_ALL_MSG_IOCTL ('x' + 6)  /* All messages can be read from the message\r
266                                   buffer */\r
267 \r
268 /* Message buffer size. This is a ring buffer, and when full, the oldest entry\r
269    will be overwritten. */\r
270 #define MXT_MESSAGE_BUFFER_SIZE  128\r
271 \r
272 /*-------------- following added by acgzx 2011.03.30 --------------*/\r
273 \r
274 /* Read dummy message to make high CHG pin of minimumvalue */\r
275 #define MXT_MAKE_HIGH_CHG_SIZE_MIN      10\r
276 #define MXT_ACK_BUFFER_SIZE             16\r
277 \r
278 \r
279 /**\r
280  * struct mxt_platform_data - includes platform specific informatio\r
281  * related to Atmel maXTouch touchscreen controller.\r
282  * \r
283  * @numtouch:           Number of simultaneous touches supported\r
284  * @init_platform_hw(): Initialization function, which can for example\r
285  *                      trigger a hardware reset by toggling a GPIO pin\r
286  * @exit_platform_hw(): Function to run when the driver is unloaded.\r
287  * @valid_interrupt():  Function that checks the validity of the interrupt -\r
288  *                      function that check the validity of a interrupt (by\r
289  *                      reading the changeline interrupt pin and checking that\r
290  *                      it really is low for example).\r
291  * @max_x:              Reported X range\r
292  * @max_y:              Reported Y range\r
293  */\r
294  \r
295 \r