If you use early BSP version, you can consider to apply for the following changes
diff --git a/drivers/media/video/mxc/capture/ipu_bg_overlay_sdc.c b/drivers/media/video/mxc/capture/ipu_bg_overlay_sdc.c
index 704b7d7..c00baaa 100644
--- a/drivers/media/video/mxc/capture/ipu_bg_overlay_sdc.c
+++ b/drivers/media/video/mxc/capture/ipu_bg_overlay_sdc.c
@@ -117,7 +117,10 @@ static irqreturn_t csi_enc_callback(int irq, void *dev_id)
{
cam_data *cam = (cam_data *) dev_id;
- ipu_select_buffer(cam->ipu, CSI_MEM, IPU_OUTPUT_BUFFER, csi_buffer_num);
+if(irq == 1)
+ ipu_select_buffer(cam->ipu, CSI_MEM1, IPU_OUTPUT_BUFFER, csi_buffer_num);
+if(irq == 0)
+ ipu_select_buffer(cam->ipu, CSI_MEM0, IPU_OUTPUT_BUFFER, csi_buffer_num);
schedule_work(&cam->csi_work_struct);
csi_buffer_num = (csi_buffer_num == 0) ? 1 : 0;
return IRQ_HANDLED;
@@ -231,14 +234,25 @@ static int csi_enc_setup(cam_data *cam)
}
pr_debug("vf_bufs %x %x\n", cam->vf_bufs[0], cam->vf_bufs[1]);
- err = ipu_init_channel(cam->ipu, CSI_MEM, ¶ms);
+if(cam->csi == 1)
+ err = ipu_init_channel(cam->ipu, CSI_MEM1, ¶ms);
+if(cam->csi == 0)
+ err = ipu_init_channel(cam->ipu, CSI_MEM0, ¶ms);
if (err != 0) {
printk(KERN_ERR "ipu_init_channel %d\n", err);
goto out_1;
}
pixel_fmt = IPU_PIX_FMT_UYVY;
- err = ipu_init_channel_buffer(cam->ipu, CSI_MEM, IPU_OUTPUT_BUFFER,
+if(cam->csi == 1)
+ err = ipu_init_channel_buffer(cam->ipu, CSI_MEM1, IPU_OUTPUT_BUFFER,
+ pixel_fmt, cam->crop_current.width,
+ cam->crop_current.height,
+ cam->crop_current.width, IPU_ROTATE_NONE,
+ cam->vf_bufs[0], cam->vf_bufs[1], 0,
+ cam->offset.u_offset, cam->offset.u_offset);
+if(cam->csi == 0)
+ err = ipu_init_channel_buffer(cam->ipu, CSI_MEM0, IPU_OUTPUT_BUFFER,
pixel_fmt, cam->crop_current.width,
cam->crop_current.height,
cam->crop_current.width, IPU_ROTATE_NONE,
@@ -248,7 +262,10 @@ static int csi_enc_setup(cam_data *cam)
printk(KERN_ERR "CSI_MEM output buffer\n");
goto out_1;
}
- err = ipu_enable_channel(cam->ipu, CSI_MEM);
+if(cam->csi == 1)
+ err = ipu_enable_channel(cam->ipu, CSI_MEM1);
+if(cam->csi == 0)
+ err = ipu_enable_channel(cam->ipu, CSI_MEM0);
if (err < 0) {
printk(KERN_ERR "ipu_enable_channel CSI_MEM\n");
goto out_1;
@@ -256,8 +273,15 @@ static int csi_enc_setup(cam_data *cam)
csi_buffer_num = 0;
- ipu_select_buffer(cam->ipu, CSI_MEM, IPU_OUTPUT_BUFFER, 0);
- ipu_select_buffer(cam->ipu, CSI_MEM, IPU_OUTPUT_BUFFER, 1);
+if(cam->csi == 1)
+ ipu_select_buffer(cam->ipu, CSI_MEM1, IPU_OUTPUT_BUFFER, 0);
+if(cam->csi == 1)
+ ipu_select_buffer(cam->ipu, CSI_MEM1, IPU_OUTPUT_BUFFER, 1);
+
+if(cam->csi == 0)
+ ipu_select_buffer(cam->ipu, CSI_MEM0, IPU_OUTPUT_BUFFER, 0);
+if(cam->csi == 0)
+ ipu_select_buffer(cam->ipu, CSI_MEM0, IPU_OUTPUT_BUFFER, 1);
return err;
out_1:
if (cam->vf_bufs_vaddr[0]) {
@@ -288,9 +312,9 @@ static int csi_enc_enabling_tasks(void *private)
{
cam_data *cam = (cam_data *) private;
int err = 0;
-
- ipu_clear_irq(cam->ipu, IPU_IRQ_CSI0_OUT_EOF);
- err = ipu_request_irq(cam->ipu, IPU_IRQ_CSI0_OUT_EOF,
+ ipu_clear_irq(cam->ipu, IPU_IRQ_CSI0_OUT_EOF + cam->csi);
+ err = ipu_request_irq(cam->ipu, IPU_IRQ_CSI0_OUT_EOF + cam->csi,
csi_enc_callback, 0, "Mxc Camera", cam);
if (err != 0) {
printk(KERN_ERR "Error registering CSI0_OUT_EOF irq\n");
@@ -307,7 +331,7 @@ static int csi_enc_enabling_tasks(void *private)
return err;
out1:
- ipu_free_irq(cam->ipu, IPU_IRQ_CSI0_OUT_EOF, cam);
+ ipu_free_irq(cam->ipu, IPU_IRQ_CSI0_OUT_EOF + cam->csi, cam);
return err;
}
@@ -390,9 +414,9 @@ static int bg_overlay_stop(void *private)
if (cam->overlay_active == false)
return 0;
- err = ipu_disable_channel(cam->ipu, CSI_MEM, true);
+ err = ipu_disable_channel(cam->ipu, CSI_MEM1, true);
- ipu_uninit_channel(cam->ipu, CSI_MEM);
+ ipu_uninit_channel(cam->ipu, CSI_MEM1);
csi_buffer_num = 0;
@@ -474,7 +498,7 @@ static int bg_overlay_disable_csi(void *private)
/* free csi eof irq firstly.
* when disable csi, wait for idmac eof.
* it requests eof irq again */
- ipu_free_irq(cam->ipu, IPU_IRQ_CSI0_OUT_EOF, cam);
+ ipu_free_irq(cam->ipu, IPU_IRQ_CSI0_OUT_EOF + cam->csi, cam);
return ipu_disable_csi(cam->ipu, cam->csi);
}