rk3288 lcdc: add read default xvir and vir_stride
authorzwl <zwl@rockchips.com>
Fri, 19 Sep 2014 06:33:15 +0000 (14:33 +0800)
committerzwl <zwl@rockchips.com>
Fri, 19 Sep 2014 06:33:34 +0000 (14:33 +0800)
drivers/video/rockchip/lcdc/rk3288_lcdc.c
drivers/video/rockchip/rk_fb.c

index 87b62178ae7dc5c9a58689f282f5f507919d0569..3fd91108185f21c2814eba4b58f4acee27463480 100755 (executable)
@@ -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;
index 136c524d4263237f893e1bd1b8cf066b738748e9..adfeb5690be71468c636a53c900eb8798cb91c67 100755 (executable)
@@ -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);