2 * Definitions for mma8452 compass chip.
7 #include <linux/ioctl.h>
9 /* Default register settings */
10 #define RBUFF_SIZE 12 /* Rx buffer size */
12 #define MMA8452_REG_STATUS 0x0 //RO
13 #define MMA8452_REG_X_OUT_MSB 0x1 //RO
14 #define MMA8452_REG_X_OUT_LSB 0x2 //RO
15 #define MMA8452_REG_Y_OUT_MSB 0x3 //RO
16 #define MMA8452_REG_Y_OUT_LSB 0x4 //RO
17 #define MMA8452_REG_Z_OUT_MSB 0x5 //RO
18 #define MMA8452_REG_Z_OUT_LSB 0x6 //RO
19 #define MMA8452_REG_F_SETUP 0x9 //RW
21 #define MMA8452_REG_SYSMOD 0xB //RO
22 #define MMA8452_REG_INTSRC 0xC //RO
23 #define MMA8452_REG_WHO_AM_I 0xD //RO
24 #define MMA8452_REG_XYZ_DATA_CFG 0xE //RW
25 #define MMA8452_REG_HP_FILTER_CUTOFF 0xF //RW
26 #define MMA8452_REG_PL_STATUS 0x10 //RO
27 #define MMA8452_REG_PL_CFG 0x11 //RW
28 #define MMA8452_REG_PL_COUNT 0x12 //RW
29 #define MMA8452_REG_PL_BF_ZCOMP 0x13 //RW
30 #define MMA8452_REG_P_L_THS_REG 0x14 //RW
31 #define MMA8452_REG_FF_MT_CFG 0x15 //RW
32 #define MMA8452_REG_FF_MT_SRC 0x16 //RO
33 #define MMA8452_REG_FF_MT_THS 0x17 //RW
34 #define MMA8452_REG_FF_MT_COUNT 0x18 //RW
35 #define MMA8452_REG_TRANSIENT_CFG 0x1D //RW
36 #define MMA8452_REG_TRANSIENT_SRC 0x1E //RO
37 #define MMA8452_REG_TRANSIENT_THS 0x1F //RW
38 #define MMA8452_REG_TRANSIENT_COUNT 0x20 //RW
39 #define MMA8452_REG_PULSE_CFG 0x21 //RW
40 #define MMA8452_REG_PULSE_SRC 0x22 //RO
41 #define MMA8452_REG_PULSE_THSX 0x23 //RW
42 #define MMA8452_REG_PULSE_THSY 0x24 //RW
43 #define MMA8452_REG_PULSE_THSZ 0x25 //RW
44 #define MMA8452_REG_PULSE_TMLT 0x26 //RW
45 #define MMA8452_REG_PULSE_LTCY 0x27 //RW
46 #define MMA8452_REG_PULSE_WIND 0x28 //RW
47 #define MMA8452_REG_ASLP_COUNT 0x29 //RW
48 #define MMA8452_REG_CTRL_REG1 0x2A //RW
49 #define MMA8452_REG_CTRL_REG2 0x2B //RW
50 #define MMA8452_REG_CTRL_REG3 0x2C //RW
51 #define MMA8452_REG_CTRL_REG4 0x2D //RW
52 #define MMA8452_REG_CTRL_REG5 0x2E //RW
53 #define MMA8452_REG_OFF_X 0x2F //RW
54 #define MMA8452_REG_OFF_Y 0x30 //RW
55 #define MMA8452_REG_OFF_Z 0x31 //RW
59 /* IOCTLs for MMA8452 library */
60 #define MMA_IOCTL_INIT _IO(MMAIO, 0x01)
61 #define MMA_IOCTL_RESET _IO(MMAIO, 0x04)
62 #define MMA_IOCTL_CLOSE _IO(MMAIO, 0x02)
63 #define MMA_IOCTL_START _IO(MMAIO, 0x03)
64 #define MMA_IOCTL_GETDATA _IOR(MMAIO, 0x08, char[RBUFF_SIZE+1])
67 #define MMA_IOCTL_APP_SET_RATE _IOW(MMAIO, 0x10, char)
71 #define MMA8452_RATE_800 0
72 #define MMA8452_RATE_400 1
73 #define MMA8452_RATE_200 2
74 #define MMA8452_RATE_100 3
75 #define MMA8452_RATE_50 4
76 #define MMA8452_RATE_12P5 5
77 #define MMA8452_RATE_6P25 6
78 #define MMA8452_RATE_1P56 7
79 #define MMA8452_RATE_SHIFT 3
82 #define MMA8452_ASLP_RATE_50 0
83 #define MMA8452_ASLP_RATE_12P5 1
84 #define MMA8452_ASLP_RATE_6P25 2
85 #define MMA8452_ASLP_RATE_1P56 3
86 #define MMA8452_ASLP_RATE_SHIFT 6
88 /*Auto-adapt mma845x series*/
89 /*Modified by Yick @ROCKCHIP
92 Range: unit(ug 1g=1 000 000 ug)
94 G would be defined on android HAL
95 Precision: bit wide of valid data
96 Boundary: Max positive count
97 Gravity_step: gravity value indicated by per count
99 #define FREAD_MASK 0 /* enabled(1<<1) only if reading MSB 8bits*/
100 #define MMA845X_RANGE 2000000
102 #define MMA8451_PRECISION 14
103 #define MMA8451_BOUNDARY (0x1 << (MMA8451_PRECISION - 1))
104 #define MMA8451_GRAVITY_STEP MMA845X_RANGE / MMA8451_BOUNDARY
107 #define MMA8452_PRECISION 12
108 #define MMA8452_BOUNDARY (0x1 << (MMA8452_PRECISION - 1))
109 #define MMA8452_GRAVITY_STEP MMA845X_RANGE / MMA8452_BOUNDARY
112 #define MMA8453_PRECISION 10
113 #define MMA8453_BOUNDARY (0x1 << (MMA8453_PRECISION - 1))
114 #define MMA8453_GRAVITY_STEP MMA845X_RANGE / MMA8453_BOUNDARY
116 /*End of precision adaption*/
118 #define MMA8452_TOTAL_TIME 10
120 #define ACTIVE_MASK 1
123 #define MMA8452_SUSPEND 2
124 #define MMA8452_OPEN 1
125 #define MMA8452_CLOSE 0
127 #define MMA8452_REG_LEN 11
129 struct mma8452_axis {
135 #define GSENSOR_DEV_PATH "/dev/mma8452_daemon"