From: ddl Date: Fri, 28 Jan 2011 23:50:57 +0000 (+0800) Subject: camera: fix sensor driver haven't unlock task when sensor init error, and turn on... X-Git-Tag: firefly_0821_release~10787^2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=f1d6966364f28d0791b3d5a342c7fddb10446305;p=firefly-linux-kernel-4.4.55.git camera: fix sensor driver haven't unlock task when sensor init error, and turn on debug message in camera all driver temporarily --- diff --git a/drivers/media/video/ov2655.c b/drivers/media/video/ov2655.c index bda7bd03b735..b422b8808211 100755 --- a/drivers/media/video/ov2655.c +++ b/drivers/media/video/ov2655.c @@ -1456,10 +1456,12 @@ static int sensor_task_lock(struct i2c_client *client, int lock) atomic_add(1, &sensor->tasklock_cnt); } else { - atomic_sub(1, &sensor->tasklock_cnt); + if (atomic_read(&sensor->tasklock_cnt) > 0) { + atomic_sub(1, &sensor->tasklock_cnt); - if (atomic_read(&sensor->tasklock_cnt) == 0) - preempt_enable(); + if (atomic_read(&sensor->tasklock_cnt) == 0) + preempt_enable(); + } } #endif return 0; @@ -1757,6 +1759,7 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val) return 0; sensor_INIT_ERR: + sensor_task_lock(client,0); sensor_deactivate(client); return ret; } diff --git a/drivers/media/video/ov2659.c b/drivers/media/video/ov2659.c index ba34ebd8a661..a69497793750 100755 --- a/drivers/media/video/ov2659.c +++ b/drivers/media/video/ov2659.c @@ -26,10 +26,10 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define dprintk(level, fmt, arg...) do { \ if (debug >= level) \ - printk(KERN_DEBUG fmt , ## arg); } while (0) + printk(KERN_WARNING fmt , ## arg); } while (0) #define SENSOR_TR(format, ...) printk(KERN_ERR format, ## __VA_ARGS__) -#define SENSOR_DG(format, ...) dprintk(1, format, ## __VA_ARGS__) +#define SENSOR_DG(format, ...) dprintk(0, format, ## __VA_ARGS__) #define _CONS(a,b) a##b @@ -1261,10 +1261,12 @@ static int sensor_task_lock(struct i2c_client *client, int lock) atomic_add(1, &sensor->tasklock_cnt); } else { - atomic_sub(1, &sensor->tasklock_cnt); + if (atomic_read(&sensor->tasklock_cnt) > 0) { + atomic_sub(1, &sensor->tasklock_cnt); - if (atomic_read(&sensor->tasklock_cnt) == 0) - preempt_enable(); + if (atomic_read(&sensor->tasklock_cnt) == 0) + preempt_enable(); + } } #endif return 0; @@ -1469,7 +1471,6 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val) ret = -ENODEV; goto sensor_INIT_ERR; } - mdelay(5); //delay 5 microseconds /* check if it is an sensor sensor */ @@ -1563,6 +1564,7 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val) return 0; sensor_INIT_ERR: + sensor_task_lock(client,0); sensor_deactivate(client); return ret; } diff --git a/drivers/media/video/ov5640.c b/drivers/media/video/ov5640.c index 0e83cf2540f5..8f50b98b9f2b 100755 --- a/drivers/media/video/ov5640.c +++ b/drivers/media/video/ov5640.c @@ -27,10 +27,10 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define dprintk(level, fmt, arg...) do { \ if (debug >= level) \ - printk(KERN_DEBUG fmt , ## arg); } while (0) + printk(KERN_WARNING fmt , ## arg); } while (0) #define SENSOR_TR(format, ...) printk(KERN_ERR format, ## __VA_ARGS__) -#define SENSOR_DG(format, ...) dprintk(1, format, ## __VA_ARGS__) +#define SENSOR_DG(format, ...) dprintk(0, format, ## __VA_ARGS__) #define _CONS(a,b) a##b #define CONS(a,b) _CONS(a,b) @@ -1369,10 +1369,12 @@ static int sensor_task_lock(struct i2c_client *client, int lock) atomic_add(1, &sensor->tasklock_cnt); } else { - atomic_sub(1, &sensor->tasklock_cnt); + if (atomic_read(&sensor->tasklock_cnt) > 0) { + atomic_sub(1, &sensor->tasklock_cnt); - if (atomic_read(&sensor->tasklock_cnt) == 0) - preempt_enable(); + if (atomic_read(&sensor->tasklock_cnt) == 0) + preempt_enable(); + } } #endif return 0; @@ -2144,6 +2146,7 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val) return 0; sensor_INIT_ERR: + sensor_task_lock(client,0); sensor_deactivate(client); return ret; } @@ -3283,7 +3286,7 @@ static int sensor_s_stream(struct v4l2_subdev *sd, int enable) mutex_unlock(&sensor->wq_lock); sensor->sensor_wk.client = client; INIT_WORK(&(sensor->sensor_wk.dwork.work), sensor_af_workqueue); - queue_delayed_work(sensor->sensor_wq,&(sensor->sensor_wk.dwork.work), 0); + queue_delayed_work(sensor->sensor_wq,&(sensor->sensor_wk.dwork), 0); } sensor->info_priv.affm_reinit = 0; } diff --git a/drivers/media/video/ov5642.c b/drivers/media/video/ov5642.c index cbef41379c6b..ba3c14443534 100755 --- a/drivers/media/video/ov5642.c +++ b/drivers/media/video/ov5642.c @@ -27,10 +27,10 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define dprintk(level, fmt, arg...) do { \ if (debug >= level) \ - printk(KERN_DEBUG fmt , ## arg); } while (0) + printk(KERN_WARNING fmt , ## arg); } while (0) #define SENSOR_TR(format, ...) printk(KERN_ERR format, ## __VA_ARGS__) -#define SENSOR_DG(format, ...) dprintk(1, format, ## __VA_ARGS__) +#define SENSOR_DG(format, ...) dprintk(0, format, ## __VA_ARGS__) #define _CONS(a,b) a##b #define CONS(a,b) _CONS(a,b) @@ -3348,10 +3348,12 @@ static int sensor_task_lock(struct i2c_client *client, int lock) atomic_add(1, &sensor->tasklock_cnt); } else { - atomic_sub(1, &sensor->tasklock_cnt); + if (atomic_read(&sensor->tasklock_cnt) > 0) { + atomic_sub(1, &sensor->tasklock_cnt); - if (atomic_read(&sensor->tasklock_cnt) == 0) - preempt_enable(); + if (atomic_read(&sensor->tasklock_cnt) == 0) + preempt_enable(); + } } #endif return 0; @@ -3438,8 +3440,12 @@ static int sensor_write_array(struct i2c_client *client, struct reginfo *regarra { int err = 0, cnt; int i = 0; +#if CONFIG_SENSOR_Focus struct sensor *sensor = to_sensor(client); +#endif +#if CONFIG_SENSOR_I2C_RDWRCHK char valchk; +#endif cnt = 0; sensor_task_lock(client, 1); @@ -3487,6 +3493,7 @@ sensor_write_array_end: sensor_task_lock(client,0); return err; } +#if CONFIG_SENSOR_I2C_RDWRCHK static int sensor_readchk_array(struct i2c_client *client, struct reginfo *regarray) { int cnt; @@ -3505,7 +3512,7 @@ static int sensor_readchk_array(struct i2c_client *client, struct reginfo *regar } return 0; } - +#endif #if CONFIG_SENSOR_Focus struct af_cmdinfo { @@ -3799,7 +3806,6 @@ static void sensor_af_workqueue(struct work_struct *work) { struct sensor_work *sensor_work = container_of(work, struct sensor_work, dwork.work); struct i2c_client *client = sensor_work->client; - struct sensor *sensor = to_sensor(client); if (sensor_af_wq_function(client) < 0) { SENSOR_TR("%s af workqueue return false\n",SENSOR_NAME_STRING()); @@ -4118,6 +4124,7 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val) return 0; sensor_INIT_ERR: + sensor_task_lock(client,0); sensor_deactivate(client); return ret; } @@ -5255,7 +5262,7 @@ static int sensor_s_stream(struct v4l2_subdev *sd, int enable) mutex_unlock(&sensor->wq_lock); sensor->sensor_wk.client = client; INIT_WORK(&(sensor->sensor_wk.dwork.work), sensor_af_workqueue); - queue_delayed_work(sensor->sensor_wq,&(sensor->sensor_wk.dwork.work), 0); + queue_delayed_work(sensor->sensor_wq,&(sensor->sensor_wk.dwork), 0); } sensor->info_priv.affm_reinit = 0; } diff --git a/drivers/media/video/rk29_camera_oneframe.c b/drivers/media/video/rk29_camera_oneframe.c index 5ebf45c200ec..f46cd9f3b855 100755 --- a/drivers/media/video/rk29_camera_oneframe.c +++ b/drivers/media/video/rk29_camera_oneframe.c @@ -44,10 +44,10 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define dprintk(level, fmt, arg...) do { \ if (debug >= level) \ - printk(KERN_DEBUG "rk29xx_camera: " fmt , ## arg); } while (0) + printk(KERN_WARNING"rk29xx_camera: " fmt , ## arg); } while (0) #define RK29CAMERA_TR(format, ...) printk(KERN_ERR format, ## __VA_ARGS__) -#define RK29CAMERA_DG(format, ...) dprintk(1, format, ## __VA_ARGS__) +#define RK29CAMERA_DG(format, ...) dprintk(0, format, ## __VA_ARGS__) // VIP Reg Offset #define RK29_VIP_AHBR_CTRL 0x00 @@ -1278,8 +1278,6 @@ static void rk29_camera_reinit_work(struct work_struct *work) { struct device *control; struct v4l2_subdev *sd; - struct i2c_client *client; - struct soc_camera_device *icd; struct v4l2_format cam_f; const struct soc_camera_format_xlate *xlate; int ret;