drivers: power: report battery voltage in AOSP compatible format
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / linux / hwmsensor.h
CommitLineData
6fa3eb70
S
1/* alps
2 *
3 * (C) Copyright 2009
4 * MediaTek <www.MediaTek.com>
5 *
6 * MT6516 Sensor IOCTL & data structure
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23#ifndef __HWMSENSOR_H__
24#define __HWMSENSOR_H__
25
26#include <linux/ioctl.h>
27
28#define SENSOR_TYPE_ACCELEROMETER 1
29#define SENSOR_TYPE_MAGNETIC_FIELD 2
30#define SENSOR_TYPE_ORIENTATION 3
31#define SENSOR_TYPE_GYROSCOPE 4
32#define SENSOR_TYPE_LIGHT 5
33#define SENSOR_TYPE_PRESSURE 6
34#define SENSOR_TYPE_TEMPERATURE 7
35#define SENSOR_TYPE_PROXIMITY 8
36#define SENSOR_TYPE_GRAVITY 9
37#define SENSOR_TYPE_LINEAR_ACCELERATION 10
38#define SENSOR_TYPE_ROTATION_VECTOR 11
39#define SENSOR_TYPE_SIGNIFICANT_MOTION 17
40#define SENSOR_TYPE_STEP_DETECTOR 18
41#define SENSOR_TYPE_STEP_COUNTER 19
42
43#define SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR 20
44
45#define SENSOR_TYPE_HEART_RATE 21
46#define SENSOR_TYPE_TILT_DETECTOR 22
47#define SENSOR_TYPE_WAKE_GESTURE 23
48#define SENSOR_TYPE_GLANCE_GESTURE 24
49#define SENSOR_TYPE_PICK_UP_GESTURE 25
50
51#define SENSOR_TYPE_PEDOMETER 26
52#define SENSOR_TYPE_IN_POCKET 27
53#define SENSOR_TYPE_ACTIVITY 28
54#define SENSOR_TYPE_FACE_DOWN 29
55#define SENSOR_TYPE_SHAKE 30
56
57/*---------------------------------------------------------------------------*/
58#define ID_BASE 0
59#define ID_ORIENTATION (ID_BASE+SENSOR_TYPE_ORIENTATION-1)
60#define ID_MAGNETIC (ID_BASE+SENSOR_TYPE_MAGNETIC_FIELD-1)
61#define ID_ACCELEROMETER (ID_BASE+SENSOR_TYPE_ACCELEROMETER-1)
62#define ID_LINEAR_ACCELERATION (ID_BASE+SENSOR_TYPE_LINEAR_ACCELERATION-1)
63#define ID_ROTATION_VECTOR (ID_BASE+SENSOR_TYPE_ROTATION_VECTOR-1)
64#define ID_GRAVITY (ID_BASE+SENSOR_TYPE_GRAVITY-1)
65#define ID_GYROSCOPE (ID_BASE+SENSOR_TYPE_GYROSCOPE-1)
66#define ID_PROXIMITY (ID_BASE+SENSOR_TYPE_PROXIMITY-1)
67#define ID_LIGHT (ID_BASE+SENSOR_TYPE_LIGHT-1)
68#define ID_PRESSURE (ID_BASE+SENSOR_TYPE_PRESSURE-1)
69#define ID_TEMPRERATURE (ID_BASE+SENSOR_TYPE_TEMPERATURE-1)
70#define ID_SIGNIFICANT_MOTION (ID_BASE+SENSOR_TYPE_SIGNIFICANT_MOTION-1)
71#define ID_STEP_DETECTOR (ID_BASE+SENSOR_TYPE_STEP_DETECTOR-1)
72#define ID_STEP_COUNTER (ID_BASE+SENSOR_TYPE_STEP_COUNTER-1)
73#define ID_GEOMAGNETIC_ROTATION_VECTOR (ID_BASE+SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR-1)
74#define ID_HEART_RATE (ID_BASE+SENSOR_TYPE_HEART_RATE-1)
75#define ID_TILT_DETECTOR (ID_BASE+SENSOR_TYPE_TILT_DETECTOR-1)
76#define ID_WAKE_GESTURE (ID_BASE+SENSOR_TYPE_WAKE_GESTURE-1)
77#define ID_GLANCE_GESTURE (ID_BASE+SENSOR_TYPE_GLANCE_GESTURE-1)
78#define ID_PICK_UP_GESTURE (ID_BASE+SENSOR_TYPE_PICK_UP_GESTURE-1)
79#define ID_PEDOMETER (ID_BASE+SENSOR_TYPE_PEDOMETER-1)
80#define ID_ACTIVITY (ID_BASE+SENSOR_TYPE_ACTIVITY-1)
81#define ID_IN_POCKET (ID_BASE+SENSOR_TYPE_IN_POCKET-1)
82#define ID_FACE_DOWN (ID_BASE+SENSOR_TYPE_FACE_DOWN-1)
83#define ID_SHAKE (ID_BASE+SENSOR_TYPE_SHAKE-1)
84#define ID_SENSOR_MAX_HANDLE (ID_BASE+30)
85#define ID_NONE (ID_BASE+31)
86
87#define ID_OFFSET (1)
88
89//#define MAX_ANDROID_SENSOR_NUM (ID_SENSOR_MAX_HANDLE + 1)
90//alps\kernel-3.10\drivers\misc\mediatek\hwmon\hwmsen\hwmsen_dev.c
91//hwmsen_unlocked_ioctl copy from user only limit 1400 bytes
92#define MAX_ANDROID_SENSOR_NUM (ID_TILT_DETECTOR +1) //not support MTK virtual sensor (all of them are one shot), otherwise fail at copy_form_user, size too large
93
94
95/*---------------------------------------------------------------------------*/
96#define SENSOR_ORIENTATION (1 << ID_ORIENTATION)
97#define SENSOR_MAGNETIC (1 << ID_MAGNETIC)
98#define SENSOR_ACCELEROMETER (1 << ID_ACCELEROMETER)
99#define SENSOR_GYROSCOPE (1 << ID_GYROSCOPE)
100#define SENSOR_PROXIMITY (1 << ID_PROXIMITY)
101#define SENSOR_LIGHT (1 << ID_LIGHT)
102#define SENSOR_PRESSURE (1 << ID_PRESSURE)
103#define SENSOR_TEMPRERATURE (1 << ID_TEMPRERATURE)
104#define SENSOR_GRAVITY (1 << ID_GRAVITY)
105#define SENSOR_LINEAR_ACCELERATION (1 << ID_LINEAR_ACCELERATION)
106#define SENSOR_ROTATION_VECTOR (1 << ID_ROTATION_VECTOR)
107
108#define SENSOR_SIGNIFICANT_MOTION (1 << ID_SIGNIFICANT_MOTION)
109#define SENSOR_STEP_DETECTOR (1 << ID_STEP_DETECTOR)
110#define SENSOR_STEP_COUNTER (1 << ID_STEP_COUNTER)
111#define SENSOR_GEOMAGNETIC_ROTATION_VECTOR (1 << ID_GEOMAGNETIC_ROTATION_VECTOR)
112
113#define SENSOR_HEART_RATE (1 << ID_HEART_RATE)
114#define SENSOR_TILT_DETECTOR (1 << ID_TILT_DETECTOR)
115#define SENSOR_WAKE_GESTURE (1 << ID_WAKE_GESTURE)
116#define SENSOR_GLANCE_GESTURE (1 << ID_GLANCE_GESTURE)
117#define SENSOR_PICK_UP_GESTURE (1 << ID_PICK_UP_GESTURE)
118
119#define SENSOR_PEDOMETER (1 << ID_PEDOMETER)
120#define SENSOR_IN_POCKET (1 << ID_IN_POCKET)
121#define SENSOR_ACTIVITY (1 << ID_ACTIVITY)
122#define SENSOR_FACE_DOWN (1 << ID_FACE_DOWN)
123#define SENSOR_SHAKE (1 << ID_SHAKE)
124
125/*----------------------------------------------------------------------------*/
126#define HWM_INPUTDEV_NAME "hwmdata"
127#define HWM_SENSOR_DEV_NAME "hwmsensor"
128#define HWM_SENSOR_DEV "/dev/hwmsensor"
129#define C_MAX_HWMSEN_EVENT_NUM 4
130/*----------------------------------------------------------------------------*/
131#define ACC_PL_DEV_NAME "m_acc_pl"
132#define ACC_INPUTDEV_NAME "m_acc_input"
133#define ACC_MISC_DEV_NAME "m_acc_misc"
134#define MAG_PL_DEV_NAME "m_mag_pl"
135#define MAG_INPUTDEV_NAME "m_mag_input"
136#define MAG_MISC_DEV_NAME "m_mag_misc"
137#define GYRO_PL_DEV_NAME "m_gyro_pl"
138#define GYRO_INPUTDEV_NAME "m_gyro_input"
139#define GYRO_MISC_DEV_NAME "m_gyro_misc"
140#define ALSPS_PL_DEV_NAME "m_alsps_pl"
141#define ALSPS_INPUTDEV_NAME "m_alsps_input"
142#define ALSPS_MISC_DEV_NAME "m_alsps_misc"
143#define BARO_PL_DEV_NAME "m_baro_pl"
144#define BARO_INPUTDEV_NAME "m_baro_input"
145#define BARO_MISC_DEV_NAME "m_baro_misc"
146
147#define STEP_C_PL_DEV_NAME "m_step_c_pl"
148#define STEP_C_INPUTDEV_NAME "m_step_c_input"
149#define STEP_C_MISC_DEV_NAME "m_step_c_misc"
150
151#define INPK_PL_DEV_NAME "m_inpk_pl"
152#define INPK_INPUTDEV_NAME "m_inpk_input"
153#define INPK_MISC_DEV_NAME "m_inpk_misc"
154
155#define SHK_PL_DEV_NAME "m_shk_pl"
156#define SHK_INPUTDEV_NAME "m_shk_input"
157#define SHK_MISC_DEV_NAME "m_shk_misc"
158
159#define FDN_PL_DEV_NAME "m_fdn_pl"
160#define FDN_INPUTDEV_NAME "m_fdn_input"
161#define FDN_MISC_DEV_NAME "m_fdn_misc"
162
163#define PKUP_PL_DEV_NAME "m_pkup_pl"
164#define PKUP_INPUTDEV_NAME "m_pkup_input"
165#define PKUP_MISC_DEV_NAME "m_pkup_misc"
166
167#define ACT_PL_DEV_NAME "m_act_pl"
168#define ACT_INPUTDEV_NAME "m_act_input"
169#define ACT_MISC_DEV_NAME "m_act_misc"
170
171#define PDR_PL_DEV_NAME "m_pdr_pl"
172#define PDR_INPUTDEV_NAME "m_pdr_input"
173#define PDR_MISC_DEV_NAME "m_pdr_misc"
174
175#define HRM_PL_DEV_NAME "m_hrm_pl"
176#define HRM_INPUTDEV_NAME "m_hrm_input"
177#define HRM_MISC_DEV_NAME "m_hrm_misc"
178
179#define TILT_PL_DEV_NAME "m_tilt_pl"
180#define TILT_INPUTDEV_NAME "m_tilt_input"
181#define TILT_MISC_DEV_NAME "m_tilt_misc"
182
183#define WAG_PL_DEV_NAME "m_wag_pl"
184#define WAG_INPUTDEV_NAME "m_wag_input"
185#define WAG_MISC_DEV_NAME "m_wag_misc"
186
187#define GLG_PL_DEV_NAME "m_glg_pl"
188#define GLG_INPUTDEV_NAME "m_glg_input"
189#define GLG_MISC_DEV_NAME "m_glg_misc"
190
191#define TEMP_PL_DEV_NAME "m_temp_pl"
192#define TEMP_INPUTDEV_NAME "m_temp_input"
193#define TEMP_MISC_DEV_NAME "m_temp_misc"
194
195#define BATCH_PL_DEV_NAME "m_batch_pl"
196#define BATCH_INPUTDEV_NAME "m_batch_input"
197#define BATCH_MISC_DEV_NAME "m_batch_misc"
198
199#define EVENT_TYPE_SENSOR 0x01
200#define EVENT_SENSOR_ACCELERATION SENSOR_ACCELEROMETER
201#define EVENT_SENSOR_MAGNETIC SENSOR_MAGNETIC
202#define EVENT_SENSOR_ORIENTATION SENSOR_ORIENTATION
203#define EVENT_SENSOR_GYROSCOPE SENSOR_GYROSCOPE
204#define EVENT_SENSOR_LIGHT SENSOR_LIGHT
205#define EVENT_SENSOR_PRESSURE SENSOR_PRESSURE
206#define EVENT_SENSOR_TEMPERATURE SENSOR_TEMPRERATURE
207#define EVENT_SENSOR_PROXIMITY SENSOR_PROXIMITY
208#define EVENT_SENSOR_GRAVITY SENSOR_PRESSURE
209#define EVENT_SENSOR_LINEAR_ACCELERATION SENSOR_TEMPRERATURE
210#define EVENT_SENSOR_ROTATION_VECTOR SENSOR_PROXIMITY
211/*-----------------------------------------------------------------------------*/
212
213enum {
214 HWM_MODE_DISABLE = 0,
215 HWM_MODE_ENABLE = 1,
216};
217
218/*------------sensors data----------------------------------------------------*/
219typedef struct {
220 /* sensor identifier */
221 int sensor;
222 /* sensor values */
223 int values[6];
224 /* sensor values divide */
225 uint32_t value_divide;
226 /* sensor accuracy */
227 int8_t status;
228 /* whether updata? */
229 int update;
230 /* time is in nanosecond */
231 int64_t time;
232
233 uint32_t reserved;
234} hwm_sensor_data;
235
236typedef struct {
237 hwm_sensor_data data[MAX_ANDROID_SENSOR_NUM];
238 int date_type;
239} hwm_trans_data;
240
241/*----------------------------------------------------------------------------*/
242#define HWM_IOC_MAGIC 0x91
243
244/* set delay */
245#define HWM_IO_SET_DELAY _IOW(HWM_IOC_MAGIC, 0x01, uint32_t)
246
247/* wake up */
248#define HWM_IO_SET_WAKE _IO(HWM_IOC_MAGIC, 0x02)
249
250/* Enable/Disable sensor */
251#define HWM_IO_ENABLE_SENSOR _IOW(HWM_IOC_MAGIC, 0x03, uint32_t)
252#define HWM_IO_DISABLE_SENSOR _IOW(HWM_IOC_MAGIC, 0x04, uint32_t)
253
254/* Enable/Disable sensor */
255#define HWM_IO_ENABLE_SENSOR_NODATA _IOW(HWM_IOC_MAGIC, 0x05, uint32_t)
256#define HWM_IO_DISABLE_SENSOR_NODATA _IOW(HWM_IOC_MAGIC, 0x06, uint32_t)
257/* Get sensors data */
258#define HWM_IO_GET_SENSORS_DATA _IOWR(HWM_IOC_MAGIC, 0x07, hwm_trans_data)
259
260#endif /* __HWMSENSOR_H__ */