aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc/mediatek/gyroscope/mpu3000/mpu3000.h
blob: 67c797b3edbad10e8f24a567022b04b3ac29ae8b (plain) (blame)
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
/* mpu3000.h
 *
 * (C) Copyright 2008 
 * MediaTek <www.mediatek.com>
 *
 * mpu300 head file for MT65xx
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
#ifndef MPU3000_H
#define MPU3000_H
	 
#include <linux/ioctl.h>
	 
#define MPU3000_I2C_SLAVE_ADDR		0xD0
#define MPU3000_FIXED_DEVID			0xD0


/* MPU3000 Register Map  (Please refer to MPU3000 Specifications) */
#define MPU3000_REG_DEVID			         0x00
#define MPU3000_REG_OFS_XH			0x0C
#define MPU3000_REG_OFS_XL		         0x0D
#define MPU3000_REG_OFS_YH			0x0E
#define MPU3000_REG_OFS_YL			0x0F
#define MPU3000_REG_OFS_ZH			0x10
#define MPU3000_REG_OFS_ZL			0x11
#define MPU3000_REG_FIFO_EN			0x12
#define MPU3000_REG_AUX_VDD			0x13
#define MPU3000_REG_AUX_ID		         0x14
#define MPU3000_REG_SAMRT_DIV		0x15
#define MPU3000_REG_DATA_FMT			0x16   //set external sync, full-scale range and sample rate, low pass filter bandwidth
#define MPU3000_REG_INT_EN			0x17
#define MPU3000_REG_AUX_ADDR   		0x18
#define MPU3000_REG_INT_STA			0x1A

#define MPU3000_REG_TEMP_OUTH		0x1B
#define MPU3000_REG_TEMP_OUTL	         0x1C
#define MPU3000_REG_GYRO_XH			0x1D
#define MPU3000_REG_GYRO_XL			0x1E
#define MPU3000_REG_GYRO_YH			0x1F
#define MPU3000_REG_GYRO_YL			0x20
#define MPU3000_REG_GYRO_ZH			0x21
#define MPU3000_REG_GYRO_ZL			0x22
#define MPU3000_REG_AUX_XH			0x23
#define MPU3000_REG_AUX_XL			0x24
#define MPU3000_REG_AUX_YH			0x25
#define MPU3000_REG_AUX_YL			0x26
#define MPU3000_REG_AUX_ZH			0x27
#define MPU3000_REG_AUX_ZL			0x28
#define MPU3000_REG_FIFO_CNTH		0x3A
#define MPU3000_REG_FIFO_CNTL		0x3B
#define MPU3000_REG_FIFO_DATA		0x3C
#define MPU3000_REG_FIFO_CTL			0x3D
#define MPU3000_REG_PWR_CTL			0x3E

	 

/*MPU3000 Register Bit definitions*/ 
#define MPU3000_I2C_DIS					0x80	//disable I2C access mode
#define MPU3000_DEVID_MASK			0x7E	//I2C address mask of the device

#define MPU3000_FIFO_TEMP_EN			0x80	//insert the termperature data into FIFO
#define MPU3000_FIFO_GYROX_EN		0x40	//insert the X Gyro data into FIFO
#define MPU3000_FIFO_GYROY_EN		0x20	//insert the Y Gyro data into FIFO
#define MPU3000_FIFO_GYROZ_EN		0x10	//insert the Z Gyro data into FIFO
#define MPU3000_FIFO_AUXX_EN			0x08	//insert the X Accelerometer data into FIFO
#define MPU3000_FIFO_AUXY_EN			0x04	//insert the Y Accelerometer data into FIFO
#define MPU3000_FIFO_AUXZ_EN			0x02	//insert the Z Accelerometer data into FIFO
#define MPU3000_FIFO_FOOTER_EN		0x01	//insert the FIFO data into FIFO

#define MPU3000_AUX_VDDIO_EN			0x04	//enable VDD level for the secondary I2C bus clock and data lines
#define MPU3000_AUX_VDDIO_DIS			0x00	//disable VDD level for the secondary I2C bus clock and data lines
#define MPU3000_AUX_ID_MASK			0x7F	//AUX ID mask
#define MPU3000_AUX_CLKOUT_EN		0x80	//enable reference clock output at CLKOUT pin

#define MPU3000_EXT_SYNC				0x05	//captue the state of external frame sync input pin to insert into LSB of registers
#define MPU3000_SYNC_NONE 			0x00
#define MPU3000_SYNC_TEMP			0x01
#define MPU3000_SYNC_GYROX			0x02
#define MPU3000_SYNC_GYROY			0x03
#define MPU3000_SYNC_GYROZ			0x04
#define MPU3000_SYNC_AUXX			0x05
#define MPU3000_SYNC_AUXY			0x06
#define MPU3000_SYNC_AUXZ			0x07

#define MPU3000_FS_RANGE			0x03	//set the full-scale range of the gyro sensors
#define MPU3000_FS_250 				0x00
#define MPU3000_FS_500				0x01
#define MPU3000_FS_1000				0x02
#define MPU3000_FS_2000				0x03
#define MPU3000_FS_MAX				0x03

