aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/sensor/lsm330dlc_accel.h
blob: b011f84e51af6a7aef9ebb0e0e992ff8cd5835c9 (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