aboutsummaryrefslogtreecommitdiff
path: root/include/linux/msp430.h
blob: be17cc10d167d9153ef1a515d041409766d9235f (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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
/*
 * Copyright (C) 2010-2012 Motorola, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * 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 __MSP430_H__
#define __MSP430_H__

/** The following define the IOCTL command values via the ioctl macros */
#define MSP430_IOCTL_BASE		77
#define MSP430_IOCTL_BOOTLOADERMODE	\
		_IOW(MSP430_IOCTL_BASE, 0, unsigned char)
#define MSP430_IOCTL_NORMALMODE	\
		_IOW(MSP430_IOCTL_BASE, 1, unsigned char)
#define MSP430_IOCTL_MASSERASE	\
		_IOW(MSP430_IOCTL_BASE, 2, unsigned char)
#define MSP430_IOCTL_SETSTARTADDR	\
		_IOW(MSP430_IOCTL_BASE, 3, unsigned int)
#define MSP430_IOCTL_TEST_READ	\
		_IOR(MSP430_IOCTL_BASE, 4, unsigned char)
#define MSP430_IOCTL_TEST_WRITE	\
		_IOW(MSP430_IOCTL_BASE, 5, unsigned char)
#define MSP430_IOCTL_TEST_WRITE_READ	\
		_IOWR(MSP430_IOCTL_BASE, 6, unsigned short)
#define MSP430_IOCTL_SET_MAG_DELAY	\
		_IOW(MSP430_IOCTL_BASE, 7, unsigned short)
#define MSP430_IOCTL_TEST_BOOTMODE	\
		_IOW(MSP430_IOCTL_BASE, 8, unsigned char)
#define MSP430_IOCTL_SET_ACC_DELAY	\
		_IOW(MSP430_IOCTL_BASE, 9,  unsigned short)
#define MSP430_IOCTL_SET_MOTION_DELAY	\
		_IOW(MSP430_IOCTL_BASE, 10, unsigned char)
#define MSP430_IOCTL_SET_GYRO_DELAY	\
		_IOW(MSP430_IOCTL_BASE, 11, unsigned short)
#define MSP430_IOCTL_SET_DEBUG	\
		_IOW(MSP430_IOCTL_BASE, 12, unsigned char)
#define MSP430_IOCTL_SET_USER_PROFILE	\
		_IOW(MSP430_IOCTL_BASE, 13, int)
#define MSP430_IOCTL_SET_GPS_DATA	\
		_IOW(MSP430_IOCTL_BASE, 14, int)
#define MSP430_IOCTL_SET_PRES_DELAY	\
		_IOW(MSP430_IOCTL_BASE, 15, unsigned short)
#define MSP430_IOCTL_SET_REF_ALTITUDE	\
		_IOW(MSP430_IOCTL_BASE, 16, int)
#define MSP430_IOCTL_SET_ACTIVE_MODE	\
		_IOW(MSP430_IOCTL_BASE, 17, unsigned char)
#define MSP430_IOCTL_SET_PASSIVE_MODE	\
		_IOW(MSP430_IOCTL_BASE, 18, unsigned char)
#define MSP430_IOCTL_SET_FACTORY_MODE	\
		_IOW(MSP430_IOCTL_BASE, 19, unsigned char)
#define MSP430_IOCTL_GET_SENSORS	\
		_IOR(MSP430_IOCTL_BASE, 20, unsigned char)
#define MSP430_IOCTL_SET_SENSORS	\
		_IOW(MSP430_IOCTL_BASE, 21, unsigned char)
#define MSP430_IOCTL_GET_VERSION	\
		_IOR(MSP430_IOCTL_BASE, 22, unsigned char)
#define MSP430_IOCTL_SET_MONITOR_DELAY	\
		_IOW(MSP430_IOCTL_BASE, 23, unsigned char)
#define MSP430_IOCTL_GET_DOCK_STATUS	\
		_IOR(MSP430_IOCTL_BASE, 24, unsigned char)
#define MSP430_IOCTL_SET_ORIENTATION_DELAY	\
		_IOW(MSP430_IOCTL_BASE, 25, unsigned char)
#define MSP430_IOCTL_SET_EQUIPMENT_TYPE	\
		_IOW(MSP430_IOCTL_BASE, 26, unsigned char)
#define MSP430_IOCTL_SET_POWER_MODE	\
		_IOW(MSP430_IOCTL_BASE, 27, unsigned char)
#define MSP430_IOCTL_GET_ALGOS	\
		_IOR(MSP430_IOCTL_BASE, 28, char*)
#define MSP430_IOCTL_SET_ALGOS	\
		_IOW(MSP430_IOCTL_BASE, 29, char*)
#define MSP430_IOCTL_GET_MAG_CAL \
		_IOR(MSP430_IOCTL_BASE, 30, unsigned char*)
#define MSP430_IOCTL_SET_MAG_CAL \
		_IOW(MSP430_IOCTL_BASE, 31, unsigned char*)
/* 32 unused */
#define MSP430_IOCTL_SET_MOTION_DUR	\
		_IOW(MSP430_IOCTL_BASE, 33, unsigned int)
/* 34 unused */
#define MSP430_IOCTL_SET_ZRMOTION_DUR	\
		_IOW(MSP430_IOCTL_BASE, 35, unsigned int)
#define MSP430_IOCTL_GET_WAKESENSORS	\
		_IOR(MSP430_IOCTL_BASE, 36, unsigned char)
#define MSP430_IOCTL_SET_WAKESENSORS	\
		_IOW(MSP430_IOCTL_BASE, 37, unsigned char)
#define MSP430_IOCTL_GET_VERNAME	\
		_IOW(MSP430_IOCTL_BASE, 38, char*)
#define MSP430_IOCTL_SET_POSIX_TIME	\
		_IOW(MSP430_IOCTL_BASE, 39, unsigned long)
#define MSP430_IOCTL_SET_CONTROL_REG	\
		_IOW(MSP430_IOCTL_BASE, 40, char*)
#define MSP430_IOCTL_GET_STATUS_REG	\
		_IOR(MSP430_IOCTL_BASE, 41, char*)
#define MSP430_IOCTL_GET_TOUCH_REG	\
		_IOR(MSP430_IOCTL_BASE, 42, char*)
#define MSP430_IOCTL_SET_ALGO_REQ \
		_IOR(MSP430_IOCTL_BASE, 43, char*)
#define MSP430_IOCTL_GET_ALGO_EVT \
		_IOR(MSP430_IOCTL_BASE, 44, char*)

#define FW_VERSION_SIZE 12
#define MSP_CONTROL_REG_SIZE 200
#define MSP_STATUS_REG_SIZE 8
#define MSP_TOUCH_REG_SIZE  8
#define MSP_MAG_CAL_SIZE 26

#ifdef __KERNEL__
#define LIGHTING_TABLE_SIZE 32

struct msp430_platform_data {
	int (*init)(void);
	void (*exit)(void);
	int (*power_on)(void);
	int (*power_off)(void);
	int gpio_reset;
	int gpio_bslen;
	int gpio_wakeirq;
	int gpio_int;
	int gpio_mipi_req;
	int gpio_mipi_busy;
	unsigned int bslen_pin_active_value;
	u16 lux_table[LIGHTING_TABLE_SIZE];
	u8 brightness_table[LIGHTING_TABLE_SIZE];
	char fw_version[FW_VERSION_SIZE];
	int ct406_detect_threshold;
	int ct406_undetect_threshold;
	int ct406_recalibrate_threshold;
	int ct406_pulse_count;
};
#endif /* __KERNEL__ */

/* Mask values */

/* Non wakable sensors */
#define M_ACCEL			0x0001
#define M_GYRO			0x0002
#define M_PRESSURE		0x0004
#define M_ECOMPASS		0x0008
#define M_TEMPERATURE		0x0010
#define M_ALS			0x0020

#define M_LIN_ACCEL		0x0100
#define M_QUATERNION		0x0200
#define M_GRAVITY		0x0400
#define M_DISP_ROTATE		0x0800
#define M_DISP_BRIGHTNESS	0x1000

/* wake sensor status */
#define M_DOCK			0x0001
#define M_PROXIMITY		0x0002
#define M_TOUCH			0x0004
#define M_HUB_RESET		0x0080

#define M_FLATUP		0x0100
#define M_FLATDOWN		0x0200
#define M_STOWED		0x0400
#define M_CAMERA_ACT	0x0800
#define M_LOG_MSG		0x8000

/* algo config mask */
#define M_MMOVEME               0x0001
#define M_NOMMOVE               0x0002
#define M_ALGO_MODALITY         0x0008
#define M_ALGO_ORIENTATION      0x0010
#define M_ALGO_STOWED           0x0020
#define M_ALGO_ACCUM_MODALITY   0x0040
#define M_ALGO_ACCUM_MVMT       0x0080

/* algo index */
#define MSP_IDX_MODALITY        0
#define MSP_IDX_ORIENTATION     1
#define MSP_IDX_STOWED          2
#define MSP_IDX_ACCUM_MODALITY  3
#define MSP_IDX_ACCUM_MVMT      4

#define MSP_NUM_ALGOS           5

#define MSP_EVT_SZ_TRANSITION   7
#define MSP_EVT_SZ_ACCUM_STATE  2
#define MSP_EVT_SZ_ACCUM_MVMT   4

struct msp430_android_sensor_data {
	int64_t timestamp;
	signed short data1;
	signed short data2;
	signed short data3;
	unsigned char type;
	unsigned char status;
};

struct msp430_moto_sensor_data {
	int64_t timestamp;
	signed short data1;
	signed short data2;
	signed short data3;
	signed short data4;
	unsigned char type;
};

enum MSP430_data_types {
	DT_ACCEL,
	DT_GYRO,
	DT_PRESSURE,
	DT_MAG,
	DT_ORIENT,
	DT_TEMP,
	DT_ALS,
	DT_LIN_ACCEL,
	DT_QUATERNION,
	DT_GRAVITY,
	DT_DISP_ROTATE,
	DT_DISP_BRIGHT,
	DT_DOCK,
	DT_PROX,
	DT_FLAT_UP,
	DT_FLAT_DOWN,
	DT_STOWED,
	DT_MMMOVE,
	DT_NOMOVE,
	DT_CAMERA_ACT,
	DT_ALGO_EVT,
	DT_ACCUM_MVMT,
	DT_RESET
};

enum {
	NO_DOCK,
	DESK_DOCK,
	CAR_DOCK
};

#endif  /* __MSP430_H__ */