sensor: modify some warnings of sensor_dev.c
[firefly-linux-kernel-4.4.55.git] / include / linux / sensor-dev.h
1 /* include/linux/sensor-dev.h - sensor header file\r
2  *\r
3  * Copyright (C) 2012-2015 ROCKCHIP.\r
4  * Author: luowei <lw@rock-chips.com>\r
5  *\r
6  * This software is licensed under the terms of the GNU General Public\r
7  * License version 2, as published by the Free Software Foundation, and\r
8  * may be copied, distributed, and modified under those terms.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  */\r
16 \r
17 #include <linux/miscdevice.h>\r
18 #ifdef CONFIG_HAS_EARLYSUSPEND\r
19 #include <linux/earlysuspend.h>\r
20 #endif\r
21 \r
22 #include <dt-bindings/sensor-dev.h>\r
23 \r
24 #define SENSOR_ON               1\r
25 #define SENSOR_OFF              0\r
26 #define SENSOR_UNKNOW_DATA      -1\r
27 \r
28 #define GPIO_HIGH 1\r
29 #define GPIO_LOW 0\r
30 \r
31 enum sensor_id {\r
32         ID_INVALID = 0,\r
33 \r
34         ANGLE_ID_ALL,\r
35         ANGLE_ID_KXTIK,\r
36         ANGLE_ID_LIS3DH,\r
37         \r
38         ACCEL_ID_ALL,\r
39         ACCEL_ID_LIS331,\r
40         ACCEL_ID_LSM303DLX,\r
41         ACCEL_ID_LIS3DH,\r
42         ACCEL_ID_KXSD9,\r
43         ACCEL_ID_KXTF9,\r
44         ACCEL_ID_KXTIK,\r
45         ACCEL_ID_KXTJ9,\r
46         ACCEL_ID_BMA150,\r
47         ACCEL_ID_BMA222,\r
48         ACCEL_ID_BMA250,\r
49         ACCEL_ID_ADXL34X,\r
50         ACCEL_ID_MMA8450,\r
51         ACCEL_ID_MMA845X,\r
52         ACCEL_ID_MMA7660,\r
53         ACCEL_ID_MPU6050,\r
54         ACCEL_ID_MXC6225,\r
55         ACCEL_ID_DMARD10,\r
56         ACCEL_ID_LSM303D,\r
57 \r
58         COMPASS_ID_ALL,\r
59         COMPASS_ID_AK8975,\r
60         COMPASS_ID_AK8963,\r
61         COMPASS_ID_AK09911,\r
62         COMPASS_ID_AK8972,\r
63         COMPASS_ID_AMI30X,\r
64         COMPASS_ID_AMI306,\r
65         COMPASS_ID_YAS529,\r
66         COMPASS_ID_YAS530,\r
67         COMPASS_ID_HMC5883,\r
68         COMPASS_ID_LSM303DLH,\r
69         COMPASS_ID_LSM303DLM,\r
70         COMPASS_ID_MMC314X,\r
71         COMPASS_ID_HSCDTD002B,\r
72         COMPASS_ID_HSCDTD004A,\r
73 \r
74         GYRO_ID_ALL,\r
75         GYRO_ID_L3G4200D,\r
76     GYRO_ID_L3G20D,\r
77         GYRO_ID_EWTSA,\r
78         GYRO_ID_K3G,\r
79 \r
80         LIGHT_ID_ALL,\r
81         LIGHT_ID_CM3217,\r
82         LIGHT_ID_CM3218,\r
83         LIGHT_ID_CM3232,\r
84         LIGHT_ID_AL3006,\r
85         LIGHT_ID_STK3171,\r
86         LIGHT_ID_ISL29023,\r
87         LIGHT_ID_AP321XX,\r
88         LIGHT_ID_PHOTORESISTOR, \r
89         LIGHT_ID_US5152,\r
90 \r
91         PROXIMITY_ID_ALL,\r
92         PROXIMITY_ID_AL3006,\r
93         PROXIMITY_ID_STK3171,\r
94         PROXIMITY_ID_AP321XX,\r
95         \r
96         TEMPERATURE_ID_ALL,     \r
97         TEMPERATURE_ID_MS5607,\r
98 \r
99         PRESSURE_ID_ALL,\r
100         PRESSURE_ID_BMA085,\r
101         PRESSURE_ID_MS5607,\r
102 \r
103         HALL_ID_ALL,\r
104         HALL_ID_OCH165T,\r
105         \r
106         SENSOR_NUM_ID,\r
107 };\r
108 \r
109 \r
110 struct sensor_axis {\r
111         int x;\r
112         int y;\r
113         int z;\r
114 };\r
115 \r
116 struct sensor_flag {\r
117         atomic_t a_flag;        \r
118         atomic_t m_flag;        \r
119         atomic_t mv_flag;       \r
120         atomic_t open_flag;\r
121         atomic_t debug_flag;\r
122         long long delay;        \r
123         wait_queue_head_t open_wq;\r
124 };\r
125 \r
126 \r
127 struct sensor_operate {\r
128         char *name;\r
129         int type;\r
130         int     id_i2c;\r
131         int     range[2];\r
132         int     brightness[2];//backlight min_brightness max_brightness \r
133         int read_reg;\r
134         int read_len;\r
135         int id_reg;\r
136         int id_data;\r
137         int precision;\r
138         int ctrl_reg;\r
139         int ctrl_data;\r
140         int int_ctrl_reg;\r
141         int     int_status_reg;\r
142         int trig;       //intterupt trigger\r
143         int (*active)(struct i2c_client *client, int enable, int rate); \r
144         int (*init)(struct i2c_client *client); \r
145         int (*report)(struct i2c_client *client);\r
146         int (*suspend)(struct i2c_client *client);\r
147         int (*resume)(struct i2c_client *client);\r
148         struct miscdevice *misc_dev;\r
149 \r
150 };\r
151 \r
152 \r
153 /* Platform data for the sensor */\r
154 struct sensor_private_data {\r
155         int type;\r
156         struct i2c_client *client;      \r
157         struct input_dev *input_dev;\r
158         struct work_struct work;\r
159         struct delayed_work delaywork;  /*report second event*/\r
160         struct sensor_axis axis;\r
161         char sensor_data[40];           //max support40 bytes data\r
162         atomic_t data_ready;\r
163         wait_queue_head_t data_ready_wq;                \r
164         struct mutex data_mutex;\r
165         struct mutex operation_mutex;   \r
166         struct mutex sensor_mutex;\r
167         struct mutex i2c_mutex;\r
168         int status_cur;\r
169         int start_count;\r
170         int devid;\r
171         struct sensor_flag flags;\r
172         struct i2c_device_id *i2c_id;\r
173         struct sensor_platform_data *pdata;\r
174         struct sensor_operate *ops; \r
175         struct file_operations fops;\r
176         struct miscdevice miscdev;\r
177 #ifdef CONFIG_HAS_EARLYSUSPEND\r
178         struct  early_suspend early_suspend;\r
179 #endif\r
180 };\r
181 \r
182 struct sensor_platform_data {\r
183         int type;\r
184         int irq;\r
185         int irq_pin;\r
186         int power_pin;\r
187         int reset_pin;\r
188         int standby_pin;\r
189         int irq_enable;         //if irq_enable=1 then use irq else use polling  \r
190         int poll_delay_ms;      //polling\r
191         int x_min;              //filter\r
192         int y_min;\r
193         int z_min;\r
194         int factory;\r
195         int layout;\r
196         unsigned char address;\r
197         unsigned long irq_flags;\r
198         signed char orientation[9];\r
199         short m_layout[4][3][3];\r
200         int* project_name;\r
201 };\r
202 \r
203  struct gsensor_platform_data {\r
204          u16 model;\r
205          u16 swap_xy;\r
206          u16 swap_xyz;\r
207          signed char orientation[9];\r
208          int (*get_pendown_state)(void);\r
209          int (*init_platform_hw)(void);\r
210          int (*gsensor_platform_sleep)(void);\r
211          int (*gsensor_platform_wakeup)(void);\r
212          void (*exit_platform_hw)(void);\r
213  };\r
214  \r
215  struct akm8975_platform_data {\r
216          short m_layout[4][3][3];\r
217          char project_name[64];\r
218          int gpio_DRDY;\r
219  };\r
220  \r
221  struct akm_platform_data {\r
222         short m_layout[4][3][3];\r
223         char project_name[64];\r
224         char layout;\r
225         char outbit;\r
226         int gpio_DRDY;\r
227         int gpio_RST;\r
228  };\r
229 \r
230 extern int sensor_register_slave(int type,struct i2c_client *client,\r
231                         struct sensor_platform_data *slave_pdata,\r
232                         struct sensor_operate *(*get_sensor_ops)(void));\r
233 \r
234 \r
235 extern int sensor_unregister_slave(int type,struct i2c_client *client,\r
236                         struct sensor_platform_data *slave_pdata,\r
237                         struct sensor_operate *(*get_sensor_ops)(void));\r
238 \r
239 #if 0\r
240 #define DBG(x...) if((atomic_read(&sensor->flags.debug_flag) == sensor->pdata->type) || (atomic_read(&sensor->flags.debug_flag) == SENSOR_NUM_TYPES))printk(x)\r
241 #else\r
242 #define DBG(x...)\r
243 #endif\r
244 \r
245 #define GSENSOR_IOCTL_MAGIC                     'a'\r
246 #define GBUFF_SIZE                              12      /* Rx buffer size */\r
247 \r
248 /* IOCTLs for MMA8452 library */\r
249 #define GSENSOR_IOCTL_INIT                      _IO(GSENSOR_IOCTL_MAGIC, 0x01)\r
250 #define GSENSOR_IOCTL_RESET                     _IO(GSENSOR_IOCTL_MAGIC, 0x04)\r
251 #define GSENSOR_IOCTL_CLOSE                     _IO(GSENSOR_IOCTL_MAGIC, 0x02)\r
252 #define GSENSOR_IOCTL_START                     _IO(GSENSOR_IOCTL_MAGIC, 0x03)\r
253 #define GSENSOR_IOCTL_GETDATA                   _IOR(GSENSOR_IOCTL_MAGIC, 0x08, char[GBUFF_SIZE+1])\r
254 /* IOCTLs for APPs */\r
255 #define GSENSOR_IOCTL_APP_SET_RATE              _IOW(GSENSOR_IOCTL_MAGIC, 0x10, char)\r
256 \r
257 \r
258 #define COMPASS_IOCTL_MAGIC                   'c'\r
259 /* IOCTLs for APPs */\r
260 #define ECS_IOCTL_APP_SET_MODE          _IOW(COMPASS_IOCTL_MAGIC, 0x10, short)\r
261 #define ECS_IOCTL_APP_SET_MFLAG         _IOW(COMPASS_IOCTL_MAGIC, 0x11, short)\r
262 #define ECS_IOCTL_APP_GET_MFLAG         _IOW(COMPASS_IOCTL_MAGIC, 0x12, short)\r
263 #define ECS_IOCTL_APP_SET_AFLAG         _IOW(COMPASS_IOCTL_MAGIC, 0x13, short)\r
264 #define ECS_IOCTL_APP_GET_AFLAG         _IOR(COMPASS_IOCTL_MAGIC, 0x14, short)\r
265 #define ECS_IOCTL_APP_SET_TFLAG         _IOR(COMPASS_IOCTL_MAGIC, 0x15, short)/* NOT use */\r
266 #define ECS_IOCTL_APP_GET_TFLAG         _IOR(COMPASS_IOCTL_MAGIC, 0x16, short)/* NOT use */\r
267 #define ECS_IOCTL_APP_RESET_PEDOMETER   _IOW(COMPASS_IOCTL_MAGIC, 0x17) /* NOT use */\r
268 #define ECS_IOCTL_APP_SET_DELAY         _IOW(COMPASS_IOCTL_MAGIC, 0x18, short)\r
269 #define ECS_IOCTL_APP_SET_MVFLAG        _IOW(COMPASS_IOCTL_MAGIC, 0x19, short)\r
270 #define ECS_IOCTL_APP_GET_MVFLAG        _IOR(COMPASS_IOCTL_MAGIC, 0x1A, short)\r
271 #define ECS_IOCTL_APP_GET_DELAY         _IOR(COMPASS_IOCTL_MAGIC, 0x1B, short)\r
272 \r
273 \r
274 \r
275 \r
276 #define LIGHTSENSOR_IOCTL_MAGIC 'l'\r
277 #define LIGHTSENSOR_IOCTL_GET_ENABLED           _IOR(LIGHTSENSOR_IOCTL_MAGIC, 1, int *) \r
278 #define LIGHTSENSOR_IOCTL_ENABLE                _IOW(LIGHTSENSOR_IOCTL_MAGIC, 2, int *) \r
279 #define LIGHTSENSOR_IOCTL_DISABLE               _IOW(LIGHTSENSOR_IOCTL_MAGIC, 3, int *)\r
280 \r
281 #define PSENSOR_IOCTL_MAGIC 'p'\r
282 #define PSENSOR_IOCTL_GET_ENABLED               _IOR(PSENSOR_IOCTL_MAGIC, 1, int *)\r
283 #define PSENSOR_IOCTL_ENABLE                    _IOW(PSENSOR_IOCTL_MAGIC, 2, int *)\r
284 #define PSENSOR_IOCTL_DISABLE                   _IOW(PSENSOR_IOCTL_MAGIC, 3, int *)\r
285 \r
286 \r
287 #define PRESSURE_IOCTL_MAGIC 'r'\r
288 #define PRESSURE_IOCTL_GET_ENABLED              _IOR(PRESSURE_IOCTL_MAGIC, 1, int *)\r
289 #define PRESSURE_IOCTL_ENABLE                   _IOW(PRESSURE_IOCTL_MAGIC, 2, int *)\r
290 #define PRESSURE_IOCTL_DISABLE                  _IOW(PRESSURE_IOCTL_MAGIC, 3, int *)\r
291 #define PRESSURE_IOCTL_SET_DELAY                _IOW(PRESSURE_IOCTL_MAGIC, 4, int *)\r
292 \r
293 \r
294 #define TEMPERATURE_IOCTL_MAGIC 't'\r
295 #define TEMPERATURE_IOCTL_GET_ENABLED           _IOR(TEMPERATURE_IOCTL_MAGIC, 1, int *)\r
296 #define TEMPERATURE_IOCTL_ENABLE                _IOW(TEMPERATURE_IOCTL_MAGIC, 2, int *)\r
297 #define TEMPERATURE_IOCTL_DISABLE               _IOW(TEMPERATURE_IOCTL_MAGIC, 3, int *)\r
298 #define TEMPERATURE_IOCTL_SET_DELAY             _IOW(TEMPERATURE_IOCTL_MAGIC, 4, int *)\r
299 \r
300 \r
301 extern int sensor_rx_data(struct i2c_client *client, char *rxData, int length);\r
302 extern int sensor_tx_data(struct i2c_client *client, char *txData, int length);\r
303 extern int sensor_write_reg(struct i2c_client *client, int addr, int value);\r
304 extern int sensor_read_reg(struct i2c_client *client, int addr);\r
305 extern int sensor_tx_data_normal(struct i2c_client *client, char *buf, int num);\r
306 extern int sensor_rx_data_normal(struct i2c_client *client, char *buf, int num);\r
307 extern int sensor_write_reg_normal(struct i2c_client *client, char value);\r
308 extern int sensor_read_reg_normal(struct i2c_client *client);\r
309 \r