video: rockchip: vop: 3366: writeback function test ok

Change-Id: I560a714a86dad83f277d380c3650d4ed7827d80b
Signed-off-by: Huang Jiachai <hjc@rock-chips.com>
This commit is contained in:
Huang Jiachai
2016-03-14 21:01:29 +08:00
committed by Huang, Tao
parent dea00e3236
commit 6a7a5e6ebf
2 changed files with 33 additions and 10 deletions

View File

@@ -4688,51 +4688,72 @@ static int rk3368_lcdc_set_wb(struct rk_lcdc_driver *dev_drv)
struct rk_fb_reg_wb_data *wb_data;
u32 src_w, src_h, dst_w, dst_h, fmt_cfg;
u32 xscale_en = 0, x_scale_fac = 0, y_throw = 0;
u32 csc_mode = 0, rgb2yuv = 0, dither_en = 0;
if (unlikely(!lcdc_dev->clk_on)) {
pr_info("%s,clk_on = %d\n", __func__, lcdc_dev->clk_on);
return 0;
}
wb_data = &dev_drv->wb_data;
src_w = dev_drv->cur_screen->xsize;
src_h = dev_drv->cur_screen->ysize;
dst_w = dev_drv->wb_data.xsize;
dst_h = dev_drv->wb_data.ysize;
if ((wb_data->xsize == 0) || (wb_data->ysize == 0))
return 0;
src_w = dev_drv->cur_screen->mode.xres;
src_h = dev_drv->cur_screen->mode.yres;
dst_w = wb_data->xsize;
dst_h = wb_data->ysize;
if (!IS_ALIGNED(dst_w, RK3366_WB_ALIGN))
pr_info("dst_w: %d not align 16 pixel\n", dst_w);
if (src_w > dst_w)
xscale_en = 1;
else if (src_w < dst_w)
dst_w = src_w;
else
xscale_en = 0;
if (wb_data->state && xscale_en)
x_scale_fac = GET_SCALE_FACTOR_BILI_DN(src_w, dst_w);
if (src_h >= 2 * dst_h)
if ((src_h >= 2 * dst_h) && (dst_h != 0))
y_throw = 1;
else
y_throw = 0;
switch (wb_data->data_format) {
case ARGB888:
case XRGB888:
case XBGR888:
fmt_cfg = 0;
break;
case RGB888:
case BGR888:
fmt_cfg = 1;
break;
case RGB565:
case BGR565:
fmt_cfg = 2;
dither_en = 1;
break;
case YUV420:
fmt_cfg = 8;
fmt_cfg = 4;
if (dev_drv->overlay_mode == VOP_RGB_DOMAIN)
rgb2yuv = 1;
if ((src_w < 1280) && (src_h < 720))
csc_mode = VOP_R2Y_CSC_BT601;
else
csc_mode = VOP_R2Y_CSC_BT709;
break;
default:
fmt_cfg = 0;
pr_info("unsupport fmt: %d\n", wb_data->data_format);
break;
}
spin_lock(&lcdc_dev->reg_lock);
lcdc_msk_reg(lcdc_dev, WB_CTRL0,
m_WB_EN | m_WB_FMT | m_WB_XPSD_BIL_EN |
m_WB_YTHROW_EN,
m_WB_YTHROW_EN | m_WB_RGB2YUV_EN | m_WB_RGB2YUV_MODE |
m_WB_DITHER_EN,
v_WB_EN(wb_data->state) | v_WB_FMT(fmt_cfg) |
v_WB_XPSD_BIL_EN(xscale_en) |
v_WB_YTHROW_EN(y_throw));
v_WB_YTHROW_EN(y_throw) | v_WB_RGB2YUV_EN(rgb2yuv) |
v_WB_RGB2YUV_MODE(csc_mode) | v_WB_DITHER_EN(dither_en));
lcdc_msk_reg(lcdc_dev, WB_CTRL1,
m_WB_WIDTH | m_WB_XPSD_BIL_FACTOR,
v_WB_WIDTH(dst_w) |

View File

@@ -1755,6 +1755,8 @@
#define RK3366_GRF_VOP_IOVOL_SEL(x) (((x) << 0) | (1 << (0 + 16)))
#define RK3368_GRF_VOP_IOVOL_SEL(x) (((x) << 5) | (1 << (5 + 16)))
#define RK3366_WB_ALIGN 16
enum lb_mode {
LB_YUV_3840X5 = 0x0,
LB_YUV_2560X8 = 0x1,