1 /* include/linux/sensor-dev.h - sensor header file
\r
3 * Copyright (C) 2012-2015 ROCKCHIP.
\r
4 * Author: luowei <lw@rock-chips.com>
\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
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
17 #include <linux/miscdevice.h>
\r
18 #ifdef CONFIG_HAS_EARLYSUSPEND
\r
19 #include <linux/earlysuspend.h>
\r
22 #include <dt-bindings/sensor-dev.h>
\r
25 #define SENSOR_OFF 0
\r
26 #define SENSOR_UNKNOW_DATA -1
\r
68 COMPASS_ID_LSM303DLH,
\r
69 COMPASS_ID_LSM303DLM,
\r
71 COMPASS_ID_HSCDTD002B,
\r
72 COMPASS_ID_HSCDTD004A,
\r
87 LIGHT_ID_PHOTORESISTOR,
\r
91 PROXIMITY_ID_AL3006,
\r
92 PROXIMITY_ID_STK3171,
\r
93 PROXIMITY_ID_AP321XX,
\r
95 TEMPERATURE_ID_ALL,
\r
96 TEMPERATURE_ID_MS5607,
\r
100 PRESSURE_ID_MS5607,
\r
109 struct sensor_axis {
\r
115 struct sensor_flag {
\r
119 atomic_t open_flag;
\r
120 atomic_t debug_flag;
\r
122 wait_queue_head_t open_wq;
\r
126 struct sensor_operate {
\r
131 int brightness[2];//backlight min_brightness max_brightness
\r
140 int int_status_reg;
\r
141 int trig; //intterupt trigger
\r
142 int (*active)(struct i2c_client *client, int enable, int rate);
\r
143 int (*init)(struct i2c_client *client);
\r
144 int (*report)(struct i2c_client *client);
\r
145 int (*suspend)(struct i2c_client *client);
\r
146 int (*resume)(struct i2c_client *client);
\r
147 struct miscdevice *misc_dev;
\r
152 /* Platform data for the sensor */
\r
153 struct sensor_private_data {
\r
155 struct i2c_client *client;
\r
156 struct input_dev *input_dev;
\r
157 struct work_struct work;
\r
158 struct delayed_work delaywork; /*report second event*/
\r
159 struct sensor_axis axis;
\r
160 char sensor_data[40]; //max support40 bytes data
\r
161 atomic_t data_ready;
\r
162 wait_queue_head_t data_ready_wq;
\r
163 struct mutex data_mutex;
\r
164 struct mutex operation_mutex;
\r
165 struct mutex sensor_mutex;
\r
166 struct mutex i2c_mutex;
\r
170 struct sensor_flag flags;
\r
171 struct i2c_device_id *i2c_id;
\r
172 struct sensor_platform_data *pdata;
\r
173 struct sensor_operate *ops;
\r
174 struct file_operations fops;
\r
175 struct miscdevice miscdev;
\r
176 #ifdef CONFIG_HAS_EARLYSUSPEND
\r
177 struct early_suspend early_suspend;
\r
181 struct sensor_platform_data {
\r
188 int irq_enable; //if irq_enable=1 then use irq else use polling
\r
189 int poll_delay_ms; //polling
\r
190 int x_min; //filter
\r
195 unsigned char address;
\r
196 unsigned long irq_flags;
\r
197 signed char orientation[9];
\r
198 short m_layout[4][3][3];
\r
199 char* project_name;
\r
202 struct gsensor_platform_data {
\r
206 signed char orientation[9];
\r
207 int (*get_pendown_state)(void);
\r
208 int (*init_platform_hw)(void);
\r
209 int (*gsensor_platform_sleep)(void);
\r
210 int (*gsensor_platform_wakeup)(void);
\r
211 void (*exit_platform_hw)(void);
\r
214 struct akm8975_platform_data {
\r
215 short m_layout[4][3][3];
\r
216 char project_name[64];
\r
220 struct akm_platform_data {
\r
221 short m_layout[4][3][3];
\r
222 char project_name[64];
\r
229 extern int sensor_register_slave(int type,struct i2c_client *client,
\r
230 struct sensor_platform_data *slave_pdata,
\r
231 struct sensor_operate *(*get_sensor_ops)(void));
\r
234 extern int sensor_unregister_slave(int type,struct i2c_client *client,
\r
235 struct sensor_platform_data *slave_pdata,
\r
236 struct sensor_operate *(*get_sensor_ops)(void));
\r
239 #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
244 #define GSENSOR_IOCTL_MAGIC 'a'
\r
245 #define GBUFF_SIZE 12 /* Rx buffer size */
\r
247 /* IOCTLs for MMA8452 library */
\r
248 #define GSENSOR_IOCTL_INIT _IO(GSENSOR_IOCTL_MAGIC, 0x01)
\r
249 #define GSENSOR_IOCTL_RESET _IO(GSENSOR_IOCTL_MAGIC, 0x04)
\r
250 #define GSENSOR_IOCTL_CLOSE _IO(GSENSOR_IOCTL_MAGIC, 0x02)
\r
251 #define GSENSOR_IOCTL_START _IO(GSENSOR_IOCTL_MAGIC, 0x03)
\r
252 #define GSENSOR_IOCTL_GETDATA _IOR(GSENSOR_IOCTL_MAGIC, 0x08, char[GBUFF_SIZE+1])
\r
253 /* IOCTLs for APPs */
\r
254 #define GSENSOR_IOCTL_APP_SET_RATE _IOW(GSENSOR_IOCTL_MAGIC, 0x10, char)
\r
257 #define COMPASS_IOCTL_MAGIC 'c'
\r
258 /* IOCTLs for APPs */
\r
259 #define ECS_IOCTL_APP_SET_MODE _IOW(COMPASS_IOCTL_MAGIC, 0x10, short)
\r
260 #define ECS_IOCTL_APP_SET_MFLAG _IOW(COMPASS_IOCTL_MAGIC, 0x11, short)
\r
261 #define ECS_IOCTL_APP_GET_MFLAG _IOW(COMPASS_IOCTL_MAGIC, 0x12, short)
\r
262 #define ECS_IOCTL_APP_SET_AFLAG _IOW(COMPASS_IOCTL_MAGIC, 0x13, short)
\r
263 #define ECS_IOCTL_APP_GET_AFLAG _IOR(COMPASS_IOCTL_MAGIC, 0x14, short)
\r
264 #define ECS_IOCTL_APP_SET_TFLAG _IOR(COMPASS_IOCTL_MAGIC, 0x15, short)/* NOT use */
\r
265 #define ECS_IOCTL_APP_GET_TFLAG _IOR(COMPASS_IOCTL_MAGIC, 0x16, short)/* NOT use */
\r
266 #define ECS_IOCTL_APP_RESET_PEDOMETER _IOW(COMPASS_IOCTL_MAGIC, 0x17) /* NOT use */
\r
267 #define ECS_IOCTL_APP_SET_DELAY _IOW(COMPASS_IOCTL_MAGIC, 0x18, short)
\r
268 #define ECS_IOCTL_APP_SET_MVFLAG _IOW(COMPASS_IOCTL_MAGIC, 0x19, short)
\r
269 #define ECS_IOCTL_APP_GET_MVFLAG _IOR(COMPASS_IOCTL_MAGIC, 0x1A, short)
\r
270 #define ECS_IOCTL_APP_GET_DELAY _IOR(COMPASS_IOCTL_MAGIC, 0x1B, short)
\r
275 #define LIGHTSENSOR_IOCTL_MAGIC 'l'
\r
276 #define LIGHTSENSOR_IOCTL_GET_ENABLED _IOR(LIGHTSENSOR_IOCTL_MAGIC, 1, int *)
\r
277 #define LIGHTSENSOR_IOCTL_ENABLE _IOW(LIGHTSENSOR_IOCTL_MAGIC, 2, int *)
\r
278 #define LIGHTSENSOR_IOCTL_DISABLE _IOW(LIGHTSENSOR_IOCTL_MAGIC, 3, int *)
\r
280 #define PSENSOR_IOCTL_MAGIC 'p'
\r
281 #define PSENSOR_IOCTL_GET_ENABLED _IOR(PSENSOR_IOCTL_MAGIC, 1, int *)
\r
282 #define PSENSOR_IOCTL_ENABLE _IOW(PSENSOR_IOCTL_MAGIC, 2, int *)
\r
283 #define PSENSOR_IOCTL_DISABLE _IOW(PSENSOR_IOCTL_MAGIC, 3, int *)
\r
286 #define PRESSURE_IOCTL_MAGIC 'r'
\r
287 #define PRESSURE_IOCTL_GET_ENABLED _IOR(PRESSURE_IOCTL_MAGIC, 1, int *)
\r
288 #define PRESSURE_IOCTL_ENABLE _IOW(PRESSURE_IOCTL_MAGIC, 2, int *)
\r
289 #define PRESSURE_IOCTL_DISABLE _IOW(PRESSURE_IOCTL_MAGIC, 3, int *)
\r
290 #define PRESSURE_IOCTL_SET_DELAY _IOW(PRESSURE_IOCTL_MAGIC, 4, int *)
\r
293 #define TEMPERATURE_IOCTL_MAGIC 't'
\r
294 #define TEMPERATURE_IOCTL_GET_ENABLED _IOR(TEMPERATURE_IOCTL_MAGIC, 1, int *)
\r
295 #define TEMPERATURE_IOCTL_ENABLE _IOW(TEMPERATURE_IOCTL_MAGIC, 2, int *)
\r
296 #define TEMPERATURE_IOCTL_DISABLE _IOW(TEMPERATURE_IOCTL_MAGIC, 3, int *)
\r
297 #define TEMPERATURE_IOCTL_SET_DELAY _IOW(TEMPERATURE_IOCTL_MAGIC, 4, int *)
\r
300 extern int sensor_rx_data(struct i2c_client *client, char *rxData, int length);
\r
301 extern int sensor_tx_data(struct i2c_client *client, char *txData, int length);
\r
302 extern int sensor_write_reg(struct i2c_client *client, int addr, int value);
\r
303 extern int sensor_read_reg(struct i2c_client *client, int addr);
\r
304 extern int sensor_tx_data_normal(struct i2c_client *client, char *buf, int num);
\r
305 extern int sensor_rx_data_normal(struct i2c_client *client, char *buf, int num);
\r
306 extern int sensor_write_reg_normal(struct i2c_client *client, char value);
\r
307 extern int sensor_read_reg_normal(struct i2c_client *client);
\r