From 0c0b7e05c8ef5e6f66f3b8fa034e5c303ed40ef3 Mon Sep 17 00:00:00 2001 From: ddl Date: Wed, 21 Mar 2012 19:06:53 +0800 Subject: [PATCH] camera: fix ov5642 and ov5640 af workqueue status check error --- drivers/media/video/ov5640.c | 9 +++++++-- drivers/media/video/ov5642.c | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/ov5640.c b/drivers/media/video/ov5640.c index f1cf415c6fe8..e71f9e7337d3 100755 --- a/drivers/media/video/ov5640.c +++ b/drivers/media/video/ov5640.c @@ -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; } diff --git a/drivers/media/video/ov5642.c b/drivers/media/video/ov5642.c index bfb407176b81..c238e393d2e7 100755 --- a/drivers/media/video/ov5642.c +++ b/drivers/media/video/ov5642.c @@ -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; } -- 2.34.1