input: misc: Invensense MPU 5.0.1 driver
[linux-2.6.git] / drivers / input / misc / mpu / dmpDefaultMPU6050.c
1 /*
2 * Copyright (C) 2012 Invensense, Inc.
3 *
4 * This software is licensed under the terms of the GNU General Public
5 * License version 2, as published by the Free Software Foundation, and
6 * may be copied, distributed, and modified under those terms.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * GNU General Public License for more details.
12 *
13 */
14 /* WARNING: autogenerated code, do not modify */
15 /**
16  *  @defgroup DMPDEFAULT
17  *  @brief
18  *
19  *  @{
20  *      @file   dmpDefaultMPU6050.c
21  *      @brief
22  *
23  */
24
25 #include "dmpKey.h"
26 #include "dmpmap.h"
27
28 #define CFG_27              (2097)
29 #define CFG_21              (2085)
30 #define CFG_20              (1491)
31 #define CFG_23              (2100)
32 #define CFG_TAP4            (2091)
33 #define CFG_TAP5            (2092)
34 #define CFG_TAP6            (2093)
35 #define CFG_GYRO_SOURCE     (2042)
36 #define CFG_TAP0            (2085)
37 #define CFG_TAP1            (2087)
38 #define CFG_TAP2            (2088)
39 #define TEMPLABEL           (1591)
40 #define CFG_ORIENT_IRQ_1    (1884)
41 #define CFG_DR_INT          (1037)
42 #define FCFG_3              (1107)
43 #define CFG_AUTH            (1029)
44 #define CGNOTICE_INTR       (1964)
45 #define CFG_ACCEL_FILTER    (1138)
46 #define FCFG_2              (1063)
47 #define FCFG_1              (1059)
48 #define FCFG_7              (1073)
49 #define CFG_12              (2080)
50 #define CFG_TAP7            (2094)
51 #define CFG_14              (2054)
52 #define CFG_15              (2059)
53 #define CFG_16              (2101)
54 #define CFG_6               (2108)
55 #define CFG_1               (2048)
56 #define CFG_TAP3            (2089)
57 #define CFG_EXTERNAL        (2070)
58 #define CFG_8               (2037)
59 #define CFG_9               (2043)
60 #define CFG_FLICK_IN        (1917)
61 #define CFG_FIFO_ON_EVENT   (2017)
62
63 #define D_0_22                  (22+512)
64 #define D_0_24                  (24+512)
65
66 #define D_0_36                  (36)
67 #define D_0_52                  (52)
68 #define D_0_96                  (96)
69 #define D_0_104                 (104)
70 #define D_0_108                 (108)
71 #define D_0_163                 (163)
72 #define D_0_188                 (188)
73 #define D_0_192                 (192)
74 #define D_0_224                 (224)
75 #define D_0_228                 (228)
76 #define D_0_232                 (232)
77 #define D_0_236                 (236)
78
79 #define D_1_2                   (256 + 2)
80 #define D_1_4                   (256 + 4)
81 #define D_1_8                   (256 + 8)
82 #define D_1_10                  (256 + 10)
83 #define D_1_24                  (256 + 24)
84 #define D_1_28                  (256 + 28)
85 #define D_1_36                  (256 + 36)
86 #define D_1_40                  (256 + 40)
87 #define D_1_44                  (256 + 44)
88 #define D_1_72                  (256 + 72)
89 #define D_1_74                  (256 + 74)
90 #define D_1_79                  (256 + 79)
91 #define D_1_88                  (256 + 88)
92 #define D_1_90                  (256 + 90)
93 #define D_1_92                  (256 + 92)
94 #define D_1_96                  (256 + 96)
95 #define D_1_98                  (256 + 98)
96 #define D_1_106                 (256 + 106)
97 #define D_1_108                 (256 + 108)
98 #define D_1_112                 (256 + 112)
99 #define D_1_128                 (256 + 144)
100 #define D_1_152                 (256 + 12)
101 #define D_1_160                 (256 + 160)
102 #define D_1_176                 (256 + 176)
103 #define D_1_178                 (256 + 178)
104 #define D_1_218                 (256 + 218)
105 #define D_1_232                 (256 + 232)
106 #define D_1_236                 (256 + 236)
107 #define D_1_240                 (256 + 240)
108 #define D_1_244                 (256 + 244)
109 #define D_1_250                 (256 + 250)
110 #define D_1_252                 (256 + 252)
111 #define D_2_12                  (512 + 12)
112 #define D_2_96                  (512 + 96)
113 #define D_2_108                 (512 + 108)
114 #define D_2_208                 (512 + 208)
115 #define D_2_224                 (512 + 224)
116 #define D_2_236                 (512 + 236)
117 #define D_2_244                 (512 + 244)
118 #define D_2_248                 (512 + 248)
119 #define D_2_252                 (512 + 252)
120
121 #define CPASS_BIAS_X            (35 * 16 + 4)
122 #define CPASS_BIAS_Y            (35 * 16 + 8)
123 #define CPASS_BIAS_Z            (35 * 16 + 12)
124 #define CPASS_MTX_00            (36 * 16)
125 #define CPASS_MTX_01            (36 * 16 + 4)
126 #define CPASS_MTX_02            (36 * 16 + 8)
127 #define CPASS_MTX_10            (36 * 16 + 12)
128 #define CPASS_MTX_11            (37 * 16)
129 #define CPASS_MTX_12            (37 * 16 + 4)
130 #define CPASS_MTX_20            (37 * 16 + 8)
131 #define CPASS_MTX_21            (37 * 16 + 12)
132 #define CPASS_MTX_22            (43 * 16 + 12)
133 #define D_ACT0                  (40 * 16)
134 #define D_ACSX                  (40 * 16 + 4)
135 #define D_ACSY                  (40 * 16 + 8)
136 #define D_ACSZ                  (40 * 16 + 12)
137
138 #define FLICK_MSG               (45 * 16 + 4)
139 #define FLICK_COUNTER           (45 * 16 + 8)
140 #define FLICK_LOWER             (45 * 16 + 12)
141 #define FLICK_UPPER             (46 * 16 + 12)
142
143 #define D_AUTH_OUT               (32)
144 #define D_AUTH_IN                (36)
145 #define D_AUTH_A                 (40)
146 #define D_AUTH_B                 (44)
147
148 #define D_PEDSTD_BP_B          (768 + 0x1C)
149 #define D_PEDSTD_HP_A          (768 + 0x78)
150 #define D_PEDSTD_HP_B          (768 + 0x7C)
151 #define D_PEDSTD_BP_A4         (768 + 0x40)
152 #define D_PEDSTD_BP_A3         (768 + 0x44)
153 #define D_PEDSTD_BP_A2         (768 + 0x48)
154 #define D_PEDSTD_BP_A1         (768 + 0x4C)
155 #define D_PEDSTD_INT_THRSH     (768 + 0x68)
156 #define D_PEDSTD_CLIP          (768 + 0x6C)
157 #define D_PEDSTD_SB            (768 + 0x28)
158 #define D_PEDSTD_SB_TIME       (768 + 0x2C)
159 #define D_PEDSTD_PEAKTHRSH     (768 + 0x98)
160 #define D_PEDSTD_TIML          (768 + 0x2A)
161 #define D_PEDSTD_TIMH          (768 + 0x2E)
162 #define D_PEDSTD_PEAK          (768 + 0X94)
163 #define D_PEDSTD_STEPCTR       (768 + 0x60)
164 #define D_PEDSTD_TIMECTR       (768 + 0x22)
165 #define D_PEDSTD_DECI          (768 + 0xA0)
166
167 static const struct tKeyLabel dmpTConfig[] = {
168         {KEY_CFG_27,            CFG_27},
169         {KEY_CFG_21,            CFG_21},
170         {KEY_CFG_20,            CFG_20},
171         {KEY_CFG_23,            CFG_23},
172         {KEY_CFG_TAP4,          CFG_TAP4},
173         {KEY_CFG_TAP5,          CFG_TAP5},
174         {KEY_CFG_TAP6,          CFG_TAP6},
175         {KEY_CFG_GYRO_SOURCE,   CFG_GYRO_SOURCE},
176         {KEY_CFG_TAP0,          CFG_TAP0},
177         {KEY_CFG_TAP1,          CFG_TAP1},
178         {KEY_CFG_TAP2,          CFG_TAP2},
179         {KEY_TEMPLABEL,         TEMPLABEL},
180         {KEY_CFG_ORIENT_IRQ_1,  CFG_ORIENT_IRQ_1},
181         {KEY_CFG_DR_INT,        CFG_DR_INT},
182         {KEY_FCFG_3,            FCFG_3},
183         {KEY_CGNOTICE_INTR,     CGNOTICE_INTR},
184         {KEY_CFG_ACCEL_FILTER,  CFG_ACCEL_FILTER},
185         {KEY_FCFG_2,            FCFG_2},
186         {KEY_FCFG_1,            FCFG_1},
187         {KEY_FCFG_7,            FCFG_7},
188         {KEY_CFG_12,            CFG_12},
189         {KEY_CFG_TAP7,          CFG_TAP7},
190         {KEY_CFG_14,            CFG_14},
191         {KEY_CFG_15,            CFG_15},
192         {KEY_CFG_16,            CFG_16},
193         {KEY_CFG_6,             CFG_6},
194         {KEY_CFG_1,             CFG_1},
195         {KEY_CFG_TAP3,          CFG_TAP3},
196         {KEY_CFG_EXTERNAL,      CFG_EXTERNAL},
197         {KEY_CFG_8,             CFG_8},
198         {KEY_CFG_9,             CFG_9},
199         {KEY_CFG_FLICK_IN,      CFG_FLICK_IN},
200         {KEY_CFG_FIFO_ON_EVENT,       CFG_FIFO_ON_EVENT},
201         {KEY_TEMPLABEL,             TEMPLABEL},
202         {KEY_CFG_20, CFG_20},
203         {KEY_CFG_AUTH,          CFG_AUTH},
204         {KEY_D_0_22,                D_0_22},
205         {KEY_D_0_96,                D_0_96},
206         {KEY_D_0_104,               D_0_104},
207         {KEY_D_0_108,               D_0_108},
208         {KEY_D_1_36,               D_1_36},
209         {KEY_D_1_40,               D_1_40},
210         {KEY_D_1_44,               D_1_44},
211         {KEY_D_1_72,               D_1_72},
212         {KEY_D_1_74,               D_1_74},
213         {KEY_D_1_79,               D_1_79},
214         {KEY_D_1_88,               D_1_88},
215         {KEY_D_1_90,               D_1_90},
216         {KEY_D_1_92,               D_1_92},
217         {KEY_D_1_160,               D_1_160},
218         {KEY_D_1_176,               D_1_176},
219         {KEY_D_1_218,               D_1_218},
220         {KEY_D_1_232,               D_1_232},
221         {KEY_D_1_250,               D_1_250},
222         {KEY_DMP_TAPW_MIN,          DMP_TAPW_MIN},
223         {KEY_DMP_TAP_THR_X,         DMP_TAP_THX},
224         {KEY_DMP_TAP_THR_Y,         DMP_TAP_THY},
225         {KEY_DMP_TAP_THR_Z,         DMP_TAP_THZ},
226         {KEY_DMP_SH_TH_Y,           DMP_SH_TH_Y},
227         {KEY_DMP_SH_TH_X,           DMP_SH_TH_X},
228         {KEY_DMP_SH_TH_Z,           DMP_SH_TH_Z},
229         {KEY_DMP_ORIENT,            DMP_ORIENT},
230         {KEY_D_AUTH_OUT,            D_AUTH_OUT},
231         {KEY_D_AUTH_IN,             D_AUTH_IN},
232         {KEY_D_AUTH_A,              D_AUTH_A},
233         {KEY_D_AUTH_B,              D_AUTH_B},
234         {KEY_CPASS_BIAS_X,          CPASS_BIAS_X},
235         {KEY_CPASS_BIAS_Y,          CPASS_BIAS_Y},
236         {KEY_CPASS_BIAS_Z,          CPASS_BIAS_Z},
237         {KEY_CPASS_MTX_00,          CPASS_MTX_00},
238         {KEY_CPASS_MTX_01,          CPASS_MTX_01},
239         {KEY_CPASS_MTX_02,          CPASS_MTX_02},
240         {KEY_CPASS_MTX_10,          CPASS_MTX_10},
241         {KEY_CPASS_MTX_11,          CPASS_MTX_11},
242         {KEY_CPASS_MTX_12,          CPASS_MTX_12},
243         {KEY_CPASS_MTX_20,          CPASS_MTX_20},
244         {KEY_CPASS_MTX_21,          CPASS_MTX_21},
245         {KEY_CPASS_MTX_22,          CPASS_MTX_22},
246         {KEY_D_ACT0,                D_ACT0},
247         {KEY_D_ACSX,                D_ACSX},
248         {KEY_D_ACSY,                D_ACSY},
249         {KEY_D_ACSZ,                D_ACSZ},
250         {KEY_FLICK_MSG,             FLICK_MSG},
251         {KEY_FLICK_COUNTER,         FLICK_COUNTER},
252         {KEY_FLICK_LOWER,           FLICK_LOWER},
253         {KEY_FLICK_UPPER,           FLICK_UPPER},
254         {KEY_D_PEDSTD_BP_B, D_PEDSTD_BP_B},
255         {KEY_D_PEDSTD_HP_A, D_PEDSTD_HP_A},
256         {KEY_D_PEDSTD_HP_B, D_PEDSTD_HP_B},
257         {KEY_D_PEDSTD_BP_A4, D_PEDSTD_BP_A4},
258         {KEY_D_PEDSTD_BP_A3, D_PEDSTD_BP_A3},
259         {KEY_D_PEDSTD_BP_A2, D_PEDSTD_BP_A2},
260         {KEY_D_PEDSTD_BP_A1, D_PEDSTD_BP_A1},
261         {KEY_D_PEDSTD_INT_THRSH, D_PEDSTD_INT_THRSH},
262         {KEY_D_PEDSTD_CLIP, D_PEDSTD_CLIP},
263         {KEY_D_PEDSTD_SB, D_PEDSTD_SB},
264         {KEY_D_PEDSTD_SB_TIME, D_PEDSTD_SB_TIME},
265         {KEY_D_PEDSTD_PEAKTHRSH, D_PEDSTD_PEAKTHRSH},
266         {KEY_D_PEDSTD_TIML,      D_PEDSTD_TIML},
267         {KEY_D_PEDSTD_TIMH,      D_PEDSTD_TIMH},
268         {KEY_D_PEDSTD_PEAK,      D_PEDSTD_PEAK},
269         {KEY_D_PEDSTD_STEPCTR,   D_PEDSTD_STEPCTR},
270         {KEY_D_PEDSTD_TIMECTR,  D_PEDSTD_TIMECTR},
271         {KEY_D_PEDSTD_DECI,  D_PEDSTD_DECI}
272
273 };
274
275 #define NUM_LOCAL_KEYS (sizeof(dmpTConfig)/sizeof(dmpTConfig[0]))
276
277 static struct tKeyLabel keys[NUM_KEYS];
278
279 unsigned short inv_dmp_get_address(unsigned short key)
280 {
281         static int isSorted;
282         if (!isSorted) {
283                 int kk;
284                 for (kk = 0; kk < NUM_KEYS; ++kk) {
285                         keys[kk].addr = 0xffff;
286                         keys[kk].key = kk;
287                 }
288                 for (kk = 0; kk < NUM_LOCAL_KEYS; ++kk)
289                         keys[dmpTConfig[kk].key].addr = dmpTConfig[kk].addr;
290
291                 isSorted = 1;
292         }
293         if (key >= NUM_KEYS)
294                 return 0xffff;
295         return keys[key].addr;
296 }
297
298 /**
299  *  @}
300  */