blob: ff5f666be5120709746fd4c711ca30558d843c56 (
plain)
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
|
/*
* Copyright (C) 2011, Samsung Electronics Co. Ltd. All Rights Reserved.
*
* 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.
*
*/
#ifndef __LSM330DLC_ACCEL_HEADER__
#define __LSM330DLC_ACCEL_HEADER__
#include <linux/types.h>
#include <linux/ioctl.h>
/*lsm330dlc_accel registers */
#define STATUS_AUX 0x07
#define OUT_1_L 0x08
#define OUT_1_H 0x09
#define OUT_2_L 0x0A
#define OUT_2_H 0x0B
#define OUT_3_L 0x0C
#define OUT_3_H 0x0D
#define INT_COUNTER 0x0E
#define WHO_AM_I 0x0F
#define TEMP_CFG_REG 0x1F
#define CTRL_REG1 0x20 /* power control reg */
#define CTRL_REG2 0x21 /* power control reg */
#define CTRL_REG3 0x22 /* power control reg */
#define CTRL_REG4 0x23 /* interrupt control reg */
#define CTRL_REG5 0x24 /* interrupt control reg */
#define CTRL_REG6 0x25
#define REFERENCE 0x26
#define STATUS_REG 0x27
#define OUT_X_L 0x28
#define OUT_X_H 0x29
#define OUT_Y_L 0x2A
#define OUT_Y_H 0x2B
#define OUT_Z_L 0x2C
#define OUT_Z_H 0x2D
#define FIFO_CTRL_REG 0x2E
#define FIFO_SRC_REG 0x2F
#define INT1_CFG 0x30
#define INT1_SRC 0x31
#define INT1_THS 0x32
#define INT1_DURATION 0x33
#define INT2_CFG 0x34
#define INT2_SRC 0x35
#define INT2_THS 0x36
#define INT2_DURATION 0x37
#define CLICK_CFG 0x38
#define CLICK_SRC 0x39
#define CLICK_THS 0x3A
#define TIME_LIMIT 0x3B
#define TIME_LATENCY 0x3C
#define TIME_WINDOW 0x3D
/* CTRL_REG1 */
#define CTRL_REG1_ODR3 (1 << 7)
#define CTRL_REG1_ODR2 (1 << 6)
#define CTRL_REG1_ODR1 (1 << 5)
#define CTRL_REG1_ODR0 (1 << 4)
#define CTRL_REG1_LPEN (1 << 3)
#define CTRL_REG1_Zen (1 << 2)
#define CTRL_REG1_Yen (1 << 1)
#define CTRL_REG1_Xen (1 << 0)
#define PM_OFF 0x00
#define LOW_PWR_MODE 0x4F /* 50HZ */
#define FASTEST_MODE 0x9F /* 1344Hz */
#define ENABLE_ALL_AXES 0x07
#define ODR1 0x10 /* 1Hz output data rate */
#define ODR10 0x20 /* 10Hz output data rate */
#define ODR25 0x30 /* 25Hz output data rate */
#define ODR50 0x40 /* 50Hz output data rate */
#define ODR100 0x50 /* 100Hz output data rate */
#define ODR200 0x60 /* 100Hz output data rate */
#define ODR400 0x70 /* 400Hz output data rate */
#define ODR1344 0x90 /* 1344Hz output data rate */
#define ODR_MASK 0xf0
/* CTRL_REG2 */
#define CTRL_REG2_HPM1 (1 << 7)
#define CTRL_REG2_HPM0 (1 << 6)
#define CTRL_REG2_HPCF2 (1 << 5)
#define CTRL_REG2_HPCF1 (1 << 4)
#define CTRL_REG2_FDS (1 << 3)
#define CTRL_REG2_HPPCLICK (1 << 2)
#define CTRL_REG2_HPIS2 (1 << 1)
#define CTRL_REG2_HPIS1 (1 << 0)
#define HPM_Normal (CTRL_REG2_HPM1)
#define HPM_Filter (CTRL_REG2_HPM0)
/* CTRL_REG3 */
#define I1_CLICK (1 << 7)
#define I1_AOI1 (1 << 6)
#define I1_AOI2 (1 << 5)
#define I1_DRDY1 (1 << 4)
#define I1_DRDY2 (1 << 3)
#define I1_WTM (1 << 2)
#define I1_OVERRUN (1 << 1)
/* CTRL_REG4 */
#define CTRL_REG4_BLE (1 << 6)
#define CTRL_REG4_FS1 (1 << 5)
#define CTRL_REG4_FS0 (1 << 4)
#define CTRL_REG4_HR (1 << 3)
#define CTRL_REG4_ST1 (1 << 2)
#define CTRL_REG4_ST0 (1 << 1)
#define CTRL_REG4_SIM (1 << 0)
#define FS2g 0x00
#define FS4g (CTRL_REG4_FS0)
#define FS8g (CTRL_REG4_FS1)
#define FS16g (CTRL_REG4_FS1|CTRL_REG4_FS0)
/* CTRL_REG5 */
#define BOOT (1 << 7)
#define FIFO_EN (1 << 6)
#define LIR_INT1 (1 << 3)
#define D4D_INT1 (1 << 2)
/* STATUS_REG */
#define ZYXOR (1 << 7)
#define ZOR (1 << 6)
#define YOR (1 << 5)
#define XOR (1 << 4)
#define ZYXDA (1 << 3)
#define ZDA (1 << 2)
#define YDA (1 << 1)
#define XDA (1 << 0)
/* INT1_CFG */
#define INT_CFG_AOI (1 << 7)
#define INT_CFG_6D (1 << 6)
#define INT_CFG_ZHIE (1 << 5)
#define INT_CFG_ZLIE (1 << 4)
#define INT_CFG_YHIE (1 << 3)
#define INT_CFG_YLIE (1 << 2)
#define INT_CFG_XHIE (1 << 1)
#define INT_CFG_XLIE (1 << 0)
/* INT1_SRC */
#define IA (1 << 6)
#define ZH (1 << 5)
#define ZL (1 << 4)
#define YH (1 << 3)
#define YL (1 << 2)
#define XH (1 << 1)
#define XL (1 << 0)
/* Register Auto-increase */
#define AC (1 << 7)
/* dev info */
#define ACC_DEV_NAME "accelerometer"
struct lsm330dlc_acc {
__s16 x;
__s16 y;
__s16 z;
};
/* For movement recognition*/
#define USES_MOVEMENT_RECOGNITION
/* LSM330DLC_ACCEL ioctl command label */
#define LSM330DLC_ACCEL_IOCTL_BASE 'a'
#define LSM330DLC_ACCEL_IOCTL_SET_DELAY \
_IOW(LSM330DLC_ACCEL_IOCTL_BASE, 0, int64_t)
#define LSM330DLC_ACCEL_IOCTL_GET_DELAY \
_IOR(LSM330DLC_ACCEL_IOCTL_BASE, 1, int64_t)
#define LSM330DLC_ACCEL_IOCTL_READ_XYZ\
_IOR(LSM330DLC_ACCEL_IOCTL_BASE, 8, struct lsm330dlc_acc)
#define LSM330DLC_ACCEL_IOCTL_SET_ENABLE \
_IOW(LSM330DLC_ACCEL_IOCTL_BASE, 9, int)
#endif
|