summaryrefslogtreecommitdiff
path: root/drivers/media/video/mxc/capture/ipu_csi_enc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/mxc/capture/ipu_csi_enc.c')
-rw-r--r--drivers/media/video/mxc/capture/ipu_csi_enc.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/drivers/media/video/mxc/capture/ipu_csi_enc.c b/drivers/media/video/mxc/capture/ipu_csi_enc.c
index 0261a7ecd212..7b43616a8514 100644
--- a/drivers/media/video/mxc/capture/ipu_csi_enc.c
+++ b/drivers/media/video/mxc/capture/ipu_csi_enc.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2009-2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright 2009-2012 Freescale Semiconductor, Inc. All Rights Reserved.
*/
/*
@@ -171,7 +171,7 @@ static int csi_enc_setup(cam_data *cam)
err = ipu_init_channel_buffer(cam->ipu, CSI_MEM, IPU_OUTPUT_BUFFER,
pixel_fmt, cam->v2f.fmt.pix.width,
cam->v2f.fmt.pix.height,
- cam->v2f.fmt.pix.width, IPU_ROTATE_NONE,
+ cam->v2f.fmt.pix.width, cam->rotation,
dummy, dummy, 0,
cam->offset.u_offset,
cam->offset.v_offset);
@@ -235,18 +235,29 @@ static int csi_enc_enabling_tasks(void *private)
int err = 0;
CAMERA_TRACE("IPU:In csi_enc_enabling_tasks\n");
- cam->dummy_frame.vaddress = dma_alloc_coherent(0,
- PAGE_ALIGN(cam->v2f.fmt.pix.sizeimage),
- &cam->dummy_frame.paddress,
- GFP_DMA | GFP_KERNEL);
- if (cam->dummy_frame.vaddress == 0) {
- pr_err("ERROR: v4l2 capture: Allocate dummy frame "
- "failed.\n");
- return -ENOBUFS;
+ if (cam->dummy_frame.vaddress &&
+ cam->dummy_frame.buffer.length
+ < PAGE_ALIGN(cam->v2f.fmt.pix.sizeimage)) {
+ dma_free_coherent(0, cam->dummy_frame.buffer.length,
+ cam->dummy_frame.vaddress,
+ cam->dummy_frame.paddress);
+ cam->dummy_frame.vaddress = 0;
+ }
+
+ if (!cam->dummy_frame.vaddress) {
+ cam->dummy_frame.vaddress = dma_alloc_coherent(0,
+ PAGE_ALIGN(cam->v2f.fmt.pix.sizeimage),
+ &cam->dummy_frame.paddress,
+ GFP_DMA | GFP_KERNEL);
+ if (cam->dummy_frame.vaddress == 0) {
+ pr_err("ERROR: v4l2 capture: Allocate dummy frame "
+ "failed.\n");
+ return -ENOBUFS;
+ }
+ cam->dummy_frame.buffer.length =
+ PAGE_ALIGN(cam->v2f.fmt.pix.sizeimage);
}
cam->dummy_frame.buffer.type = V4L2_BUF_TYPE_PRIVATE;
- cam->dummy_frame.buffer.length =
- PAGE_ALIGN(cam->v2f.fmt.pix.sizeimage);
cam->dummy_frame.buffer.m.offset = cam->dummy_frame.paddress;
ipu_clear_irq(cam->ipu, IPU_IRQ_CSI0_OUT_EOF);
@@ -288,13 +299,6 @@ static int csi_enc_disabling_tasks(void *private)
ipu_uninit_channel(cam->ipu, CSI_MEM);
- if (cam->dummy_frame.vaddress != 0) {
- dma_free_coherent(0, cam->dummy_frame.buffer.length,
- cam->dummy_frame.vaddress,
- cam->dummy_frame.paddress);
- cam->dummy_frame.vaddress = 0;
- }
-
#ifdef CONFIG_MXC_MIPI_CSI2
mipi_csi2_info = mipi_csi2_get_info();