camera: fix ov5642 and ov5640 af workqueue status check error
authorddl <ddl@rock-chips.com>
Wed, 21 Mar 2012 11:06:53 +0000 (19:06 +0800)
committerddl <ddl@rock-chips.com>
Sat, 24 Mar 2012 09:55:42 +0000 (17:55 +0800)
drivers/media/video/ov5640.c
drivers/media/video/ov5642.c

index f1cf415c6fe86b01595e508daf50db9d98313453..e71f9e7337d34613c531e0368753b3f54461f872 100755 (executable)
@@ -1997,6 +1997,11 @@ static void sensor_af_workqueue(struct work_struct *work)
     SENSOR_DG("%s %s Enter, cmd:0x%x \n",SENSOR_NAME_STRING(), __FUNCTION__,sensor_work->cmd);
     
     mutex_lock(&sensor->wq_lock);
+    if((sensor_work->cmd != WqCmd_af_init) && (sensor->info_priv.auto_focus != SENSOR_AF_MODE_AUTO))
+        {
+        SENSOR_TR("auto focus status is wrong ,do nothing !");
+        goto set_end;
+        }
     switch (sensor_work->cmd) 
     {
         case WqCmd_af_init:
@@ -2071,7 +2076,7 @@ static void sensor_af_workqueue(struct work_struct *work)
             SENSOR_TR("Unknow command(%d) in %s af workqueue!",sensor_work->cmd,SENSOR_NAME_STRING());
             break;
     } 
-
+set_end:
     if (sensor_work->wait == false) {
         kfree((void*)sensor_work);
     } else {
@@ -3701,10 +3706,10 @@ static int sensor_s_stream(struct v4l2_subdev *sd, int enable)
                }
                #endif
        } else if (enable == 0) {
-               sensor->info_priv.enable = 0;
                #if CONFIG_SENSOR_Focus 
         flush_workqueue(sensor->sensor_wq);
                #endif
+               sensor->info_priv.enable = 0;
        }
        return 0;
 }
index bfb407176b81850738fa064fee645f3877970506..c238e393d2e71760b713df3752dac5e9a2cf4246 100755 (executable)
@@ -3925,6 +3925,11 @@ static void sensor_af_workqueue(struct work_struct *work)
     SENSOR_DG("%s %s Enter, cmd:0x%x \n",SENSOR_NAME_STRING(), __FUNCTION__,sensor_work->cmd);
     
     mutex_lock(&sensor->wq_lock);
+    if((sensor_work->cmd != WqCmd_af_init) && (sensor->info_priv.auto_focus != SENSOR_AF_MODE_AUTO))
+        {
+        SENSOR_TR("auto focus status is wrong ,do nothing !");
+        goto set_end;
+        }
     switch (sensor_work->cmd) 
     {
         case WqCmd_af_init:
@@ -3999,7 +4004,7 @@ static void sensor_af_workqueue(struct work_struct *work)
             SENSOR_TR("Unknow command(%d) in %s af workqueue!",sensor_work->cmd,SENSOR_NAME_STRING());
             break;
     } 
-
+set_end:
     if (sensor_work->wait == false) {
         kfree((void*)sensor_work);
     } else {
@@ -5689,10 +5694,10 @@ static int sensor_s_stream(struct v4l2_subdev *sd, int enable)
                }
                #endif
        } else if (enable == 0) {
-               sensor->info_priv.enable = 0;
                #if CONFIG_SENSOR_Focus 
         flush_workqueue(sensor->sensor_wq);
                #endif
+               sensor->info_priv.enable = 0;
        }
        return 0;
 }