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