summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorguoyin.chen <guoyin.chen@freescale.com>2013-08-16 10:34:29 +0800
committerguoyin.chen <guoyin.chen@freescale.com>2013-08-16 10:34:29 +0800
commit08967e3cf25b32dae50ca5455cd862ec86b06586 (patch)
tree388b22742fd868f1128931b3ec0c80cd782c0351 /drivers
parent7faf590b972d9ca8d65183fb61a87566abfc7a45 (diff)
parentbdde708ebfde4a8c1d3829578d3f6481a343533a (diff)
Merge remote-tracking branch 'fsl-linux-sdk/imx_3.0.35_4.1.0' into imx_3.0.35_android
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/mxc/capture/csi_v4l2_capture.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/media/video/mxc/capture/csi_v4l2_capture.c b/drivers/media/video/mxc/capture/csi_v4l2_capture.c
index d1273f1e63f5..5810cffdfc1d 100644
--- a/drivers/media/video/mxc/capture/csi_v4l2_capture.c
+++ b/drivers/media/video/mxc/capture/csi_v4l2_capture.c
@@ -484,6 +484,7 @@ static void csi_free_frames(cam_data *cam)
for (i = 0; i < FRAME_NUM; i++)
cam->frame[i].buffer.flags = V4L2_BUF_FLAG_MAPPED;
+ cam->enc_counter = 0;
INIT_LIST_HEAD(&cam->ready_q);
INIT_LIST_HEAD(&cam->working_q);
INIT_LIST_HEAD(&cam->done_q);
@@ -1035,6 +1036,12 @@ static int csi_v4l_dqueue(cam_data *cam, struct v4l2_buffer *buf)
spin_lock_irqsave(&cam->dqueue_int_lock, lock_flags);
+ if (list_empty(&cam->done_q)) {
+ spin_unlock_irqrestore(&cam->dqueue_int_lock, lock_flags);
+ up(&cam->busy_lock);
+ return -EINVAL;
+ }
+
cam->enc_counter--;
frame = list_entry(cam->done_q.next, struct mxc_v4l_frame, queue);
@@ -1075,7 +1082,8 @@ static int csi_v4l_dqueue(cam_data *cam, struct v4l2_buffer *buf)
return retval;
}
pxp_complete_update(cam);
- memcpy(cam->frame[buf->index].vaddress,
+ if (cam->frame[buf->index].vaddress)
+ memcpy(cam->frame[buf->index].vaddress,
cam->frame[req_buf_number].vaddress,
cam->v2f.fmt.pix.sizeimage);
}