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