blob: 35d4c996df2391250358ce211bc2ad5478e357ab [file] [log] [blame]
Flemmard23447852013-04-25 21:53:22 -07001#ifndef BMA250_H
2#define BMA250_H
3
4#include <linux/ioctl.h>
5
6#define SENSOR_NAME "bma250"
7#define ABSMIN -512
8#define ABSMAX 512
9#define SLOPE_THRESHOLD_VALUE 32
10#define SLOPE_DURATION_VALUE 1
11#define INTERRUPT_LATCH_MODE 13
12#define INTERRUPT_ENABLE 1
13#define INTERRUPT_DISABLE 0
14#define MAP_SLOPE_INTERRUPT 2
15#define SLOPE_X_INDEX 5
16#define SLOPE_Y_INDEX 6
17#define SLOPE_Z_INDEX 7
18#define BMA250_MAX_DELAY 200
19#define BMA250_CHIP_ID 3
20#define BMA250_RANGE_SET 0
21#define BMA250_BW_SET 2
22
23#define LOW_G_INTERRUPT REL_Z
24#define HIGH_G_INTERRUPT REL_HWHEEL
25#define SLOP_INTERRUPT REL_DIAL
26#define DOUBLE_TAP_INTERRUPT REL_WHEEL
27#define SINGLE_TAP_INTERRUPT REL_MISC
28#define ORIENT_INTERRUPT ABS_PRESSURE
29#define FLAT_INTERRUPT ABS_DISTANCE
30
31
32#define HIGH_G_INTERRUPT_X_HAPPENED 1
33#define HIGH_G_INTERRUPT_Y_HAPPENED 2
34#define HIGH_G_INTERRUPT_Z_HAPPENED 3
35#define HIGH_G_INTERRUPT_X_NEGATIVE_HAPPENED 4
36#define HIGH_G_INTERRUPT_Y_NEGATIVE_HAPPENED 5
37#define HIGH_G_INTERRUPT_Z_NEGATIVE_HAPPENED 6
38#define SLOPE_INTERRUPT_X_HAPPENED 7
39#define SLOPE_INTERRUPT_Y_HAPPENED 8
40#define SLOPE_INTERRUPT_Z_HAPPENED 9
41#define SLOPE_INTERRUPT_X_NEGATIVE_HAPPENED 10
42#define SLOPE_INTERRUPT_Y_NEGATIVE_HAPPENED 11
43#define SLOPE_INTERRUPT_Z_NEGATIVE_HAPPENED 12
44#define DOUBLE_TAP_INTERRUPT_HAPPENED 13
45#define SINGLE_TAP_INTERRUPT_HAPPENED 14
46#define UPWARD_PORTRAIT_UP_INTERRUPT_HAPPENED 15
47#define UPWARD_PORTRAIT_DOWN_INTERRUPT_HAPPENED 16
48#define UPWARD_LANDSCAPE_LEFT_INTERRUPT_HAPPENED 17
49#define UPWARD_LANDSCAPE_RIGHT_INTERRUPT_HAPPENED 18
50#define DOWNWARD_PORTRAIT_UP_INTERRUPT_HAPPENED 19
51#define DOWNWARD_PORTRAIT_DOWN_INTERRUPT_HAPPENED 20
52#define DOWNWARD_LANDSCAPE_LEFT_INTERRUPT_HAPPENED 21
53#define DOWNWARD_LANDSCAPE_RIGHT_INTERRUPT_HAPPENED 22
54#define FLAT_INTERRUPT_TURE_HAPPENED 23
55#define FLAT_INTERRUPT_FALSE_HAPPENED 24
56#define LOW_G_INTERRUPT_HAPPENED 25
57
58#define PAD_LOWG 0
59#define PAD_HIGHG 1
60#define PAD_SLOP 2
61#define PAD_DOUBLE_TAP 3
62#define PAD_SINGLE_TAP 4
63#define PAD_ORIENT 5
64#define PAD_FLAT 6
65
66
67#define BMA250_CHIP_ID_REG 0x00
68#define BMA250_VERSION_REG 0x01
69#define BMA250_X_AXIS_LSB_REG 0x02
70#define BMA250_X_AXIS_MSB_REG 0x03
71#define BMA250_Y_AXIS_LSB_REG 0x04
72#define BMA250_Y_AXIS_MSB_REG 0x05
73#define BMA250_Z_AXIS_LSB_REG 0x06
74#define BMA250_Z_AXIS_MSB_REG 0x07
75#define BMA250_TEMP_RD_REG 0x08
76#define BMA250_STATUS1_REG 0x09
77#define BMA250_STATUS2_REG 0x0A
78#define BMA250_STATUS_TAP_SLOPE_REG 0x0B
79#define BMA250_STATUS_ORIENT_HIGH_REG 0x0C
80#define BMA250_RANGE_SEL_REG 0x0F
81#define BMA250_BW_SEL_REG 0x10
82#define BMA250_MODE_CTRL_REG 0x11
83#define BMA250_LOW_NOISE_CTRL_REG 0x12
84#define BMA250_DATA_CTRL_REG 0x13
85#define BMA250_RESET_REG 0x14
86#define BMA250_INT_ENABLE1_REG 0x16
87#define BMA250_INT_ENABLE2_REG 0x17
88#define BMA250_INT1_PAD_SEL_REG 0x19
89#define BMA250_INT_DATA_SEL_REG 0x1A
90#define BMA250_INT2_PAD_SEL_REG 0x1B
91#define BMA250_INT_SRC_REG 0x1E
92#define BMA250_INT_SET_REG 0x20
93#define BMA250_INT_CTRL_REG 0x21
94#define BMA250_LOW_DURN_REG 0x22
95#define BMA250_LOW_THRES_REG 0x23
96#define BMA250_LOW_HIGH_HYST_REG 0x24
97#define BMA250_HIGH_DURN_REG 0x25
98#define BMA250_HIGH_THRES_REG 0x26
99#define BMA250_SLOPE_DURN_REG 0x27
100#define BMA250_SLOPE_THRES_REG 0x28
101#define BMA250_TAP_PARAM_REG 0x2A
102#define BMA250_TAP_THRES_REG 0x2B
103#define BMA250_ORIENT_PARAM_REG 0x2C
104#define BMA250_THETA_BLOCK_REG 0x2D
105#define BMA250_THETA_FLAT_REG 0x2E
106#define BMA250_FLAT_HOLD_TIME_REG 0x2F
107#define BMA250_STATUS_LOW_POWER_REG 0x31
108#define BMA250_SELF_TEST_REG 0x32
109#define BMA250_EEPROM_CTRL_REG 0x33
110#define BMA250_SERIAL_CTRL_REG 0x34
111#define BMA250_CTRL_UNLOCK_REG 0x35
112#define BMA250_OFFSET_CTRL_REG 0x36
113#define BMA250_OFFSET_PARAMS_REG 0x37
114#define BMA250_OFFSET_FILT_X_REG 0x38
115#define BMA250_OFFSET_FILT_Y_REG 0x39
116#define BMA250_OFFSET_FILT_Z_REG 0x3A
117#define BMA250_OFFSET_UNFILT_X_REG 0x3B
118#define BMA250_OFFSET_UNFILT_Y_REG 0x3C
119#define BMA250_OFFSET_UNFILT_Z_REG 0x3D
120#define BMA250_SPARE_0_REG 0x3E
121#define BMA250_SPARE_1_REG 0x3F
122
123#define BMA250_ACC_X_LSB__POS 6
124#define BMA250_ACC_X_LSB__LEN 2
125#define BMA250_ACC_X_LSB__MSK 0xC0
126#define BMA250_ACC_X_LSB__REG BMA250_X_AXIS_LSB_REG
127
128#define BMA250_ACC_X_MSB__POS 0
129#define BMA250_ACC_X_MSB__LEN 8
130#define BMA250_ACC_X_MSB__MSK 0xFF
131#define BMA250_ACC_X_MSB__REG BMA250_X_AXIS_MSB_REG
132
133#define BMA250_ACC_Y_LSB__POS 6
134#define BMA250_ACC_Y_LSB__LEN 2
135#define BMA250_ACC_Y_LSB__MSK 0xC0
136#define BMA250_ACC_Y_LSB__REG BMA250_Y_AXIS_LSB_REG
137
138#define BMA250_ACC_Y_MSB__POS 0
139#define BMA250_ACC_Y_MSB__LEN 8
140#define BMA250_ACC_Y_MSB__MSK 0xFF
141#define BMA250_ACC_Y_MSB__REG BMA250_Y_AXIS_MSB_REG
142
143#define BMA250_ACC_Z_LSB__POS 6
144#define BMA250_ACC_Z_LSB__LEN 2
145#define BMA250_ACC_Z_LSB__MSK 0xC0
146#define BMA250_ACC_Z_LSB__REG BMA250_Z_AXIS_LSB_REG
147
148#define BMA250_ACC_Z_MSB__POS 0
149#define BMA250_ACC_Z_MSB__LEN 8
150#define BMA250_ACC_Z_MSB__MSK 0xFF
151#define BMA250_ACC_Z_MSB__REG BMA250_Z_AXIS_MSB_REG
152
153#define BMA250_RANGE_SEL__POS 0
154#define BMA250_RANGE_SEL__LEN 4
155#define BMA250_RANGE_SEL__MSK 0x0F
156#define BMA250_RANGE_SEL__REG BMA250_RANGE_SEL_REG
157
158#define BMA250_BANDWIDTH__POS 0
159#define BMA250_BANDWIDTH__LEN 5
160#define BMA250_BANDWIDTH__MSK 0x1F
161#define BMA250_BANDWIDTH__REG BMA250_BW_SEL_REG
162
163#define BMA250_EN_LOW_POWER__POS 6
164#define BMA250_EN_LOW_POWER__LEN 1
165#define BMA250_EN_LOW_POWER__MSK 0x40
166#define BMA250_EN_LOW_POWER__REG BMA250_MODE_CTRL_REG
167
168#define BMA250_EN_SUSPEND__POS 7
169#define BMA250_EN_SUSPEND__LEN 1
170#define BMA250_EN_SUSPEND__MSK 0x80
171#define BMA250_EN_SUSPEND__REG BMA250_MODE_CTRL_REG
172
173#define BMA250_INT_MODE_SEL__POS 0
174#define BMA250_INT_MODE_SEL__LEN 4
175#define BMA250_INT_MODE_SEL__MSK 0x0F
176#define BMA250_INT_MODE_SEL__REG BMA250_INT_CTRL_REG
177
178#define BMA250_LOWG_INT_S__POS 0
179#define BMA250_LOWG_INT_S__LEN 1
180#define BMA250_LOWG_INT_S__MSK 0x01
181#define BMA250_LOWG_INT_S__REG BMA250_STATUS1_REG
182
183#define BMA250_HIGHG_INT_S__POS 1
184#define BMA250_HIGHG_INT_S__LEN 1
185#define BMA250_HIGHG_INT_S__MSK 0x02
186#define BMA250_HIGHG_INT_S__REG BMA250_STATUS1_REG
187
188#define BMA250_SLOPE_INT_S__POS 2
189#define BMA250_SLOPE_INT_S__LEN 1
190#define BMA250_SLOPE_INT_S__MSK 0x04
191#define BMA250_SLOPE_INT_S__REG BMA250_STATUS1_REG
192
193#define BMA250_DOUBLE_TAP_INT_S__POS 4
194#define BMA250_DOUBLE_TAP_INT_S__LEN 1
195#define BMA250_DOUBLE_TAP_INT_S__MSK 0x10
196#define BMA250_DOUBLE_TAP_INT_S__REG BMA250_STATUS1_REG
197
198#define BMA250_SINGLE_TAP_INT_S__POS 5
199#define BMA250_SINGLE_TAP_INT_S__LEN 1
200#define BMA250_SINGLE_TAP_INT_S__MSK 0x20
201#define BMA250_SINGLE_TAP_INT_S__REG BMA250_STATUS1_REG
202
203#define BMA250_ORIENT_INT_S__POS 6
204#define BMA250_ORIENT_INT_S__LEN 1
205#define BMA250_ORIENT_INT_S__MSK 0x40
206#define BMA250_ORIENT_INT_S__REG BMA250_STATUS1_REG
207
208#define BMA250_FLAT_INT_S__POS 7
209#define BMA250_FLAT_INT_S__LEN 1
210#define BMA250_FLAT_INT_S__MSK 0x80
211#define BMA250_FLAT_INT_S__REG BMA250_STATUS1_REG
212
213#define BMA250_DATA_INT_S__POS 7
214#define BMA250_DATA_INT_S__LEN 1
215#define BMA250_DATA_INT_S__MSK 0x80
216#define BMA250_DATA_INT_S__REG BMA250_STATUS2_REG
217
218#define BMA250_SLOPE_FIRST_X__POS 0
219#define BMA250_SLOPE_FIRST_X__LEN 1
220#define BMA250_SLOPE_FIRST_X__MSK 0x01
221#define BMA250_SLOPE_FIRST_X__REG BMA250_STATUS_TAP_SLOPE_REG
222
223#define BMA250_SLOPE_FIRST_Y__POS 1
224#define BMA250_SLOPE_FIRST_Y__LEN 1
225#define BMA250_SLOPE_FIRST_Y__MSK 0x02
226#define BMA250_SLOPE_FIRST_Y__REG BMA250_STATUS_TAP_SLOPE_REG
227
228#define BMA250_SLOPE_FIRST_Z__POS 2
229#define BMA250_SLOPE_FIRST_Z__LEN 1
230#define BMA250_SLOPE_FIRST_Z__MSK 0x04
231#define BMA250_SLOPE_FIRST_Z__REG BMA250_STATUS_TAP_SLOPE_REG
232
233#define BMA250_SLOPE_SIGN_S__POS 3
234#define BMA250_SLOPE_SIGN_S__LEN 1
235#define BMA250_SLOPE_SIGN_S__MSK 0x08
236#define BMA250_SLOPE_SIGN_S__REG BMA250_STATUS_TAP_SLOPE_REG
237
238#define BMA250_TAP_FIRST_X__POS 4
239#define BMA250_TAP_FIRST_X__LEN 1
240#define BMA250_TAP_FIRST_X__MSK 0x10
241#define BMA250_TAP_FIRST_X__REG BMA250_STATUS_TAP_SLOPE_REG
242
243#define BMA250_TAP_FIRST_Y__POS 5
244#define BMA250_TAP_FIRST_Y__LEN 1
245#define BMA250_TAP_FIRST_Y__MSK 0x20
246#define BMA250_TAP_FIRST_Y__REG BMA250_STATUS_TAP_SLOPE_REG
247
248#define BMA250_TAP_FIRST_Z__POS 6
249#define BMA250_TAP_FIRST_Z__LEN 1
250#define BMA250_TAP_FIRST_Z__MSK 0x40
251#define BMA250_TAP_FIRST_Z__REG BMA250_STATUS_TAP_SLOPE_REG
252
253#define BMA250_TAP_FIRST_XYZ__POS 4
254#define BMA250_TAP_FIRST_XYZ__LEN 3
255#define BMA250_TAP_FIRST_XYZ__MSK 0x70
256#define BMA250_TAP_FIRST_XYZ__REG BMA250_STATUS_TAP_SLOPE_REG
257
258#define BMA250_TAP_SIGN_S__POS 7
259#define BMA250_TAP_SIGN_S__LEN 1
260#define BMA250_TAP_SIGN_S__MSK 0x80
261#define BMA250_TAP_SIGN_S__REG BMA250_STATUS_TAP_SLOPE_REG
262
263#define BMA250_HIGHG_FIRST_X__POS 0
264#define BMA250_HIGHG_FIRST_X__LEN 1
265#define BMA250_HIGHG_FIRST_X__MSK 0x01
266#define BMA250_HIGHG_FIRST_X__REG BMA250_STATUS_ORIENT_HIGH_REG
267
268#define BMA250_HIGHG_FIRST_Y__POS 1
269#define BMA250_HIGHG_FIRST_Y__LEN 1
270#define BMA250_HIGHG_FIRST_Y__MSK 0x02
271#define BMA250_HIGHG_FIRST_Y__REG BMA250_STATUS_ORIENT_HIGH_REG
272
273#define BMA250_HIGHG_FIRST_Z__POS 2
274#define BMA250_HIGHG_FIRST_Z__LEN 1
275#define BMA250_HIGHG_FIRST_Z__MSK 0x04
276#define BMA250_HIGHG_FIRST_Z__REG BMA250_STATUS_ORIENT_HIGH_REG
277
278#define BMA250_HIGHG_SIGN_S__POS 3
279#define BMA250_HIGHG_SIGN_S__LEN 1
280#define BMA250_HIGHG_SIGN_S__MSK 0x08
281#define BMA250_HIGHG_SIGN_S__REG BMA250_STATUS_ORIENT_HIGH_REG
282
283#define BMA250_ORIENT_S__POS 4
284#define BMA250_ORIENT_S__LEN 3
285#define BMA250_ORIENT_S__MSK 0x70
286#define BMA250_ORIENT_S__REG BMA250_STATUS_ORIENT_HIGH_REG
287
288#define BMA250_FLAT_S__POS 7
289#define BMA250_FLAT_S__LEN 1
290#define BMA250_FLAT_S__MSK 0x80
291#define BMA250_FLAT_S__REG BMA250_STATUS_ORIENT_HIGH_REG
292
293#define BMA250_EN_SLOPE_X_INT__POS 0
294#define BMA250_EN_SLOPE_X_INT__LEN 1
295#define BMA250_EN_SLOPE_X_INT__MSK 0x01
296#define BMA250_EN_SLOPE_X_INT__REG BMA250_INT_ENABLE1_REG
297
298#define BMA250_EN_SLOPE_Y_INT__POS 1
299#define BMA250_EN_SLOPE_Y_INT__LEN 1
300#define BMA250_EN_SLOPE_Y_INT__MSK 0x02
301#define BMA250_EN_SLOPE_Y_INT__REG BMA250_INT_ENABLE1_REG
302
303#define BMA250_EN_SLOPE_Z_INT__POS 2
304#define BMA250_EN_SLOPE_Z_INT__LEN 1
305#define BMA250_EN_SLOPE_Z_INT__MSK 0x04
306#define BMA250_EN_SLOPE_Z_INT__REG BMA250_INT_ENABLE1_REG
307
308#define BMA250_EN_SLOPE_XYZ_INT__POS 0
309#define BMA250_EN_SLOPE_XYZ_INT__LEN 3
310#define BMA250_EN_SLOPE_XYZ_INT__MSK 0x07
311#define BMA250_EN_SLOPE_XYZ_INT__REG BMA250_INT_ENABLE1_REG
312
313#define BMA250_EN_DOUBLE_TAP_INT__POS 4
314#define BMA250_EN_DOUBLE_TAP_INT__LEN 1
315#define BMA250_EN_DOUBLE_TAP_INT__MSK 0x10
316#define BMA250_EN_DOUBLE_TAP_INT__REG BMA250_INT_ENABLE1_REG
317
318#define BMA250_EN_SINGLE_TAP_INT__POS 5
319#define BMA250_EN_SINGLE_TAP_INT__LEN 1
320#define BMA250_EN_SINGLE_TAP_INT__MSK 0x20
321#define BMA250_EN_SINGLE_TAP_INT__REG BMA250_INT_ENABLE1_REG
322
323#define BMA250_EN_ORIENT_INT__POS 6
324#define BMA250_EN_ORIENT_INT__LEN 1
325#define BMA250_EN_ORIENT_INT__MSK 0x40
326#define BMA250_EN_ORIENT_INT__REG BMA250_INT_ENABLE1_REG
327
328#define BMA250_EN_FLAT_INT__POS 7
329#define BMA250_EN_FLAT_INT__LEN 1
330#define BMA250_EN_FLAT_INT__MSK 0x80
331#define BMA250_EN_FLAT_INT__REG BMA250_INT_ENABLE1_REG
332
333#define BMA250_EN_HIGHG_X_INT__POS 0
334#define BMA250_EN_HIGHG_X_INT__LEN 1
335#define BMA250_EN_HIGHG_X_INT__MSK 0x01
336#define BMA250_EN_HIGHG_X_INT__REG BMA250_INT_ENABLE2_REG
337
338#define BMA250_EN_HIGHG_Y_INT__POS 1
339#define BMA250_EN_HIGHG_Y_INT__LEN 1
340#define BMA250_EN_HIGHG_Y_INT__MSK 0x02
341#define BMA250_EN_HIGHG_Y_INT__REG BMA250_INT_ENABLE2_REG
342
343#define BMA250_EN_HIGHG_Z_INT__POS 2
344#define BMA250_EN_HIGHG_Z_INT__LEN 1
345#define BMA250_EN_HIGHG_Z_INT__MSK 0x04
346#define BMA250_EN_HIGHG_Z_INT__REG BMA250_INT_ENABLE2_REG
347
348#define BMA250_EN_HIGHG_XYZ_INT__POS 2
349#define BMA250_EN_HIGHG_XYZ_INT__LEN 1
350#define BMA250_EN_HIGHG_XYZ_INT__MSK 0x04
351#define BMA250_EN_HIGHG_XYZ_INT__REG BMA250_INT_ENABLE2_REG
352
353#define BMA250_EN_LOWG_INT__POS 3
354#define BMA250_EN_LOWG_INT__LEN 1
355#define BMA250_EN_LOWG_INT__MSK 0x08
356#define BMA250_EN_LOWG_INT__REG BMA250_INT_ENABLE2_REG
357
358#define BMA250_EN_NEW_DATA_INT__POS 4
359#define BMA250_EN_NEW_DATA_INT__LEN 1
360#define BMA250_EN_NEW_DATA_INT__MSK 0x10
361#define BMA250_EN_NEW_DATA_INT__REG BMA250_INT_ENABLE2_REG
362
363#define BMA250_EN_INT1_PAD_LOWG__POS 0
364#define BMA250_EN_INT1_PAD_LOWG__LEN 1
365#define BMA250_EN_INT1_PAD_LOWG__MSK 0x01
366#define BMA250_EN_INT1_PAD_LOWG__REG BMA250_INT1_PAD_SEL_REG
367
368#define BMA250_EN_INT1_PAD_HIGHG__POS 1
369#define BMA250_EN_INT1_PAD_HIGHG__LEN 1
370#define BMA250_EN_INT1_PAD_HIGHG__MSK 0x02
371#define BMA250_EN_INT1_PAD_HIGHG__REG BMA250_INT1_PAD_SEL_REG
372
373#define BMA250_EN_INT1_PAD_SLOPE__POS 2
374#define BMA250_EN_INT1_PAD_SLOPE__LEN 1
375#define BMA250_EN_INT1_PAD_SLOPE__MSK 0x04
376#define BMA250_EN_INT1_PAD_SLOPE__REG BMA250_INT1_PAD_SEL_REG
377
378#define BMA250_EN_INT1_PAD_DB_TAP__POS 4
379#define BMA250_EN_INT1_PAD_DB_TAP__LEN 1
380#define BMA250_EN_INT1_PAD_DB_TAP__MSK 0x10
381#define BMA250_EN_INT1_PAD_DB_TAP__REG BMA250_INT1_PAD_SEL_REG
382
383#define BMA250_EN_INT1_PAD_SNG_TAP__POS 5
384#define BMA250_EN_INT1_PAD_SNG_TAP__LEN 1
385#define BMA250_EN_INT1_PAD_SNG_TAP__MSK 0x20
386#define BMA250_EN_INT1_PAD_SNG_TAP__REG BMA250_INT1_PAD_SEL_REG
387
388#define BMA250_EN_INT1_PAD_ORIENT__POS 6
389#define BMA250_EN_INT1_PAD_ORIENT__LEN 1
390#define BMA250_EN_INT1_PAD_ORIENT__MSK 0x40
391#define BMA250_EN_INT1_PAD_ORIENT__REG BMA250_INT1_PAD_SEL_REG
392
393#define BMA250_EN_INT1_PAD_FLAT__POS 7
394#define BMA250_EN_INT1_PAD_FLAT__LEN 1
395#define BMA250_EN_INT1_PAD_FLAT__MSK 0x80
396#define BMA250_EN_INT1_PAD_FLAT__REG BMA250_INT1_PAD_SEL_REG
397
398#define BMA250_EN_INT2_PAD_LOWG__POS 0
399#define BMA250_EN_INT2_PAD_LOWG__LEN 1
400#define BMA250_EN_INT2_PAD_LOWG__MSK 0x01
401#define BMA250_EN_INT2_PAD_LOWG__REG BMA250_INT2_PAD_SEL_REG
402
403#define BMA250_EN_INT2_PAD_HIGHG__POS 1
404#define BMA250_EN_INT2_PAD_HIGHG__LEN 1
405#define BMA250_EN_INT2_PAD_HIGHG__MSK 0x02
406#define BMA250_EN_INT2_PAD_HIGHG__REG BMA250_INT2_PAD_SEL_REG
407
408#define BMA250_EN_INT2_PAD_SLOPE__POS 2
409#define BMA250_EN_INT2_PAD_SLOPE__LEN 1
410#define BMA250_EN_INT2_PAD_SLOPE__MSK 0x04
411#define BMA250_EN_INT2_PAD_SLOPE__REG BMA250_INT2_PAD_SEL_REG
412
413#define BMA250_EN_INT2_PAD_DB_TAP__POS 4
414#define BMA250_EN_INT2_PAD_DB_TAP__LEN 1
415#define BMA250_EN_INT2_PAD_DB_TAP__MSK 0x10
416#define BMA250_EN_INT2_PAD_DB_TAP__REG BMA250_INT2_PAD_SEL_REG
417
418#define BMA250_EN_INT2_PAD_SNG_TAP__POS 5
419#define BMA250_EN_INT2_PAD_SNG_TAP__LEN 1
420#define BMA250_EN_INT2_PAD_SNG_TAP__MSK 0x20
421#define BMA250_EN_INT2_PAD_SNG_TAP__REG BMA250_INT2_PAD_SEL_REG
422
423#define BMA250_EN_INT2_PAD_ORIENT__POS 6
424#define BMA250_EN_INT2_PAD_ORIENT__LEN 1
425#define BMA250_EN_INT2_PAD_ORIENT__MSK 0x40
426#define BMA250_EN_INT2_PAD_ORIENT__REG BMA250_INT2_PAD_SEL_REG
427
428#define BMA250_EN_INT2_PAD_FLAT__POS 7
429#define BMA250_EN_INT2_PAD_FLAT__LEN 1
430#define BMA250_EN_INT2_PAD_FLAT__MSK 0x80
431#define BMA250_EN_INT2_PAD_FLAT__REG BMA250_INT2_PAD_SEL_REG
432
433#define BMA250_EN_INT1_PAD_NEWDATA__POS 0
434#define BMA250_EN_INT1_PAD_NEWDATA__LEN 1
435#define BMA250_EN_INT1_PAD_NEWDATA__MSK 0x01
436#define BMA250_EN_INT1_PAD_NEWDATA__REG BMA250_INT_DATA_SEL_REG
437
438#define BMA250_EN_INT2_PAD_NEWDATA__POS 7
439#define BMA250_EN_INT2_PAD_NEWDATA__LEN 1
440#define BMA250_EN_INT2_PAD_NEWDATA__MSK 0x80
441#define BMA250_EN_INT2_PAD_NEWDATA__REG BMA250_INT_DATA_SEL_REG
442
443
444#define BMA250_UNFILT_INT_SRC_LOWG__POS 0
445#define BMA250_UNFILT_INT_SRC_LOWG__LEN 1
446#define BMA250_UNFILT_INT_SRC_LOWG__MSK 0x01
447#define BMA250_UNFILT_INT_SRC_LOWG__REG BMA250_INT_SRC_REG
448
449#define BMA250_UNFILT_INT_SRC_HIGHG__POS 1
450#define BMA250_UNFILT_INT_SRC_HIGHG__LEN 1
451#define BMA250_UNFILT_INT_SRC_HIGHG__MSK 0x02
452#define BMA250_UNFILT_INT_SRC_HIGHG__REG BMA250_INT_SRC_REG
453
454#define BMA250_UNFILT_INT_SRC_SLOPE__POS 2
455#define BMA250_UNFILT_INT_SRC_SLOPE__LEN 1
456#define BMA250_UNFILT_INT_SRC_SLOPE__MSK 0x04
457#define BMA250_UNFILT_INT_SRC_SLOPE__REG BMA250_INT_SRC_REG
458
459#define BMA250_UNFILT_INT_SRC_TAP__POS 4
460#define BMA250_UNFILT_INT_SRC_TAP__LEN 1
461#define BMA250_UNFILT_INT_SRC_TAP__MSK 0x10
462#define BMA250_UNFILT_INT_SRC_TAP__REG BMA250_INT_SRC_REG
463
464#define BMA250_UNFILT_INT_SRC_DATA__POS 5
465#define BMA250_UNFILT_INT_SRC_DATA__LEN 1
466#define BMA250_UNFILT_INT_SRC_DATA__MSK 0x20
467#define BMA250_UNFILT_INT_SRC_DATA__REG BMA250_INT_SRC_REG
468
469#define BMA250_INT1_PAD_ACTIVE_LEVEL__POS 0
470#define BMA250_INT1_PAD_ACTIVE_LEVEL__LEN 1
471#define BMA250_INT1_PAD_ACTIVE_LEVEL__MSK 0x01
472#define BMA250_INT1_PAD_ACTIVE_LEVEL__REG BMA250_INT_SET_REG
473
474#define BMA250_INT2_PAD_ACTIVE_LEVEL__POS 2
475#define BMA250_INT2_PAD_ACTIVE_LEVEL__LEN 1
476#define BMA250_INT2_PAD_ACTIVE_LEVEL__MSK 0x04
477#define BMA250_INT2_PAD_ACTIVE_LEVEL__REG BMA250_INT_SET_REG
478
479#define BMA250_INT1_PAD_OUTPUT_TYPE__POS 1
480#define BMA250_INT1_PAD_OUTPUT_TYPE__LEN 1
481#define BMA250_INT1_PAD_OUTPUT_TYPE__MSK 0x02
482#define BMA250_INT1_PAD_OUTPUT_TYPE__REG BMA250_INT_SET_REG
483
484#define BMA250_INT2_PAD_OUTPUT_TYPE__POS 3
485#define BMA250_INT2_PAD_OUTPUT_TYPE__LEN 1
486#define BMA250_INT2_PAD_OUTPUT_TYPE__MSK 0x08
487#define BMA250_INT2_PAD_OUTPUT_TYPE__REG BMA250_INT_SET_REG
488
489
490#define BMA250_INT_MODE_SEL__POS 0
491#define BMA250_INT_MODE_SEL__LEN 4
492#define BMA250_INT_MODE_SEL__MSK 0x0F
493#define BMA250_INT_MODE_SEL__REG BMA250_INT_CTRL_REG
494
495
496#define BMA250_INT_RESET_LATCHED__POS 7
497#define BMA250_INT_RESET_LATCHED__LEN 1
498#define BMA250_INT_RESET_LATCHED__MSK 0x80
499#define BMA250_INT_RESET_LATCHED__REG BMA250_INT_CTRL_REG
500
501#define BMA250_LOWG_DUR__POS 0
502#define BMA250_LOWG_DUR__LEN 8
503#define BMA250_LOWG_DUR__MSK 0xFF
504#define BMA250_LOWG_DUR__REG BMA250_LOW_DURN_REG
505
506#define BMA250_LOWG_THRES__POS 0
507#define BMA250_LOWG_THRES__LEN 8
508#define BMA250_LOWG_THRES__MSK 0xFF
509#define BMA250_LOWG_THRES__REG BMA250_LOW_THRES_REG
510
511#define BMA250_LOWG_HYST__POS 0
512#define BMA250_LOWG_HYST__LEN 2
513#define BMA250_LOWG_HYST__MSK 0x03
514#define BMA250_LOWG_HYST__REG BMA250_LOW_HIGH_HYST_REG
515
516#define BMA250_LOWG_INT_MODE__POS 2
517#define BMA250_LOWG_INT_MODE__LEN 1
518#define BMA250_LOWG_INT_MODE__MSK 0x04
519#define BMA250_LOWG_INT_MODE__REG BMA250_LOW_HIGH_HYST_REG
520
521#define BMA250_HIGHG_DUR__POS 0
522#define BMA250_HIGHG_DUR__LEN 8
523#define BMA250_HIGHG_DUR__MSK 0xFF
524#define BMA250_HIGHG_DUR__REG BMA250_HIGH_DURN_REG
525
526#define BMA250_HIGHG_THRES__POS 0
527#define BMA250_HIGHG_THRES__LEN 8
528#define BMA250_HIGHG_THRES__MSK 0xFF
529#define BMA250_HIGHG_THRES__REG BMA250_HIGH_THRES_REG
530
531#define BMA250_HIGHG_HYST__POS 6
532#define BMA250_HIGHG_HYST__LEN 2
533#define BMA250_HIGHG_HYST__MSK 0xC0
534#define BMA250_HIGHG_HYST__REG BMA250_LOW_HIGH_HYST_REG
535
536#define BMA250_SLOPE_DUR__POS 0
537#define BMA250_SLOPE_DUR__LEN 2
538#define BMA250_SLOPE_DUR__MSK 0x03
539#define BMA250_SLOPE_DUR__REG BMA250_SLOPE_DURN_REG
540
541#define BMA250_SLOPE_THRES__POS 0
542#define BMA250_SLOPE_THRES__LEN 8
543#define BMA250_SLOPE_THRES__MSK 0xFF
544#define BMA250_SLOPE_THRES__REG BMA250_SLOPE_THRES_REG
545
546#define BMA250_TAP_DUR__POS 0
547#define BMA250_TAP_DUR__LEN 3
548#define BMA250_TAP_DUR__MSK 0x07
549#define BMA250_TAP_DUR__REG BMA250_TAP_PARAM_REG
550
551#define BMA250_TAP_SHOCK_DURN__POS 6
552#define BMA250_TAP_SHOCK_DURN__LEN 1
553#define BMA250_TAP_SHOCK_DURN__MSK 0x40
554#define BMA250_TAP_SHOCK_DURN__REG BMA250_TAP_PARAM_REG
555
556#define BMA250_TAP_QUIET_DURN__POS 7
557#define BMA250_TAP_QUIET_DURN__LEN 1
558#define BMA250_TAP_QUIET_DURN__MSK 0x80
559#define BMA250_TAP_QUIET_DURN__REG BMA250_TAP_PARAM_REG
560
561#define BMA250_TAP_THRES__POS 0
562#define BMA250_TAP_THRES__LEN 5
563#define BMA250_TAP_THRES__MSK 0x1F
564#define BMA250_TAP_THRES__REG BMA250_TAP_THRES_REG
565
566#define BMA250_TAP_SAMPLES__POS 6
567#define BMA250_TAP_SAMPLES__LEN 2
568#define BMA250_TAP_SAMPLES__MSK 0xC0
569#define BMA250_TAP_SAMPLES__REG BMA250_TAP_THRES_REG
570
571#define BMA250_ORIENT_MODE__POS 0
572#define BMA250_ORIENT_MODE__LEN 2
573#define BMA250_ORIENT_MODE__MSK 0x03
574#define BMA250_ORIENT_MODE__REG BMA250_ORIENT_PARAM_REG
575
576#define BMA250_ORIENT_BLOCK__POS 2
577#define BMA250_ORIENT_BLOCK__LEN 2
578#define BMA250_ORIENT_BLOCK__MSK 0x0C
579#define BMA250_ORIENT_BLOCK__REG BMA250_ORIENT_PARAM_REG
580
581#define BMA250_ORIENT_HYST__POS 4
582#define BMA250_ORIENT_HYST__LEN 3
583#define BMA250_ORIENT_HYST__MSK 0x70
584#define BMA250_ORIENT_HYST__REG BMA250_ORIENT_PARAM_REG
585
586#define BMA250_ORIENT_AXIS__POS 7
587#define BMA250_ORIENT_AXIS__LEN 1
588#define BMA250_ORIENT_AXIS__MSK 0x80
589#define BMA250_ORIENT_AXIS__REG BMA250_THETA_BLOCK_REG
590
591#define BMA250_THETA_BLOCK__POS 0
592#define BMA250_THETA_BLOCK__LEN 6
593#define BMA250_THETA_BLOCK__MSK 0x3F
594#define BMA250_THETA_BLOCK__REG BMA250_THETA_BLOCK_REG
595
596#define BMA250_THETA_FLAT__POS 0
597#define BMA250_THETA_FLAT__LEN 6
598#define BMA250_THETA_FLAT__MSK 0x3F
599#define BMA250_THETA_FLAT__REG BMA250_THETA_FLAT_REG
600
601#define BMA250_FLAT_HOLD_TIME__POS 4
602#define BMA250_FLAT_HOLD_TIME__LEN 2
603#define BMA250_FLAT_HOLD_TIME__MSK 0x30
604#define BMA250_FLAT_HOLD_TIME__REG BMA250_FLAT_HOLD_TIME_REG
605
606#define BMA250_EN_SELF_TEST__POS 0
607#define BMA250_EN_SELF_TEST__LEN 2
608#define BMA250_EN_SELF_TEST__MSK 0x03
609#define BMA250_EN_SELF_TEST__REG BMA250_SELF_TEST_REG
610
611
612
613#define BMA250_NEG_SELF_TEST__POS 2
614#define BMA250_NEG_SELF_TEST__LEN 1
615#define BMA250_NEG_SELF_TEST__MSK 0x04
616#define BMA250_NEG_SELF_TEST__REG BMA250_SELF_TEST_REG
617
618
619#define BMA250_LOW_POWER_MODE_S__POS 0
620#define BMA250_LOW_POWER_MODE_S__LEN 1
621#define BMA250_LOW_POWER_MODE_S__MSK 0x01
622#define BMA250_LOW_POWER_MODE_S__REG BMA250_STATUS_LOW_POWER_REG
623
624#define BMA250_EN_FAST_COMP__POS 5
625#define BMA250_EN_FAST_COMP__LEN 2
626#define BMA250_EN_FAST_COMP__MSK 0x60
627#define BMA250_EN_FAST_COMP__REG BMA250_OFFSET_CTRL_REG
628
629#define BMA250_FAST_COMP_RDY_S__POS 4
630#define BMA250_FAST_COMP_RDY_S__LEN 1
631#define BMA250_FAST_COMP_RDY_S__MSK 0x10
632#define BMA250_FAST_COMP_RDY_S__REG BMA250_OFFSET_CTRL_REG
633
634#define BMA250_COMP_TARGET_OFFSET_X__POS 1
635#define BMA250_COMP_TARGET_OFFSET_X__LEN 2
636#define BMA250_COMP_TARGET_OFFSET_X__MSK 0x06
637#define BMA250_COMP_TARGET_OFFSET_X__REG BMA250_OFFSET_PARAMS_REG
638
639#define BMA250_COMP_TARGET_OFFSET_Y__POS 3
640#define BMA250_COMP_TARGET_OFFSET_Y__LEN 2
641#define BMA250_COMP_TARGET_OFFSET_Y__MSK 0x18
642#define BMA250_COMP_TARGET_OFFSET_Y__REG BMA250_OFFSET_PARAMS_REG
643
644#define BMA250_COMP_TARGET_OFFSET_Z__POS 5
645#define BMA250_COMP_TARGET_OFFSET_Z__LEN 2
646#define BMA250_COMP_TARGET_OFFSET_Z__MSK 0x60
647#define BMA250_COMP_TARGET_OFFSET_Z__REG BMA250_OFFSET_PARAMS_REG
648
649#define BMA250_UNLOCK_EE_WRITE_SETTING__POS 0
650#define BMA250_UNLOCK_EE_WRITE_SETTING__LEN 1
651#define BMA250_UNLOCK_EE_WRITE_SETTING__MSK 0x01
652#define BMA250_UNLOCK_EE_WRITE_SETTING__REG BMA250_EEPROM_CTRL_REG
653
654#define BMA250_START_EE_WRITE_SETTING__POS 1
655#define BMA250_START_EE_WRITE_SETTING__LEN 1
656#define BMA250_START_EE_WRITE_SETTING__MSK 0x02
657#define BMA250_START_EE_WRITE_SETTING__REG BMA250_EEPROM_CTRL_REG
658
659#define BMA250_EE_WRITE_SETTING_S__POS 2
660#define BMA250_EE_WRITE_SETTING_S__LEN 1
661#define BMA250_EE_WRITE_SETTING_S__MSK 0x04
662#define BMA250_EE_WRITE_SETTING_S__REG BMA250_EEPROM_CTRL_REG
663
664#define BMA250_RANGE_2G 0
665#define BMA250_RANGE_4G 1
666#define BMA250_RANGE_8G 2
667#define BMA250_RANGE_16G 3
668
669#define BMA250_BW_7_81HZ 0x08
670#define BMA250_BW_15_63HZ 0x09
671#define BMA250_BW_31_25HZ 0x0A
672#define BMA250_BW_62_50HZ 0x0B
673#define BMA250_BW_125HZ 0x0C
674#define BMA250_BW_250HZ 0x0D
675#define BMA250_BW_500HZ 0x0E
676#define BMA250_BW_1000HZ 0x0F
677
678#define BMA250_MODE_NORMAL 0
679#define BMA250_MODE_LOWPOWER 1
680#define BMA250_MODE_SUSPEND 2
681
682#define BMA250_GET_BITSLICE(regvar, bitname)\
683 ((regvar & bitname##__MSK) >> bitname##__POS)
684
685#define BMA250_SET_BITSLICE(regvar, bitname, val)\
686 ((regvar & ~bitname##__MSK) | ((val<<bitname##__POS)&bitname##__MSK))
687
688#define BMA250_I2C_NAME "bma250"
689
690#define BMAIO 0xA1
691
692#define bma250_CHIP_ID_REG 0x00
693#define bma250_X_AXIS_LSB_REG 0x2
694#define bma250_RANGE_SEL_REG 0x0F
695#define bma250_BW_SEL_REG 0x10
696#define bma250_MODE_CTRL_REG 0x11
697
698#define BMA_IOCTL_INIT _IO(BMAIO, 0x31)
699#define BMA_IOCTL_WRITE _IOW(BMAIO, 0x32, char[5])
700#define BMA_IOCTL_READ _IOWR(BMAIO, 0x33, char[5])
701#define BMA_IOCTL_READ_ACCELERATION _IOWR(BMAIO, 0x34, short[7])
702#define BMA_IOCTL_SET_MODE _IOW(BMAIO, 0x35, short)
703#define BMA_IOCTL_GET_INT _IOR(BMAIO, 0x36, short)
704#define BMA_IOCTL_GET_CHIP_LAYOUT _IOR(BMAIO, 0x37, short)
705#define BMA_IOCTL_GET_CALI_MODE _IOR(BMAIO, 0x38, short)
706#define BMA_IOCTL_SET_CALI_MODE _IOW(BMAIO, 0x39, short)
707#define BMA_IOCTL_READ_CALI_VALUE _IOR(BMAIO, 0x3a, char[3])
708#define BMA_IOCTL_WRITE_CALI_VALUE _IOW(BMAIO, 0x3b, int)
709#define BMA_IOCTL_GET_UPDATE_USER_CALI_DATA _IOR(BMAIO, 0x3c, short)
710#define BMA_IOCTL_SET_UPDATE_USER_CALI_DATA _IOW(BMAIO, 0x3d, short)
711
712#define BMA_RANGE_2G 0x3
713#define BMA_RANGE_4G 0x5
714#define BMA_RANGE_8G 0x8
715#define BMA_RANGE_16G 0xC
716
717#define BMA_BW_7_81HZ 0x8
718#define BMA_BW_15_63HZ 0x9
719#define BMA_BW_31_25HZ 0xA
720#define BMA_BW_62_5HZ 0xB
721#define BMA_BW_125HZ 0xC
722#define BMA_BW_250HZ 0xD
723#define BMA_BW_500HZ 0xE
724#define BMA_BW_1000HZ 0xF
725
726#define E_OUT_OF_RANGE (char)(-2)
727
728#define bma250_MODE_NORMAL 0
729#define bma250_MODE_SUSPEND 1
730
731extern unsigned int gs_kvalue;
732
733struct bma250_platform_data {
734 int intr;
735 int chip_layout;
736 int calibration_mode;
737 int gs_kvalue;
738 unsigned int (*G_Sensor_Compass_POR)(void);
739
740
741 u8 axis_map_x;
742 u8 axis_map_y;
743 u8 axis_map_z;
744
745 u8 negate_x;
746 u8 negate_y;
747 u8 negate_z;
748
749 int (*power_LPM)(int on);
750};
751
752#endif