xref: /dragonfly/sys/dev/smbus/atmel_mxt/obp-utils.h (revision eb9540f7)
1 /*
2  * Copyright (c) 2014 The DragonFly Project.  All rights reserved.
3  *
4  * This code is derived from software contributed to The DragonFly Project
5  * by Matthew Dillon <dillon@backplane.com>
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
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
16  *    distribution.
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.
20  *
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
32  * SUCH DAMAGE.
33  *
34  *------------------------------------------------------------------------------
35  * Copyright 2011 Atmel Corporation. All rights reserved.
36  *
37  * Redistribution and use in source and binary forms, with or without
38  * modification, are permitted provided that the following conditions are met:
39  *
40  *    1. Redistributions of source code must retain the above copyright notice,
41  *    this list of conditions and the following disclaimer.
42  *
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.
46  *
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  *-----------------------------------------------------------------------------
58  */
59 /*
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.
63  *
64  * I have rewritten the linux mess for the most part.
65  */
66 
67 #ifndef _OBP_UTILS_H_
68 #define _OBP_UTILS_H_
69 
70 /*
71  * CRC structure hangs off the end of the object configuration array and
72  * is calculated against { mxt_id_info, mxt_object[num_objects] }.
73  *
74  * { mxt_id_info, mxt_object[num_objects], mxt_raw_crc }
75  */
76 struct mxt_raw_crc {
77     uint16_t CRC;		/* low 16 bits */
78     uint8_t CRC_hi;		/* high 8 bits */
79 } __packed;
80 
81 /*
82  * register 0 - Base information structure
83  */
84 struct mxt_id_info {
85 	uint8_t family;		/*!< Device family */
86 	uint8_t variant;	/*!< Device variant */
87 
88 	uint8_t version;	/*!< Firmware version (Major/minor nibbles) */
89 	uint8_t build;		/*!< Firmware build number */
90 
91 	uint8_t matrix_x_size;	/*!< Matrix X Size */
92 	uint8_t matrix_y_size;	/*!< Matrix Y Size */
93 
94 	/*! Number of elements in the object table. The actual number of
95 	 *  objects can be different if any object has more than one
96 	 *  instance.
97 	 */
98 	uint8_t num_objects;
99 } __packed;
100 
101 /*
102  * register 0 - Object configuration element(s) (occurs after mxt_id_info)
103  */
104 struct mxt_object {
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*/
111 } __packed;
112 
113 /*
114  * message structures (MXT_GEN_MESSAGEPROCESSOR)
115  */
116 struct mxt_message_any {
117 	uint8_t	reportid;
118 	uint8_t	data[7];
119 } __packed;
120 
121 struct mxt_message_touch {
122 	uint8_t reportid;
123 	uint8_t flags;		/* msg[0] */
124 	uint8_t pos[3];		/* xxxxxxxx(hi) yyyyyyyy(hi) xxxxyyyy(lo) */
125 	uint8_t area;
126 	uint8_t amplitude;
127 } __packed;
128 
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
137 
138 union mxt_message {
139 	struct mxt_message_touch any;
140 	struct mxt_message_touch touch;
141 } __packed;
142 
143 typedef union mxt_message mxt_message_t;
144 
145 /*
146  * Object types
147  */
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
256 
257 #define MXTSTR(label)	#label
258 
259 #define MXT_INIT_STRINGS	\
260 	{ MXTSTR(MXT_RESERVED_T0),			\
261 	   MXT_RESERVED_T0		},		\
262 	{ MXTSTR(MXT_RESERVED_T1),			\
263 	   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),				\
269 	   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),			\
299 	   MXT_SPT_GPIOPWM		},		\
300 	{ MXTSTR(MXT_PROCI_GRIPFACESUPPRESSION),	\
301 	   MXT_PROCI_GRIPFACESUPPRESSION	},	\
302 	{ MXTSTR(MXT_RESERVED21),			\
303 	   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),				\
329 	   MXT_SPT_GPI			},		\
330 	{ MXTSTR(MXT_SPT_GATE),				\
331 	   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),			\
337 	   MXT_RESERVED33		},		\
338 	{ MXTSTR(MXT_GEN_MESSAGEBLOCK),			\
339 	   MXT_GEN_MESSAGEBLOCK		},		\
340 	{ MXTSTR(MXT_SPT_PROTOTYPE),			\
341 	   MXT_SPT_PROTOTYPE		},		\
342 	{ MXTSTR(MXT_RESERVED36),			\
343 	   MXT_RESERVED36		},		\
344 	{ MXTSTR(MXT_DEBUG_DIAGNOSTIC),			\
345 	   MXT_DEBUG_DIAGNOSTIC		},		\
346 	{ MXTSTR(MXT_SPT_USERDATA),			\
347 	   MXT_SPT_USERDATA		},		\
348 	{ MXTSTR(MXT_SPARE39),				\
349 	   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),				\
367 	   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),			\
385 	   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),		\
475 	   MXT_RESERVED255		}
476 
477 /*
478  * MXT_GEN_COMMANDPROCESSOR object offsets.
479  */
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
486 
487 /*
488  * device driver helper structures
489  */
490 struct mxt_strinfo {
491 	const char *id;
492 	int	type;
493 };
494 
495 struct mxt_rollup {
496 	struct mxt_id_info	info;
497 	struct mxt_object	*objs;
498 	int			nobjs;
499 	uint8_t			*buf;
500 };
501 
502 /*
503  * Kernel AND user mode support
504  */
505 uint32_t obp_convert_crc(struct mxt_raw_crc *crc);
506 uint32_t obp_crc24(uint8_t *buf, size_t bytes);
507 
508 #endif
509