2 * Atmel maXTouch header file
\r
4 * Copyright (c) 2010 Atmel Corporation
\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
13 #include <linux/device.h>
\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
24 * Select this address from above depending on what maXTouch
\r
25 * chip you have and how it's address pins are configured;
\r
29 #define MXT_I2C_ADDRESS MXT1386_I2C_ADDR1
\r
31 #define MXT_BL_ADDRESS 0x25
\r
33 #define MXT224_FAMILYID 0x80
\r
34 #define MXT1386_FAMILYID 0xA0
\r
36 #define MXT224_CAL_VARIANTID 0x01
\r
37 #define MXT224_UNCAL_VARIANTID 0x00
\r
38 #define MXT1386_CAL_VARIANTID 0x00
\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
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
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
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
89 #define MXT_END_OF_MESSAGES 0xFF
\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
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
107 /* T6 Backup Command */
\r
108 #define MXT_CMD_T6_BACKUP 0x55
\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
116 /************************************************************************
\r
117 * MESSAGE OBJECTS ADDRESS FIELDS
\r
119 ************************************************************************/
\r
120 #define MXT_MSG_REPORTID 0x00
\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
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
137 #define MXT_MSG_T6_CHECKSUM 0x02
\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
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
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
161 /* MXT_SPT_GPIOPWM_T19 Message address definitions */
\r
162 #define MXT_MSG_T19_STATUS 0x01
\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
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
180 #define MXT_MSG_T23_PROXDELTA 0x02
\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
189 #define MXT_MSG_T24_DIST 0x06
\r
191 /* MXT_SPT_SELFTEST_T25 Message address definitions */
\r
192 #define MXT_MSG_T25_STATUS 0x01
\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
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
213 #define MXT_MSG_T27_SEPARATION 0x06
\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
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
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
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
247 #define MXT_MAX_FRAME_SIZE 276
\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
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
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
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
272 /*-------------- following added by acgzx 2011.03.30 --------------*/
\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
280 * struct mxt_platform_data - includes platform specific informatio
\r
281 * related to Atmel maXTouch touchscreen controller.
\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