blob: 4853230eebd3d064f483daf249de31cf6f0d5446 [file] [log] [blame]
Flemmard0604a8e2013-05-23 16:15:48 -07001/*
2 $License:
3 Copyright (C) 2010 InvenSense Corporation, All Rights Reserved.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 $
18 */
19
20#ifndef __MPU_H_
21#define __MPU_H_
22
23#ifdef __KERNEL__
24#include <linux/types.h>
25#endif
26
27#ifdef M_HW
28#include "mpu6000.h"
29#else
30#include "mpu3050.h"
31#endif
32
33#define GYRO_NUM_AXES (3)
34#define ACCEL_NUM_AXES (3)
35#define COMPASS_NUM_AXES (3)
36
37#define MPU_SET_MPU_CONFIG (0x00)
38#define MPU_SET_INT_CONFIG (0x01)
39#define MPU_SET_EXT_SYNC (0x02)
40#define MPU_SET_FULL_SCALE (0x03)
41#define MPU_SET_LPF (0x04)
42#define MPU_SET_CLK_SRC (0x05)
43#define MPU_SET_DIVIDER (0x06)
44#define MPU_SET_LEVEL_SHIFTER (0x07)
45#define MPU_SET_DMP_ENABLE (0x08)
46#define MPU_SET_FIFO_ENABLE (0x09)
47#define MPU_SET_DMP_CFG1 (0x0a)
48#define MPU_SET_DMP_CFG2 (0x0b)
49#define MPU_SET_OFFSET_TC (0x0c)
50#define MPU_SET_RAM (0x0d)
51
52#define MPU_SET_PLATFORM_DATA (0x0e)
53
54#define MPU_GET_MPU_CONFIG (0x80)
55#define MPU_GET_INT_CONFIG (0x81)
56#define MPU_GET_EXT_SYNC (0x82)
57#define MPU_GET_FULL_SCALE (0x83)
58#define MPU_GET_LPF (0x84)
59#define MPU_GET_CLK_SRC (0x85)
60#define MPU_GET_DIVIDER (0x86)
61#define MPU_GET_LEVEL_SHIFTER (0x87)
62#define MPU_GET_DMP_ENABLE (0x88)
63#define MPU_GET_FIFO_ENABLE (0x89)
64#define MPU_GET_DMP_CFG1 (0x8a)
65#define MPU_GET_DMP_CFG2 (0x8b)
66#define MPU_GET_OFFSET_TC (0x8c)
67#define MPU_GET_RAM (0x8d)
68
69#define MPU_READ_REGISTER (0x40)
70#define MPU_WRITE_REGISTER (0x41)
71#define MPU_READ_MEMORY (0x42)
72#define MPU_WRITE_MEMORY (0x43)
73
74#define MPU_SUSPEND (0x44)
75#define MPU_RESUME (0x45)
76#define MPU_READ_COMPASS (0x46)
77#define MPU_READ_ACCEL (0x47)
78#define MPU_READ_PRESSURE (0x48)
79
80#define MPU_CONFIG_ACCEL (0x20)
81#define MPU_CONFIG_COMPASS (0x21)
82#define MPU_CONFIG_PRESSURE (0x22)
83
84#define MPU_GET_CONFIG_ACCEL (0x28)
85#define MPU_GET_CONFIG_COMPASS (0x29)
86#define MPU_GET_CONFIG_PRESSURE (0x2a)
87
88#define HTC_READ_CAL_DATA
89#ifdef HTC_READ_CAL_DATA
90#define MPU_READ_CAL_DATA (0xef)
91extern unsigned char gyro_gsensor_kvalue[37];
92#endif
93
94struct mpu_read_write {
95 unsigned short address;
96 unsigned short length;
97 unsigned char *data;
98};
99
100struct mpuirq_data {
101 int interruptcount;
102 unsigned long long irqtime;
103 int data_type;
104 int data_size;
105 void *data;
106};
107enum ext_slave_config_key {
108 MPU_SLAVE_CONFIG_ODR_SUSPEND,
109 MPU_SLAVE_CONFIG_ODR_RESUME,
110 MPU_SLAVE_CONFIG_FSR_SUSPEND,
111 MPU_SLAVE_CONFIG_FSR_RESUME,
112 MPU_SLAVE_CONFIG_MOT_THS,
113 MPU_SLAVE_CONFIG_NMOT_THS,
114 MPU_SLAVE_CONFIG_MOT_DUR,
115 MPU_SLAVE_CONFIG_NMOT_DUR,
116 MPU_SLAVE_CONFIG_IRQ_SUSPEND,
117 MPU_SLAVE_CONFIG_IRQ_RESUME,
118 MPU_SLAVE_WRITE_REGISTERS,
119 MPU_SLAVE_READ_REGISTERS,
120 MPU_SLAVE_CONFIG_NUM_CONFIG_KEYS,
121};
122
123enum ext_slave_config_irq_type {
124 MPU_SLAVE_IRQ_TYPE_NONE,
125 MPU_SLAVE_IRQ_TYPE_MOTION,
126 MPU_SLAVE_IRQ_TYPE_DATA_READY,
127};
128
129struct ext_slave_config {
130 int key;
131 int len;
132 int apply;
133 void *data;
134};
135
136enum ext_slave_type {
137 EXT_SLAVE_TYPE_GYROSCOPE,
138 EXT_SLAVE_TYPE_ACCELEROMETER,
139 EXT_SLAVE_TYPE_COMPASS,
140 EXT_SLAVE_TYPE_PRESSURE,
141
142};
143
144enum ext_slave_id {
145 ID_INVALID = 0,
146
147 ACCEL_ID_LIS331,
148 ACCEL_ID_LSM303,
149 ACCEL_ID_KXSD9,
150 ACCEL_ID_KXTF9,
151 ACCEL_ID_BMA150,
152 ACCEL_ID_BMA222,
153 ACCEL_ID_ADI346,
154 ACCEL_ID_MMA8450,
155 ACCEL_ID_MMA845X,
156 ACCEL_ID_MPU6000,
157 ACCEL_ID_LIS3DH,
158
159 COMPASS_ID_AKM,
160 COMPASS_ID_AKM8963,
161 COMPASS_ID_AMI30X,
162 COMPASS_ID_YAS529,
163 COMPASS_ID_HMC5883,
164 COMPASS_ID_LSM303,
165 COMPASS_ID_MMC314X,
166 COMPASS_ID_HSCDTD002B,
167 COMPASS_ID_HSCDTD004A,
168
169 PRESSURE_ID_BMA085,
170 ACCEL_ID_BMA250,
171};
172
173enum ext_slave_endian {
174 EXT_SLAVE_BIG_ENDIAN,
175 EXT_SLAVE_LITTLE_ENDIAN,
176 EXT_SLAVE_FS8_BIG_ENDIAN,
177 EXT_SLAVE_FS16_BIG_ENDIAN,
178};
179
180enum ext_slave_bus {
181 EXT_SLAVE_BUS_INVALID = -1,
182 EXT_SLAVE_BUS_PRIMARY = 0,
183 EXT_SLAVE_BUS_SECONDARY = 1
184};
185
186
187struct ext_slave_platform_data {
188 struct ext_slave_descr *(*get_slave_descr) (void);
189 int irq;
190 int adapt_num;
191 int bus;
192 unsigned char address;
193 signed char orientation[9];
194 void *irq_data;
195 void *private_data;
196};
197
198
199struct tFixPntRange {
200 long mantissa;
201 long fraction;
202};
203
204struct ext_slave_descr {
205 int (*init) (void *mlsl_handle,
206 struct ext_slave_descr *slave,
Flemmard8923f4a2014-01-07 12:43:27 -0800207#ifdef CONFIG_CIR_ALWAYS_READY
208 struct ext_slave_platform_data *pdata,
209 int (*power_LPM)(int on)
210 );
211#else
Flemmard0604a8e2013-05-23 16:15:48 -0700212 struct ext_slave_platform_data *pdata);
Flemmard8923f4a2014-01-07 12:43:27 -0800213#endif
214
Flemmard0604a8e2013-05-23 16:15:48 -0700215 int (*exit) (void *mlsl_handle,
216 struct ext_slave_descr *slave,
217 struct ext_slave_platform_data *pdata);
218 int (*suspend) (void *mlsl_handle,
219 struct ext_slave_descr *slave,
220 struct ext_slave_platform_data *pdata);
221 int (*resume) (void *mlsl_handle,
222 struct ext_slave_descr *slave,
223 struct ext_slave_platform_data *pdata);
224 int (*read) (void *mlsl_handle,
225 struct ext_slave_descr *slave,
226 struct ext_slave_platform_data *pdata,
227 unsigned char *data);
228 int (*config) (void *mlsl_handle,
229 struct ext_slave_descr *slave,
230 struct ext_slave_platform_data *pdata,
231 struct ext_slave_config *config);
232 int (*get_config) (void *mlsl_handle,
233 struct ext_slave_descr *slave,
234 struct ext_slave_platform_data *pdata,
235 struct ext_slave_config *config);
236
237 char *name;
238 unsigned char type;
239 unsigned char id;
240 unsigned char reg;
241 unsigned int len;
242 unsigned char endian;
243 struct tFixPntRange range;
244};
245
246struct mpu3050_platform_data {
247 unsigned char int_config;
248 signed char orientation[MPU_NUM_AXES * MPU_NUM_AXES];
249 unsigned char level_shifter;
250 struct ext_slave_platform_data accel;
251 struct ext_slave_platform_data compass;
252 struct ext_slave_platform_data pressure;
253 int (*g_sensors_reset)(void);
254 int (*power_LPM)(int on);
255};
256
257
258#define get_accel_slave_descr NULL
259
260#ifdef CONFIG_MPU_SENSORS_ADXL346
261struct ext_slave_descr *adxl346_get_slave_descr(void);
262#undef get_accel_slave_descr
263#define get_accel_slave_descr adxl346_get_slave_descr
264#endif
265
266#ifdef CONFIG_MPU_SENSORS_BMA150
267struct ext_slave_descr *bma150_get_slave_descr(void);
268#undef get_accel_slave_descr
269#define get_accel_slave_descr bma150_get_slave_descr
270#endif
271
272#ifdef CONFIG_MPU_SENSORS_BMA250
273struct ext_slave_descr *bma250_get_slave_descr(void);
274#undef get_accel_slave_descr
275#define get_accel_slave_descr bma250_get_slave_descr
276#endif
277
278#ifdef CONFIG_MPU_SENSORS_BMA222
279struct ext_slave_descr *bma222_get_slave_descr(void);
280#undef get_accel_slave_descr
281#define get_accel_slave_descr bma222_get_slave_descr
282#endif
283
284#ifdef CONFIG_MPU_SENSORS_KXSD9
285struct ext_slave_descr *kxsd9_get_slave_descr(void);
286#undef get_accel_slave_descr
287#define get_accel_slave_descr kxsd9_get_slave_descr
288#endif
289
290#ifdef CONFIG_MPU_SENSORS_KXTF9
291struct ext_slave_descr *kxtf9_get_slave_descr(void);
292#undef get_accel_slave_descr
293#define get_accel_slave_descr kxtf9_get_slave_descr
294#endif
295
296#ifdef CONFIG_MPU_SENSORS_LIS331DLH
297struct ext_slave_descr *lis331dlh_get_slave_descr(void);
298#undef get_accel_slave_descr
299#define get_accel_slave_descr lis331dlh_get_slave_descr
300#endif
301
302
303#ifdef CONFIG_MPU_SENSORS_LIS3DH
304struct ext_slave_descr *lis3dh_get_slave_descr(void);
305#undef get_accel_slave_descr
306#define get_accel_slave_descr lis3dh_get_slave_descr
307#endif
308
309#ifdef CONFIG_MPU_SENSORS_LSM303DLHA
310struct ext_slave_descr *lsm303dlha_get_slave_descr(void);
311#undef get_accel_slave_descr
312#define get_accel_slave_descr lsm303dlha_get_slave_descr
313#endif
314
315#if defined(CONFIG_MPU_SENSORS_MPU6000) || \
316 defined(CONFIG_MPU_SENSORS_MPU6000_MODULE)
317struct ext_slave_descr *mantis_get_slave_descr(void);
318#undef get_accel_slave_descr
319#define get_accel_slave_descr mantis_get_slave_descr
320#endif
321
322#ifdef CONFIG_MPU_SENSORS_MMA8450
323struct ext_slave_descr *mma8450_get_slave_descr(void);
324#undef get_accel_slave_descr
325#define get_accel_slave_descr mma8450_get_slave_descr
326#endif
327
328#ifdef CONFIG_MPU_SENSORS_MMA845X
329struct ext_slave_descr *mma845x_get_slave_descr(void);
330#undef get_accel_slave_descr
331#define get_accel_slave_descr mma845x_get_slave_descr
332#endif
333
334
335#define get_compass_slave_descr NULL
336
337#ifdef CONFIG_MPU_SENSORS_AK8975
338struct ext_slave_descr *ak8975_get_slave_descr(void);
339#undef get_compass_slave_descr
340#define get_compass_slave_descr ak8975_get_slave_descr
341#endif
342
343#ifdef CONFIG_MPU_SENSORS_AK8963
344struct ext_slave_descr *ak8963_get_slave_descr(void);
345#undef get_compass_slave_descr
346#define get_compass_slave_descr ak8963_get_slave_descr
347#endif
348
349#ifdef CONFIG_MPU_SENSORS_AMI30X
350struct ext_slave_descr *ami30x_get_slave_descr(void);
351#undef get_compass_slave_descr
352#define get_compass_slave_descr ami30x_get_slave_descr
353#endif
354
355#ifdef CONFIG_MPU_SENSORS_HMC5883
356struct ext_slave_descr *hmc5883_get_slave_descr(void);
357#undef get_compass_slave_descr
358#define get_compass_slave_descr hmc5883_get_slave_descr
359#endif
360
361#ifdef CONFIG_MPU_SENSORS_MMC314X
362struct ext_slave_descr *mmc314x_get_slave_descr(void);
363#undef get_compass_slave_descr
364#define get_compass_slave_descr mmc314x_get_slave_descr
365#endif
366
367#ifdef CONFIG_MPU_SENSORS_LSM303DLHM
368struct ext_slave_descr *lsm303dlhm_get_slave_descr(void);
369#undef get_compass_slave_descr
370#define get_compass_slave_descr lsm303dlhm_get_slave_descr
371#endif
372
373#ifdef CONFIG_MPU_SENSORS_YAS529
374struct ext_slave_descr *yas529_get_slave_descr(void);
375#undef get_compass_slave_descr
376#define get_compass_slave_descr yas529_get_slave_descr
377#endif
378
379#ifdef CONFIG_MPU_SENSORS_HSCDTD002B
380struct ext_slave_descr *hscdtd002b_get_slave_descr(void);
381#undef get_compass_slave_descr
382#define get_compass_slave_descr hscdtd002b_get_slave_descr
383#endif
384
385#ifdef CONFIG_MPU_SENSORS_HSCDTD004A
386struct ext_slave_descr *hscdtd004a_get_slave_descr(void);
387#undef get_compass_slave_descr
388#define get_compass_slave_descr hscdtd004a_get_slave_descr
389#endif
390#define get_pressure_slave_descr NULL
391
392#ifdef CONFIG_MPU_SENSORS_BMA085
393struct ext_slave_descr *bma085_get_slave_descr(void);
394#undef get_pressure_slave_descr
395#define get_pressure_slave_descr bma085_get_slave_descr
396#endif
397
398#endif