2 * Copyright (c) 2014 The DragonFly Project. All rights reserved.
4 * This code is derived from software contributed to The DragonFly Project
5 * by Matthew Dillon <dillon@backplane.com>
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in
15 * the documentation and/or other materials provided with the
17 * 3. Neither the name of The DragonFly Project nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific, prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 *------------------------------------------------------------------------------
35 * Copyright 2011 Atmel Corporation. All rights reserved.
37 * Redistribution and use in source and binary forms, with or without
38 * modification, are permitted provided that the following conditions are met:
40 * 1. Redistributions of source code must retain the above copyright notice,
41 * this list of conditions and the following disclaimer.
43 * 2. Redistributions in binary form must reproduce the above copyright
44 * notice, this list of conditions and the following disclaimer in the
45 * documentation and/or other materials provided with the distribution.
47 * THIS SOFTWARE IS PROVIDED BY ATMEL ''AS IS'' AND ANY EXPRESS OR IMPLIED
48 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
49 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
50 * EVENT SHALL ATMEL OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
51 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
52 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
53 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
54 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
55 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
56 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
57 *-----------------------------------------------------------------------------
60 * This file contains a mix of code taken from the atmel-maxtouch/obp-utils
61 * github codebase and my own for testing the atmel touchscreen chipset in
62 * the Acer C720P chromebook.
64 * I have rewritten the linux mess for the most part.
71 * CRC structure hangs off the end of the object configuration array and
72 * is calculated against { mxt_id_info, mxt_object[num_objects] }.
74 * { mxt_id_info, mxt_object[num_objects], mxt_raw_crc }
77 uint16_t CRC; /* low 16 bits */
78 uint8_t CRC_hi; /* high 8 bits */
82 * register 0 - Base information structure
85 uint8_t family; /*!< Device family */
86 uint8_t variant; /*!< Device variant */
88 uint8_t version; /*!< Firmware version (Major/minor nibbles) */
89 uint8_t build; /*!< Firmware build number */
91 uint8_t matrix_x_size; /*!< Matrix X Size */
92 uint8_t matrix_y_size; /*!< Matrix Y Size */
94 /*! Number of elements in the object table. The actual number of
95 * objects can be different if any object has more than one
102 * register 0 - Object configuration element(s) (occurs after mxt_id_info)
105 uint8_t type; /* object type */
106 uint8_t start_pos_lsb; /* start address of config structure */
107 uint8_t start_pos_msb; /* start address of config structure */
108 uint8_t size_minus_one; /* size of config - 1 */
109 uint8_t instances_minus_one; /* #of instances of object - 1 */
110 uint8_t num_report_ids; /* max# of touches, sliders, buts, etc*/
114 * message structures (MXT_GEN_MESSAGEPROCESSOR)
116 struct mxt_message_any {
121 struct mxt_message_touch {
123 uint8_t flags; /* msg[0] */
124 uint8_t pos[3]; /* xxxxxxxx(hi) yyyyyyyy(hi) xxxxyyyy(lo) */
129 #define MXT_MSGF_DETECT 0x80
130 #define MXT_MSGF_PRESS 0x40
131 #define MXT_MSGF_RELEASE 0x20
132 #define MXT_MSGF_MOVE 0x10
133 #define MXT_MSGF_VECTOR 0x08
134 #define MXT_MSGF_AMP 0x04
135 #define MXT_MSGF_SUPPRESS 0x02
136 #define MXT_MSGF_UNGRIP 0x01
139 struct mxt_message_touch any;
140 struct mxt_message_touch touch;
143 typedef union mxt_message mxt_message_t;
148 #define MXT_RESERVED_T0 0
149 #define MXT_RESERVED_T1 1
150 #define MXT_DEBUG_DELTAS 2
151 #define MXT_DEBUG_REFERENCES 3
152 #define MXT_SIGNALS 4
153 #define MXT_GEN_MESSAGEPROCESSOR 5
154 #define MXT_GEN_COMMANDPROCESSOR 6
155 #define MXT_GEN_POWERCONFIG 7
156 #define MXT_ACQUISITIONCONFIG 8
157 #define MXT_TOUCH_MULTITOUCHSCREEN9 9
158 #define MXT_TOUCH_SINGLETOUCHSCREEN 10
159 #define MXT_TOUCH_XSLIDER 11
160 #define MXT_TOUCH_YSLIDER 12
161 #define MXT_TOUCH_XWHEEL 13
162 #define MXT_TOUCH_YWHEEL 14
163 #define MXT_TOUCH_KEYARRAY 15
164 #define MXT_PROCG_SIGNALFILTER 16
165 #define MXT_PROCI_LINEARIZATIONTABLE 17
166 #define MXT_SPT_COMMSCONFIG 18
167 #define MXT_SPT_GPIOPWM 19
168 #define MXT_PROCI_GRIPFACESUPPRESSION 20
169 #define MXT_RESERVED21 21
170 #define MXT_PROCG_NOISESUPPRESSION22 22
171 #define MXT_TOUCH_PROXIMITY 23
172 #define MXT_PROCI_ONETOUCHGESTUREPROCESSOR 24
173 #define MXT_SPT_SELFTEST 25
174 #define MXT_DEBUG_CTERANGE 26
175 #define MXT_PROCI_TWOTOUCHGESTUREPROCESSOR 27
176 #define MXT_SPT_CTECONFIG28 28
177 #define MXT_SPT_GPI 29
178 #define MXT_SPT_GATE 30
179 #define MXT_TOUCH_KEYSET 31
180 #define MXT_TOUCH_XSLIDERSET 32
181 #define MXT_RESERVED33 33
182 #define MXT_GEN_MESSAGEBLOCK 34
183 #define MXT_SPT_PROTOTYPE 35
184 #define MXT_RESERVED36 36
185 #define MXT_DEBUG_DIAGNOSTIC 37
186 #define MXT_SPT_USERDATA 38
187 #define MXT_SPARE39 39
188 #define MXT_PROCI_GRIPSUPPRESSION 40
189 #define MXT_PROCI_PALMSUPPRESSION 41
190 #define MXT_PROCI_TOUCHSUPPRESSION 42
191 #define MXT_SPT_DIGITIZER 43
192 #define MXT_SPT_MESSAGECOUNT 44
193 #define MXT_PROCI_VIRTUALKEY 45
194 #define MXT_SPT_CTECONFIG46 46
195 #define MXT_PROCI_STYLUS 47
196 #define MXT_PROCG_NOISESUPPRESSION48 48
197 #define MXT_GEN_DUALPULSE 49
198 #define MXT_SPARE50 50
199 #define MXT_SPT_SONY_CUSTOM 51
200 #define MXT_TOUCH_PROXKEY 52
201 #define MXT_GEN_DATASOURCE 53
202 #define MXT_PROCG_NOISESUPPRESSION54 54
203 #define MXT_PROCI_ADAPTIVETHRESHOLD 55
204 #define MXT_PROCI_SHIELDLESS 56
205 #define MXT_PROCI_EXTRATOUCHSCREENDATA 57
206 #define MXT_SPT_EXTRANOISESUPCTRLS 58
207 #define MXT_SPT_FASTDRIFT 59
208 #define MXT_SPT_TIMER 61
209 #define MXT_PROCG_NOISESUPPRESSION62 62
210 #define MXT_PROCI_ACTIVESTYLUS63 63
211 #define MXT_SPT_REFERENCERELOAD 64
212 #define MXT_PROCI_LENSBENDING 65
213 #define MXT_SPT_GOLDENREFERENCES 66
214 #define MXT_PROCI_CUSTOMGESTUREPROCESSOR 67
215 #define MXT_SERIAL_DATA_COMMAND 68
216 #define MXT_PROCI_PALMGESTUREPROCESSOR 69
217 #define MXT_SPT_DYNAMICCONFIGURATIONCONTROLLER 70
218 #define MXT_SPT_DYNAMICCONFIGURATIONCONTAINER 71
219 #define MXT_PROCG_NOISESUPPRESSION72 72
220 #define MXT_PROCI_ZONEINDICATION 73
221 #define MXT_PROCG_SIMPLEGESTUREPROCESSOR 74
222 #define MXT_MOTION_SENSING_OBJECT 75
223 #define MXT_PROCI_MOTION_GESTURES 76
224 #define MXT_SPT_CTESCANCONFIG 77
225 #define MXT_PROCI_GLOVEDETECTION 78
226 #define MXT_SPT_TOUCHEVENTTRIGGER 79
227 #define MXT_PROCI_RETRANSMISSIONCOMPENSATION 80
228 #define MXT_PROCI_UNLOCKGESTURE 81
229 #define MXT_SPT_NOISESUPEXTENSION 82
230 #define MXT_ENVIRO_LIGHTSENSING 83
231 #define MXT_PROCI_GESTUREPROCESSOR 84
232 #define MXT_PEN_ACTIVESTYLUSPOWER 85
233 #define MXT_PROCG_NOISESUPACTIVESTYLUS 86
234 #define MXT_PEN_ACTIVESTYLUSDATA 87
235 #define MXT_PEN_ACTIVESTYLUSRECEIVE 88
236 #define MXT_PEN_ACTIVESTYLUSTRANSMIT 89
237 #define MXT_PEN_ACTIVESTYLUSWINDOW 90
238 #define MXT_DEBUG_CUSTOMDATACONFIG 91
239 #define MXT_PROCI_SYMBOLGESTUREPROCESSOR 92
240 #define MXT_PROCI_TOUCHSEQUENCELOGGER 93
241 #define MXT_TOUCH_MULTITOUCHSCREEN 100
242 #define MXT_SPT_TOUCHSCREENHOVER 101
243 #define MXT_SPT_SELFCAPHOVERCTECONFIG 102
244 #define MXT_PROCI_SCHNOISESUPPRESSION 103
245 #define MXT_SPT_AUXTOUCHCONFIG 104
246 #define MXT_SPT_DRIVENPLATEHOVERCONFIG 105
247 #define MXT_SPT_ACTIVESTYLUSMMBCONFIG 106
248 #define MXT_PROCI_ACTIVESTYLUS107 107
249 #define MXT_PROCG_NOISESUPSELFCAP 108
250 #define MXT_SPT_SELFCAPGLOBALCONFIG 109
251 #define MXT_SPT_SELFCAPTUNINGPARAMS 110
252 #define MXT_SPT_SELFCAPCONFIG 111
253 #define MXT_SPT_PROXMEASURECONFIG 113
254 #define MXT_GEN_INFOBLOCK16BIT 254
255 #define MXT_RESERVED255 255
257 #define MXTSTR(label) #label
259 #define MXT_INIT_STRINGS \
260 { MXTSTR(MXT_RESERVED_T0), \
262 { MXTSTR(MXT_RESERVED_T1), \
264 { MXTSTR(MXT_DEBUG_DELTAS), \
265 MXT_DEBUG_DELTAS }, \
266 { MXTSTR(MXT_DEBUG_REFERENCES), \
267 MXT_DEBUG_REFERENCES }, \
268 { MXTSTR(MXT_SIGNALS), \
270 { MXTSTR(MXT_GEN_MESSAGEPROCESSOR), \
271 MXT_GEN_MESSAGEPROCESSOR }, \
272 { MXTSTR(MXT_GEN_COMMANDPROCESSOR), \
273 MXT_GEN_COMMANDPROCESSOR }, \
274 { MXTSTR(MXT_GEN_POWERCONFIG), \
275 MXT_GEN_POWERCONFIG }, \
276 { MXTSTR(MXT_ACQUISITIONCONFIG), \
277 MXT_ACQUISITIONCONFIG }, \
278 { MXTSTR(MXT_TOUCH_MULTITOUCHSCREEN), \
279 MXT_TOUCH_MULTITOUCHSCREEN }, \
280 { MXTSTR(MXT_TOUCH_SINGLETOUCHSCREEN), \
281 MXT_TOUCH_SINGLETOUCHSCREEN }, \
282 { MXTSTR(MXT_TOUCH_XSLIDER), \
283 MXT_TOUCH_XSLIDER }, \
284 { MXTSTR(MXT_TOUCH_YSLIDER), \
285 MXT_TOUCH_YSLIDER }, \
286 { MXTSTR(MXT_TOUCH_XWHEEL), \
287 MXT_TOUCH_XWHEEL }, \
288 { MXTSTR(MXT_TOUCH_YWHEEL), \
289 MXT_TOUCH_YWHEEL }, \
290 { MXTSTR(MXT_TOUCH_KEYARRAY), \
291 MXT_TOUCH_KEYARRAY }, \
292 { MXTSTR(MXT_PROCG_SIGNALFILTER), \
293 MXT_PROCG_SIGNALFILTER }, \
294 { MXTSTR(MXT_PROCI_LINEARIZATIONTABLE), \
295 MXT_PROCI_LINEARIZATIONTABLE }, \
296 { MXTSTR(MXT_SPT_COMMSCONFIG), \
297 MXT_SPT_COMMSCONFIG }, \
298 { MXTSTR(MXT_SPT_GPIOPWM), \
300 { MXTSTR(MXT_PROCI_GRIPFACESUPPRESSION), \
301 MXT_PROCI_GRIPFACESUPPRESSION }, \
302 { MXTSTR(MXT_RESERVED21), \
304 { MXTSTR(MXT_PROCG_NOISESUPPRESSION22), \
305 MXT_PROCG_NOISESUPPRESSION22 }, \
306 { MXTSTR(MXT_PROCG_NOISESUPPRESSION48), \
307 MXT_PROCG_NOISESUPPRESSION48 }, \
308 { MXTSTR(MXT_PROCG_NOISESUPPRESSION54), \
309 MXT_PROCG_NOISESUPPRESSION54 }, \
310 { MXTSTR(MXT_PROCG_NOISESUPPRESSION62), \
311 MXT_PROCG_NOISESUPPRESSION62 }, \
312 { MXTSTR(MXT_PROCG_NOISESUPPRESSION72), \
313 MXT_PROCG_NOISESUPPRESSION72 }, \
314 { MXTSTR(MXT_TOUCH_PROXIMITY), \
315 MXT_TOUCH_PROXIMITY }, \
316 { MXTSTR(MXT_PROCI_ONETOUCHGESTUREPROCESSOR), \
317 MXT_PROCI_ONETOUCHGESTUREPROCESSOR }, \
318 { MXTSTR(MXT_SPT_SELFTEST), \
319 MXT_SPT_SELFTEST }, \
320 { MXTSTR(MXT_DEBUG_CTERANGE), \
321 MXT_DEBUG_CTERANGE }, \
322 { MXTSTR(MXT_PROCI_TWOTOUCHGESTUREPROCESSOR), \
323 MXT_PROCI_TWOTOUCHGESTUREPROCESSOR }, \
324 { MXTSTR(MXT_SPT_CTECONFIG28), \
325 MXT_SPT_CTECONFIG28 }, \
326 { MXTSTR(MXT_SPT_CTECONFIG46), \
327 MXT_SPT_CTECONFIG46 }, \
328 { MXTSTR(MXT_SPT_GPI), \
330 { MXTSTR(MXT_SPT_GATE), \
332 { MXTSTR(MXT_TOUCH_KEYSET), \
333 MXT_TOUCH_KEYSET }, \
334 { MXTSTR(MXT_TOUCH_XSLIDERSET), \
335 MXT_TOUCH_XSLIDERSET }, \
336 { MXTSTR(MXT_RESERVED33), \
338 { MXTSTR(MXT_GEN_MESSAGEBLOCK), \
339 MXT_GEN_MESSAGEBLOCK }, \
340 { MXTSTR(MXT_SPT_PROTOTYPE), \
341 MXT_SPT_PROTOTYPE }, \
342 { MXTSTR(MXT_RESERVED36), \
344 { MXTSTR(MXT_DEBUG_DIAGNOSTIC), \
345 MXT_DEBUG_DIAGNOSTIC }, \
346 { MXTSTR(MXT_SPT_USERDATA), \
347 MXT_SPT_USERDATA }, \
348 { MXTSTR(MXT_SPARE39), \
350 { MXTSTR(MXT_PROCI_GRIPSUPPRESSION), \
351 MXT_PROCI_GRIPSUPPRESSION }, \
352 { MXTSTR(MXT_PROCI_PALMSUPPRESSION), \
353 MXT_PROCI_PALMSUPPRESSION }, \
354 { MXTSTR(MXT_PROCI_TOUCHSUPPRESSION), \
355 MXT_PROCI_TOUCHSUPPRESSION }, \
356 { MXTSTR(MXT_SPT_DIGITIZER), \
357 MXT_SPT_DIGITIZER }, \
358 { MXTSTR(MXT_SPT_MESSAGECOUNT), \
359 MXT_SPT_MESSAGECOUNT }, \
360 { MXTSTR(MXT_PROCI_VIRTUALKEY), \
361 MXT_PROCI_VIRTUALKEY }, \
362 { MXTSTR(MXT_PROCI_STYLUS), \
363 MXT_PROCI_STYLUS }, \
364 { MXTSTR(MXT_GEN_DUALPULSE), \
365 MXT_GEN_DUALPULSE }, \
366 { MXTSTR(MXT_SPARE50), \
368 { MXTSTR(MXT_SPT_SONY_CUSTOM), \
369 MXT_SPT_SONY_CUSTOM }, \
370 { MXTSTR(MXT_TOUCH_PROXKEY), \
371 MXT_TOUCH_PROXKEY }, \
372 { MXTSTR(MXT_GEN_DATASOURCE), \
373 MXT_GEN_DATASOURCE }, \
374 { MXTSTR(MXT_PROCI_ADAPTIVETHRESHOLD), \
375 MXT_PROCI_ADAPTIVETHRESHOLD }, \
376 { MXTSTR(MXT_PROCI_SHIELDLESS), \
377 MXT_PROCI_SHIELDLESS }, \
378 { MXTSTR(MXT_PROCI_EXTRATOUCHSCREENDATA), \
379 MXT_PROCI_EXTRATOUCHSCREENDATA }, \
380 { MXTSTR(MXT_SPT_EXTRANOISESUPCTRLS), \
381 MXT_SPT_EXTRANOISESUPCTRLS }, \
382 { MXTSTR(MXT_SPT_FASTDRIFT), \
383 MXT_SPT_FASTDRIFT }, \
384 { MXTSTR(MXT_SPT_TIMER), \
386 { MXTSTR(MXT_PROCI_ACTIVESTYLUS63), \
387 MXT_PROCI_ACTIVESTYLUS63 }, \
388 { MXTSTR(MXT_PROCI_ACTIVESTYLUS107), \
389 MXT_PROCI_ACTIVESTYLUS107 }, \
390 { MXTSTR(MXT_SPT_REFERENCERELOAD), \
391 MXT_SPT_REFERENCERELOAD }, \
392 { MXTSTR(MXT_PROCI_LENSBENDING), \
393 MXT_PROCI_LENSBENDING }, \
394 { MXTSTR(MXT_SPT_GOLDENREFERENCES), \
395 MXT_SPT_GOLDENREFERENCES }, \
396 { MXTSTR(MXT_PROCI_CUSTOMGESTUREPROCESSOR), \
397 MXT_PROCI_CUSTOMGESTUREPROCESSOR }, \
398 { MXTSTR(MXT_SERIAL_DATA_COMMAND), \
399 MXT_SERIAL_DATA_COMMAND }, \
400 { MXTSTR(MXT_PROCI_PALMGESTUREPROCESSOR), \
401 MXT_PROCI_PALMGESTUREPROCESSOR }, \
402 { MXTSTR(MXT_SPT_DYNAMICCONFIGURATIONCONTROLLER), \
403 MXT_SPT_DYNAMICCONFIGURATIONCONTROLLER }, \
404 { MXTSTR(MXT_SPT_DYNAMICCONFIGURATIONCONTAINER), \
405 MXT_SPT_DYNAMICCONFIGURATIONCONTAINER }, \
406 { MXTSTR(MXT_PROCI_ZONEINDICATION), \
407 MXT_PROCI_ZONEINDICATION }, \
408 { MXTSTR(MXT_PROCG_SIMPLEGESTUREPROCESSOR), \
409 MXT_PROCG_SIMPLEGESTUREPROCESSOR }, \
410 { MXTSTR(MXT_MOTION_SENSING_OBJECT), \
411 MXT_MOTION_SENSING_OBJECT }, \
412 { MXTSTR(MXT_PROCI_MOTION_GESTURES), \
413 MXT_PROCI_MOTION_GESTURES }, \
414 { MXTSTR(MXT_SPT_CTESCANCONFIG), \
415 MXT_SPT_CTESCANCONFIG }, \
416 { MXTSTR(MXT_PROCI_GLOVEDETECTION), \
417 MXT_PROCI_GLOVEDETECTION }, \
418 { MXTSTR(MXT_SPT_TOUCHEVENTTRIGGER), \
419 MXT_SPT_TOUCHEVENTTRIGGER }, \
420 { MXTSTR(MXT_PROCI_RETRANSMISSIONCOMPENSATION), \
421 MXT_PROCI_RETRANSMISSIONCOMPENSATION }, \
422 { MXTSTR(MXT_PROCI_UNLOCKGESTURE), \
423 MXT_PROCI_UNLOCKGESTURE }, \
424 { MXTSTR(MXT_SPT_NOISESUPEXTENSION), \
425 MXT_SPT_NOISESUPEXTENSION }, \
426 { MXTSTR(MXT_ENVIRO_LIGHTSENSING), \
427 MXT_ENVIRO_LIGHTSENSING }, \
428 { MXTSTR(MXT_PROCI_GESTUREPROCESSOR), \
429 MXT_PROCI_GESTUREPROCESSOR }, \
430 { MXTSTR(MXT_PEN_ACTIVESTYLUSPOWER), \
431 MXT_PEN_ACTIVESTYLUSPOWER }, \
432 { MXTSTR(MXT_PROCG_NOISESUPACTIVESTYLUS), \
433 MXT_PROCG_NOISESUPACTIVESTYLUS }, \
434 { MXTSTR(MXT_PEN_ACTIVESTYLUSDATA), \
435 MXT_PEN_ACTIVESTYLUSDATA }, \
436 { MXTSTR(MXT_PEN_ACTIVESTYLUSRECEIVE), \
437 MXT_PEN_ACTIVESTYLUSRECEIVE }, \
438 { MXTSTR(MXT_PEN_ACTIVESTYLUSTRANSMIT), \
439 MXT_PEN_ACTIVESTYLUSTRANSMIT }, \
440 { MXTSTR(MXT_PEN_ACTIVESTYLUSWINDOW), \
441 MXT_PEN_ACTIVESTYLUSWINDOW }, \
442 { MXTSTR(MXT_DEBUG_CUSTOMDATACONFIG), \
443 MXT_DEBUG_CUSTOMDATACONFIG }, \
444 { MXTSTR(MXT_PROCI_SYMBOLGESTUREPROCESSOR), \
445 MXT_PROCI_SYMBOLGESTUREPROCESSOR }, \
446 { MXTSTR(MXT_PROCI_TOUCHSEQUENCELOGGER), \
447 MXT_PROCI_TOUCHSEQUENCELOGGER }, \
448 { MXTSTR(MXT_TOUCH_MULTITOUCHSCREEN), \
449 MXT_TOUCH_MULTITOUCHSCREEN }, \
450 { MXTSTR(MXT_SPT_TOUCHSCREENHOVER), \
451 MXT_SPT_TOUCHSCREENHOVER }, \
452 { MXTSTR(MXT_SPT_SELFCAPHOVERCTECONFIG), \
453 MXT_SPT_SELFCAPHOVERCTECONFIG }, \
454 { MXTSTR(MXT_PROCI_SCHNOISESUPPRESSION), \
455 MXT_PROCI_SCHNOISESUPPRESSION }, \
456 { MXTSTR(MXT_SPT_AUXTOUCHCONFIG), \
457 MXT_SPT_AUXTOUCHCONFIG }, \
458 { MXTSTR(MXT_SPT_DRIVENPLATEHOVERCONFIG), \
459 MXT_SPT_DRIVENPLATEHOVERCONFIG }, \
460 { MXTSTR(MXT_SPT_ACTIVESTYLUSMMBCONFIG), \
461 MXT_SPT_ACTIVESTYLUSMMBCONFIG }, \
462 { MXTSTR(MXT_PROCG_NOISESUPSELFCAP), \
463 MXT_PROCG_NOISESUPSELFCAP }, \
464 { MXTSTR(MXT_SPT_SELFCAPGLOBALCONFIG), \
465 MXT_SPT_SELFCAPGLOBALCONFIG }, \
466 { MXTSTR(MXT_SPT_SELFCAPTUNINGPARAMS), \
467 MXT_SPT_SELFCAPTUNINGPARAMS }, \
468 { MXTSTR(MXT_SPT_SELFCAPCONFIG), \
469 MXT_SPT_SELFCAPCONFIG }, \
470 { MXTSTR(MXT_SPT_PROXMEASURECONFIG), \
471 MXT_SPT_PROXMEASURECONFIG }, \
472 { MXTSTR(MXT_GEN_INFOBLOCK16BIT), \
473 MXT_GEN_INFOBLOCK16BIT }, \
474 { MXTSTR(MXT_RESERVED255), \
478 * MXT_GEN_COMMANDPROCESSOR object offsets.
480 #define MXT_CMDPROC_RESET_OFF 0x00
481 #define MXT_CMDPROC_BACKUPNV_OFF 0x01
482 #define MXT_CMDPROC_CALIBRATE_OFF 0x02
483 #define MXT_CMDPROC_REPORTALL_OFF 0x03
484 #define MXT_CMDPROC_RESERVED04_OFF 0x04
485 #define MXT_CMDPROC_DIAGNOSTIC_OFF 0x05
488 * device driver helper structures
496 struct mxt_id_info info;
497 struct mxt_object *objs;
503 * Kernel AND user mode support
505 uint32_t obp_convert_crc(struct mxt_raw_crc *crc);
506 uint32_t obp_crc24(uint8_t *buf, size_t bytes);