From: zwl Date: Fri, 19 Sep 2014 06:33:15 +0000 (+0800) Subject: rk3288 lcdc: add read default xvir and vir_stride X-Git-Tag: firefly_0821_release~4657 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=19f00072b73662ea403b34d1f02565f11bd188f4;p=firefly-linux-kernel-4.4.55.git rk3288 lcdc: add read default xvir and vir_stride --- diff --git a/drivers/video/rockchip/lcdc/rk3288_lcdc.c b/drivers/video/rockchip/lcdc/rk3288_lcdc.c index 87b62178ae7d..3fd91108185f 100755 --- a/drivers/video/rockchip/lcdc/rk3288_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3288_lcdc.c @@ -312,6 +312,24 @@ static void lcdc_read_reg_defalut_cfg(struct lcdc_device *lcdc_dev) win0->fmt_10 = (val & m_WIN0_FMT_10) >> 4; win0->format = win0->fmt_cfg; break; + case WIN0_VIR: + win0->area[0].y_vir_stride = + val & m_WIN0_VIR_STRIDE; + win0->area[0].uv_vir_stride = + (val & m_WIN0_VIR_STRIDE_UV) >> 16; + if (win0->format == ARGB888) + win0->area[0].xvir = + win0->area[0].y_vir_stride; + else if (win0->format == RGB888) + win0->area[0].xvir = + win0->area[0].y_vir_stride * 4 / 3; + else if (win0->format == RGB565) + win0->area[0].xvir = + 2 * win0->area[0].y_vir_stride; + else /* YUV */ + win0->area[0].xvir = + 4 * win0->area[0].y_vir_stride; + break; case WIN0_YRGB_MST: win0->area[0].smem_start = val; break; diff --git a/drivers/video/rockchip/rk_fb.c b/drivers/video/rockchip/rk_fb.c index 136c524d4263..adfeb5690be7 100755 --- a/drivers/video/rockchip/rk_fb.c +++ b/drivers/video/rockchip/rk_fb.c @@ -1616,8 +1616,14 @@ static int rk_fb_update_ext_win(struct rk_lcdc_driver *ext_dev_drv, } else { ext_win->area[0].xact = win->area[0].xact; ext_win->area[0].yact = win->area[0].yact; - ext_win->area[0].xvir = win->area[0].xvir; - ext_win->area[0].yvir = win->area[0].yvir; + if (win->area[0].xvir == 0) + ext_win->area[0].xvir = win->area[0].xact; + else + ext_win->area[0].xvir = win->area[0].xvir; + if (win->area[0].yvir == 0) + ext_win->area[0].yvir = win->area[0].yact; + else + ext_win->area[0].yvir = win->area[0].yvir; ext_win->area[0].y_vir_stride = win->area[0].y_vir_stride; if (is_yuv) ext_win->area[0].uv_vir_stride = win->area[0].uv_vir_stride; @@ -3881,9 +3887,11 @@ int rk_fb_register(struct rk_lcdc_driver *dev_drv, rk_fb_alloc_buffer(main_fbi, 0); /* only alloc memory for main fb */ if (support_uboot_display()) { - rk_fb_copy_from_loader(main_fbi); - dev_drv->ops->direct_set_addr(dev_drv, 0, + if (dev_drv->iommu_enabled) { + rk_fb_copy_from_loader(main_fbi); + dev_drv->ops->direct_set_addr(dev_drv, 0, main_fbi->fix.smem_start); + } return 0; } main_fbi->fbops->fb_set_par(main_fbi);