add sensor version info
[firefly-linux-kernel-4.4.55.git] / drivers / input / sensors / sensor-dev.c
index 4eb052a5065d07c5e2ee47fe609ec7501580bd2b..db8438acb6372b5ec1887352800211cb64ae58ee 100755 (executable)
@@ -43,6 +43,9 @@
 #define DBG(x...)\r
 #endif\r
 \r
+#define SENSOR_VERSION_AND_TIME  "sensor-dev.c v1.0 2013-2-18"\r
+\r
+\r
 struct sensor_private_data *g_sensor[SENSOR_NUM_TYPES];\r
 static struct sensor_operate *sensor_ops[SENSOR_NUM_ID]; \r
 static struct class *g_sensor_class[SENSOR_NUM_TYPES];\r
@@ -302,6 +305,8 @@ static int sensor_irq_init(struct i2c_client *client)
                client->irq = irq;\r
                if((sensor->pdata->type == SENSOR_TYPE_GYROSCOPE) || (sensor->pdata->type == SENSOR_TYPE_ACCEL))\r
                disable_irq_nosync(client->irq);//disable irq\r
+               if(((sensor->pdata->type == SENSOR_TYPE_LIGHT) || (sensor->pdata->type == SENSOR_TYPE_PROXIMITY))&& (!(sensor->ops->trig & IRQF_SHARED)))       \r
+               disable_irq_nosync(client->irq);//disable irq\r
                printk("%s:use irq=%d\n",__func__,irq);\r
        }\r
        else if(!sensor->pdata->irq_enable)\r
@@ -777,12 +782,20 @@ static long light_dev_ioctl(struct file *file,
                                        printk("%s:fail to active sensor,ret=%d\n",__func__,result);         \r
                                        goto error;           \r
                                        }       \r
-                                       \r
-                                       if(!sensor->pdata->irq_enable)\r
+                                       if(sensor->pdata->irq_enable)\r
+                                       {\r
+                                               if(!(sensor->ops->trig & IRQF_SHARED))\r
+                                               {\r
+                                                       DBG("%s:enable irq,irq=%d\n",__func__,client->irq);\r
+                                                       enable_irq(client->irq);        //enable irq\r
+                                               }\r
+                                       }       \r
+                                       else\r
                                        {\r
                                                PREPARE_DELAYED_WORK(&sensor->delaywork, sensor_delaywork_func);\r
                                                schedule_delayed_work(&sensor->delaywork, msecs_to_jiffies(sensor->pdata->poll_delay_ms));\r
                                        }\r
+                                       \r
                                        sensor->status_cur = SENSOR_ON;\r
                                }       \r
                        }\r
@@ -795,8 +808,17 @@ static long light_dev_ioctl(struct file *file,
                                        goto error;\r
                                        }\r
                                        \r
-                                       if(!sensor->pdata->irq_enable)\r
-                                       cancel_delayed_work_sync(&sensor->delaywork);           \r
+                                       if(sensor->pdata->irq_enable)\r
+                                       {                               \r
+                                               if(!(sensor->ops->trig & IRQF_SHARED))\r
+                                               {\r
+                                                       DBG("%s:disable irq,irq=%d\n",__func__,client->irq);\r
+                                                       disable_irq_nosync(client->irq);//disable irq\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                       cancel_delayed_work_sync(&sensor->delaywork);   \r
+                                       \r
                                        sensor->status_cur = SENSOR_OFF;\r
                                }\r
                        }\r
@@ -861,11 +883,20 @@ static long proximity_dev_ioctl(struct file *file,
                                        goto error;           \r
                                        }\r
                                        \r
-                                       if(!sensor->pdata->irq_enable)\r
+                                       if(sensor->pdata->irq_enable)\r
+                                       {\r
+                                               if(!(sensor->ops->trig & IRQF_SHARED))\r
+                                               {\r
+                                                       DBG("%s:enable irq,irq=%d\n",__func__,client->irq);\r
+                                                       enable_irq(client->irq);        //enable irq\r
+                                               }\r
+                                       }       \r
+                                       else\r
                                        {\r
                                                PREPARE_DELAYED_WORK(&sensor->delaywork, sensor_delaywork_func);\r
                                                schedule_delayed_work(&sensor->delaywork, msecs_to_jiffies(sensor->pdata->poll_delay_ms));\r
                                        }\r
+                                       \r
                                        sensor->status_cur = SENSOR_ON;\r
                                }       \r
                        }\r
@@ -877,7 +908,15 @@ static long proximity_dev_ioctl(struct file *file,
                                        mutex_unlock(&sensor->operation_mutex);              \r
                                        goto error;\r
                                        }\r
-                                       if(!sensor->pdata->irq_enable)\r
+                                       if(sensor->pdata->irq_enable)\r
+                                       {                               \r
+                                               if(!(sensor->ops->trig & IRQF_SHARED))\r
+                                               {\r
+                                                       DBG("%s:disable irq,irq=%d\n",__func__,client->irq);\r
+                                                       disable_irq_nosync(client->irq);//disable irq\r
+                                               }\r
+                                       }\r
+                                       else\r
                                        cancel_delayed_work_sync(&sensor->delaywork);           \r
                                        sensor->status_cur = SENSOR_OFF;\r
                                }\r
@@ -1364,6 +1403,7 @@ static const struct i2c_device_id sensor_id[] = {
        {"gs_kxtik", ACCEL_ID_KXTIK},\r
        {"gs_lis3dh", ACCEL_ID_LIS3DH},\r
        {"gs_mma7660", ACCEL_ID_MMA7660},\r
+       {"gs_mxc6225", ACCEL_ID_MXC6225},\r
        /*compass*/\r
        {"compass", COMPASS_ID_ALL},\r
        {"ak8975", COMPASS_ID_AK8975},\r
@@ -1377,10 +1417,14 @@ static const struct i2c_device_id sensor_id[] = {
        {"light_cm3217", LIGHT_ID_CM3217},\r
        {"light_al3006", LIGHT_ID_AL3006},\r
        {"ls_stk3171", LIGHT_ID_STK3171},\r
+       {"ls_isl29023", LIGHT_ID_ISL29023},\r
+       {"ls_ap321xx", LIGHT_ID_AP321XX},\r
+        {"ls_photoresistor", LIGHT_ID_PHOTORESISTOR},\r
        /*proximity sensor*/\r
        {"psensor", PROXIMITY_ID_ALL},\r
        {"proximity_al3006", PROXIMITY_ID_AL3006},      \r
        {"ps_stk3171", PROXIMITY_ID_STK3171},\r
+       {"ps_ap321xx", PROXIMITY_ID_AP321XX},\r
        /*temperature*/\r
        {"temperature", TEMPERATURE_ID_ALL},\r
        {},\r
@@ -1404,6 +1448,8 @@ static int __init sensor_init(void)
        pr_info("%s: Probe name %s\n", __func__, sensor_driver.driver.name);\r
        if (res)\r
                pr_err("%s failed\n", __func__);\r
+       \r
+       printk("%s\n", SENSOR_VERSION_AND_TIME);\r
        return res;\r
 }\r
 \r