nrelease - fix/improve livecd
[dragonfly.git] / sys / dev / smbus / atmel_mxt / obp-utils.h
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