v_WIN0_FORMAT(win->fmt_cfg) |
v_WIN0_RB_SWAP(win->swap_rb);
lcdc_msk_reg(lcdc_dev, SYS_CTRL, mask, val);
-
+ lcdc_msk_reg(lcdc_dev, DSP_CTRL0, m_WIN0_INTERLACE_EN,
+ v_WIN0_INTERLACE_EN(win->interlace_read));
lcdc_writel(lcdc_dev, WIN0_SCL_FACTOR_YRGB,
v_X_SCL_FACTOR(win->scale_yrgb_x) |
v_Y_SCL_FACTOR(win->scale_yrgb_y));
v_WIN1_FORMAT(win->fmt_cfg) |
v_WIN1_RB_SWAP(win->swap_rb);
lcdc_msk_reg(lcdc_dev, SYS_CTRL, mask, val);
-
+ lcdc_msk_reg(lcdc_dev, DSP_CTRL0, m_WIN1_INTERLACE_EN,
+ v_WIN1_INTERLACE_EN(win->interlace_read));
lcdc_writel(lcdc_dev, WIN1_SCL_FACTOR_YRGB,
v_X_SCL_FACTOR(win->scale_yrgb_x) |
v_Y_SCL_FACTOR(win->scale_yrgb_y));
}
win->scale_yrgb_x = calscale(win->area[0].xact, win->post_cfg.xsize);
win->scale_yrgb_y = calscale(win->area[0].yact, win->post_cfg.ysize);
+ win->interlace_read = 0;
+ if((screen->mode.xres == 720) &&
+ ((screen->mode.yres == 576) || (screen->mode.yres == 480))) {
+ if(win->scale_yrgb_y > 2*0x1000)
+ win->interlace_read = 1;
+ }
switch (win->format) {
case ARGB888:
win->fmt_cfg = VOP_FORMAT_ARGB888;
#define m_DITHER_UP_EN (1<<9)
#define m_INTERLACE_DSP_EN (1<<12)
#define m_INTERLACE_DSP_POL (1<<13)
+ #define m_WIN0_INTERLACE_EN (1<<14)
#define m_WIN1_INTERLACE_EN (1<<15)
#define m_WIN0_YRGB_DEFLICK_EN (1<<16)
#define m_WIN0_CBR_DEFLICK_EN (1<<17)
#define v_DITHER_UP_EN(x) (((x)&1)<<9)
#define v_INTERLACE_DSP_EN(x) (((x)&1)<<12)
#define v_INTERLACE_DSP_POL(x) (((x)&1)<<13)
+ #define v_WIN0_INTERLACE_EN(x) (((x)&1)<<14)
#define v_WIN1_INTERLACE_EN(x) (((x)&1)<<15)
#define v_WIN0_YRGB_DEFLICK_EN(x) (((x)&1)<<16)
#define v_WIN0_CBR_DEFLICK_EN(x) (((x)&1)<<17)