From 8c0c29486cb5a054455385059f7db1df144e2f5f Mon Sep 17 00:00:00 2001 From: hjc Date: Tue, 23 Dec 2014 14:26:48 +0800 Subject: [PATCH] rk fb: add win mirror pos config Signed-off-by: hjc --- drivers/video/rockchip/rk_fb.c | 63 +++++++--------------------------- 1 file changed, 12 insertions(+), 51 deletions(-) diff --git a/drivers/video/rockchip/rk_fb.c b/drivers/video/rockchip/rk_fb.c index 5ae5a4c113a3..b8d4c085b3df 100755 --- a/drivers/video/rockchip/rk_fb.c +++ b/drivers/video/rockchip/rk_fb.c @@ -1320,7 +1320,8 @@ static int rk_fb_pan_display(struct fb_var_screeninfo *var, } /* x y mirror ,jump line */ - if (screen->y_mirror == 1) { + if ((screen->y_mirror == 1) || + (win->mirror_en == 1)) { if (screen->interlace == 1) { win->area[0].y_offset = yoffset * stride * 2 + ((win->area[0].yact - 1) * 2 + 1) * stride + @@ -1340,7 +1341,8 @@ static int rk_fb_pan_display(struct fb_var_screeninfo *var, } } if (is_pic_yuv == 1) { - if (screen->y_mirror == 1) { + if ((screen->y_mirror == 1) || + (win->mirror_en == 1)) { if (screen->interlace == 1) { win->area[0].c_offset = uv_y_off * uv_stride * 2 + @@ -2874,51 +2876,6 @@ static int rk_fb_set_par(struct fb_info *info) break; } - /* x y mirror ,jump line */ - if (screen->y_mirror == 1) { - if (screen->interlace == 1) { - win->area[0].y_offset = yoffset * stride * 2 + - ((win->area[0].yact - 1) * 2 + 1) * stride + - xoffset * pixel_width / 8; - } else { - win->area[0].y_offset = yoffset * stride + - (win->area[0].yact - 1) * stride + - xoffset * pixel_width / 8; - } - } else { - if (screen->interlace == 1) { - win->area[0].y_offset = - yoffset * stride * 2 + xoffset * pixel_width / 8; - } else { - win->area[0].y_offset = - yoffset * stride + xoffset * pixel_width / 8; - } - } - if (is_pic_yuv == 1) { - if (screen->y_mirror == 1) { - if (screen->interlace == 1) { - win->area[0].c_offset = - uv_y_off * uv_stride * 2 + - ((uv_y_act - 1) * 2 + 1) * uv_stride + - uv_x_off * pixel_width / 8; - } else { - win->area[0].c_offset = uv_y_off * uv_stride + - (uv_y_act - 1) * uv_stride + - uv_x_off * pixel_width / 8; - } - } else { - if (screen->interlace == 1) { - win->area[0].c_offset = - uv_y_off * uv_stride * 2 + - uv_x_off * pixel_width / 8; - } else { - win->area[0].c_offset = - uv_y_off * uv_stride + - uv_x_off * pixel_width / 8; - } - } - } - win->area[0].format = fb_data_fmt; win->area[0].y_vir_stride = stride >> 2; win->area[0].uv_vir_stride = uv_stride >> 2; @@ -3181,8 +3138,10 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id) if (rk_fb->disp_mode == ONE_DUAL) { if (dev_drv->ops->dsp_black) dev_drv->ops->dsp_black(dev_drv, 1); - if (dev_drv->ops->set_screen_scaler) - dev_drv->ops->set_screen_scaler(dev_drv, dev_drv->screen0, 0); + if ((dev_drv->ops->set_screen_scaler) && + (rk_fb->disp_mode == ONE_DUAL)) + dev_drv->ops->set_screen_scaler(dev_drv, + dev_drv->screen0, 0); } if (dev_drv->uboot_logo && (screen->type != dev_drv->cur_screen->type)) dev_drv->uboot_logo = 0; @@ -3225,6 +3184,7 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id) } else { if (dev_drv->screen1) dev_drv->cur_screen = dev_drv->screen1; + memcpy(dev_drv->cur_screen, screen, sizeof(struct rk_screen)); dev_drv->cur_screen->xsize = dev_drv->cur_screen->mode.xres; dev_drv->cur_screen->ysize = dev_drv->cur_screen->mode.yres; @@ -3266,8 +3226,9 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id) dev_drv->uboot_logo = 0; } hdmi_switch_complete = 1; - if (rk_fb->disp_mode == ONE_DUAL) { - if (dev_drv->ops->set_screen_scaler) + if ((rk_fb->disp_mode == ONE_DUAL) || (rk_fb->disp_mode == NO_DUAL)) { + if ((dev_drv->ops->set_screen_scaler) && + (rk_fb->disp_mode == ONE_DUAL)) dev_drv->ops->set_screen_scaler(dev_drv, dev_drv->screen0, 1); if (dev_drv->ops->dsp_black) dev_drv->ops->dsp_black(dev_drv, 0); -- 2.34.1