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