summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorguoyin.chen <guoyin.chen@freescale.com>2013-04-07 10:50:19 +0800
committerguoyin.chen <guoyin.chen@freescale.com>2013-04-07 10:50:19 +0800
commit7c8718a8d86182a1ea3ad6d89e2ff0201ca2a4a9 (patch)
tree353f54ee75b1ea2449213c936126b72ea11366ce /drivers/media
parent7e09444a91a1d439957a5cbe7a0b659c144ff653 (diff)
parent790715dfbc95afe64521f9d7ef60ef85c4a33849 (diff)
Merge remote-tracking branch 'fsl-linux-sdk/imx_3.0.35_4.0.0' into imx_3.0.35_android
Conflicts: arch/arm/mach-mx6/board-mx6q_hdmidongle.c drivers/input/touchscreen/egalax_ts.c
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/mxc/capture/ipu_fg_overlay_sdc.c42
1 files changed, 24 insertions, 18 deletions
diff --git a/drivers/media/video/mxc/capture/ipu_fg_overlay_sdc.c b/drivers/media/video/mxc/capture/ipu_fg_overlay_sdc.c
index f324f4eac489..6d8d4399d7ad 100644
--- a/drivers/media/video/mxc/capture/ipu_fg_overlay_sdc.c
+++ b/drivers/media/video/mxc/capture/ipu_fg_overlay_sdc.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2012 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved.
*/
/* * The code contained herein is licensed under the GNU General Public
* License. You may obtain a copy of the GNU General Public License
@@ -55,7 +55,7 @@ static void csi_buf_work_func(struct work_struct *work)
task.input.paddr = cam->vf_bufs[1];
task.input.width = cam->crop_current.width;
task.input.height = cam->crop_current.height;
- task.input.format = IPU_PIX_FMT_UYVY;
+ task.input.format = IPU_PIX_FMT_NV12;
if (buffer_num == 0)
task.output.paddr = fbi->fix.smem_start +
@@ -124,7 +124,7 @@ static irqreturn_t csi_enc_callback(int irq, void *dev_id)
ipu_select_buffer(cam->ipu, CSI_MEM, IPU_OUTPUT_BUFFER, csi_buffer_num);
if ((cam->crop_current.width != cam->win.w.width) ||
(cam->crop_current.height != cam->win.w.height) ||
- (vf_out_format != IPU_PIX_FMT_UYVY) ||
+ (vf_out_format != IPU_PIX_FMT_NV12) ||
(cam->rotation >= IPU_ROTATE_VERT_FLIP))
schedule_work(&cam->csi_work_struct);
csi_buffer_num = (csi_buffer_num == 0) ? 1 : 0;
@@ -134,7 +134,6 @@ static irqreturn_t csi_enc_callback(int irq, void *dev_id)
static int csi_enc_setup(cam_data *cam)
{
ipu_channel_params_t params;
- u32 pixel_fmt;
int err = 0, sensor_protocol = 0;
#ifdef CONFIG_MXC_MIPI_CSI2
void *mipi_csi2_info;
@@ -213,7 +212,8 @@ static int csi_enc_setup(cam_data *cam)
cam->vf_bufs_vaddr[1],
(dma_addr_t) cam->vf_bufs[1]);
}
- csi_mem_bufsize = cam->crop_current.width * cam->crop_current.height * 2;
+ csi_mem_bufsize = cam->crop_current.width *
+ cam->crop_current.height * 3/2;
cam->vf_bufs_size[0] = PAGE_ALIGN(csi_mem_bufsize);
cam->vf_bufs_vaddr[0] = (void *)dma_alloc_coherent(0,
cam->vf_bufs_size[0],
@@ -246,13 +246,13 @@ static int csi_enc_setup(cam_data *cam)
goto out_1;
}
- pixel_fmt = IPU_PIX_FMT_UYVY;
if ((cam->crop_current.width == cam->win.w.width) &&
(cam->crop_current.height == cam->win.w.height) &&
- (vf_out_format == IPU_PIX_FMT_UYVY) &&
+ (vf_out_format == IPU_PIX_FMT_NV12) &&
(cam->rotation < IPU_ROTATE_VERT_FLIP)) {
err = ipu_init_channel_buffer(cam->ipu, CSI_MEM, IPU_OUTPUT_BUFFER,
- pixel_fmt, cam->crop_current.width,
+ IPU_PIX_FMT_NV12,
+ cam->crop_current.width,
cam->crop_current.height,
cam->crop_current.width, IPU_ROTATE_NONE,
fbi->fix.smem_start + (fbi->fix.line_length * fbvar.yres),
@@ -260,7 +260,8 @@ static int csi_enc_setup(cam_data *cam)
cam->offset.u_offset, cam->offset.u_offset);
} else {
err = ipu_init_channel_buffer(cam->ipu, CSI_MEM, IPU_OUTPUT_BUFFER,
- pixel_fmt, cam->crop_current.width,
+ IPU_PIX_FMT_NV12,
+ cam->crop_current.width,
cam->crop_current.height,
cam->crop_current.width, IPU_ROTATE_NONE,
cam->vf_bufs[0], cam->vf_bufs[1], 0,
@@ -347,8 +348,8 @@ out1:
static int foreground_start(void *private)
{
cam_data *cam = (cam_data *) private;
- int err = 0, i = 0;
- short *tmp, color;
+ int err = 0, i = 0, screen_size;
+ char *base;
if (!cam) {
printk(KERN_ERR "private is NULL\n");
@@ -383,13 +384,11 @@ static int foreground_start(void *private)
if (OVERLAY_FB_SUPPORT_NONSTD) {
/* Use DP to do CSC so that we can get better performance */
- vf_out_format = IPU_PIX_FMT_UYVY;
+ vf_out_format = IPU_PIX_FMT_NV12;
fbvar.nonstd = vf_out_format;
- color = 0x80;
} else {
vf_out_format = IPU_PIX_FMT_RGB565;
fbvar.nonstd = 0;
- color = 0x0;
}
fbvar.bits_per_pixel = 16;
@@ -405,10 +404,17 @@ static int foreground_start(void *private)
cam->win.w.top);
/* Fill black color for framebuffer */
- tmp = (short *) fbi->screen_base;
- for (i = 0; i < (fbi->fix.line_length * fbi->var.yres)/2;
- i++, tmp++)
- *tmp = color;
+ base = (char *) fbi->screen_base;
+ screen_size = fbi->var.xres * fbi->var.yres;
+ if (OVERLAY_FB_SUPPORT_NONSTD) {
+ memset(base, 0, screen_size);
+ base += screen_size;
+ for (i = 0; i < screen_size / 2; i++, base++)
+ *base = 0x80;
+ } else {
+ for (i = 0; i < screen_size * 2; i++, base++)
+ *base = 0x00;
+ }
console_lock();
fb_blank(fbi, FB_BLANK_UNBLANK);