#define MPU3000_FS_250_LSB			131		// LSB/(o/s)
#define MPU3000_FS_500_LSB			66
#define MPU3000_FS_1000_LSB			33
#define MPU3000_FS_2000_LSB			16
#define MPU3000_FS_MAX_LSB			131


#define MPU3000_SAM_RATE_MASK		0x07	//set sample rate and low padd filter configuration
#define MPU3000_RATE_8K_LPFB_256HZ 	0x00
#define MPU3000_RATE_1K_LPFB_188HZ	0x01
#define MPU3000_RATE_1K_LPFB_98HZ 	0x02
#define MPU3000_RATE_1K_LPFB_42HZ 	0x03
#define MPU3000_RATE_1K_LPFB_20HZ 	0x04
#define MPU3000_RATE_1K_LPFB_10HZ 	0x05
#define MPU3000_RATE_1K_LPFB_5HZ 	0x06


#define MPU3000_INT_ACTL				0x80	//logic level for INT out pin(low level)
#define MPU3000_INT_OPEN				0x40	//drvier type for INT out pin(open drain)
#define MPU3000_INT_LATCH_EN			0x20	//latch mode(latch until clear INT)
#define MPU3000_INT_CLR_BYRD			0x10	//clear INT by reading any register
#define MPU3000_MPU_RDY_EN			0x04	//enable INT when device is ready
#define MPU3000_DMP_DONE_EN			0x02	//enable INT when DMP is done
#define MPU3000_RAW_RDY_EN			0x01	//enable INT when data is available

#define MPU3000_INTS_MPU_RDY			0x04	//PLL is ready
#define MPU3000_INTS_DMP_DONE		0x02	//digital motion processor(DMP) is done
#define MPU3000_INTS_RAW_RDY			0x01	//raw data or FIFO data is ready

#define MPU3000_FIFO_CNT_H			0x03	//high bits of FIFO data 	number
#define MPU3000_FIFO_CNT_L				0xFF	//low bits of FIFO data number
#define MPU3000_FIFOSIZE				512

#define MPU3000_FIFO_EN				0x40	//enable FIFO operation for sensor data
#define MPU3000_AUX_IF_EN				0x20	//enable AUX interface via I2C
#define MPU3000_AUX_IF_RST			0x08	//reset AUX interface function
#define MPU3000_FIFO_RST				0x02	//reset FIFO function
#define MPU3000_GYRO_RST				0x01	//reset gyro analog and digital functions

#define MPU3000_H_SET					0x80	//reset device and internal registers to default settings
#define MPU3000_SLEEP					0x40	//enable low power sleep mode
#define MPU3000_STBY_XG				0x20	//put gyro Z in standby mode
#define MPU3000_STBY_YG				0x10	//put gyro Z in standby mode
#define MPU3000_STBY_ZG				0x08	//put gyro Z in standby mode

#define MPU3000_CLK_SEL_MASK			0x07	//select device clock device
#define MPU3000_CLK_INTER_OSC		0x00
#define MPU3000_CLK_PLL_GYROX		0x01
#define MPU3000_CLK_PLL_GYROY		0x02
#define MPU3000_CLK_PLL_GYROZ		0x03
#define MPU3000_CLK_PLL_32K			0x04
#define MPU3000_CLK_PLL_19M			0x05
#define MPU3000_CLK_PLL_RESV			0x06
#define MPU3000_CLK_STOP_MASK		0x07

	 
#define MPU3000_SUCCESS				    0
#define MPU3000_ERR_I2C				  -1
#define MPU3000_ERR_STATUS			  -3
#define MPU3000_ERR_SETUP_FAILURE	  -4
#define MPU3000_ERR_GETGSENSORDATA  -5
#define MPU3000_ERR_IDENTIFICATION	  -6
	 

/*
typedef enum  {
    MPU3000_SYNC_NONE = 0x0,
    MPU3000_SYNC_TEMP,
    MPU3000_SYNC_GYROX,
    MPU3000_SYNC_GYROY,
    MPU3000_SYNC_GYROZ,
    MPU3000_SYNC_AUXX,
    MPU3000_SYNC_AUXY,
    MPU3000_SYNC_AUXZ,
} MPU3000_EXT_SYNC_SEL;

typedef enum  {
    MPU3000_FS_250 = 0x0,
    MPU3000_FS_500,
    MPU3000_FS_1000,
    MPU3000_FS_2000,
    MPU3000_FS_MAX = 0x3,
} MPU3000_FS_SEL;

typedef enum  {
    MPU3000_RATE_8K_LPFB_256HZ = 0x0,
    MPU3000_RATE_1K_LPFB_188HZ,
    MPU3000_RATE_1K_LPFB_98HZ,
    MPU3000_RATE_1K_LPFB_42HZ,
    MPU3000_RATE_1K_LPFB_20HZ,
    MPU3000_RATE_1K_LPFB_10HZ,
    MPU3000_RATE_1K_LPFB_5HZ,
} MPU3000_SAMRATE_SEL;
*/

#define MPU3000_BUFSIZE 60

// 1 rad = 180/PI degree, MAX_LSB = 131,
// 180*131/PI = 7506
#define DEGREE_TO_RAD	7506
	 
#endif //MPU3000_H