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