rk fb: from rk3368 fb only need to reserved 1 framebuffer
authorhjc <hjc@rock-chips.com>
Thu, 2 Apr 2015 11:11:02 +0000 (19:11 +0800)
committerhjc <hjc@rock-chips.com>
Sat, 9 May 2015 07:07:27 +0000 (15:07 +0800)
Signed-off-by: hjc <hjc@rock-chips.com>
drivers/video/rockchip/rk_fb.c
drivers/video/rockchip/screen/rk_screen.c
include/linux/rk_fb.h
include/linux/rk_screen.h

index ff0d5f33dae8893481c9ac7b9cf2b5954e189021..0c785dea856368f3d12c71a2262620678f25b131 100644 (file)
@@ -3416,7 +3416,7 @@ static int rk_fb_alloc_buffer(struct fb_info *fbi)
                win = dev_drv->win[win_id];
 
        if (!strcmp(fbi->fix.id, "fb0")) {
-               fb_mem_size = get_fb_size();
+               fb_mem_size = get_fb_size(dev_drv->reserved_fb);
 #if defined(CONFIG_ION_ROCKCHIP)
                if (rk_fb_alloc_buffer_by_ion(fbi, win, fb_mem_size) < 0)
                        return -ENOMEM;
index 558c3b2f5b279e2092d66a98f5317adf594d073b..d3aadd6bfd93ec18aa8a48e113cf625f2999340a 100755 (executable)
@@ -30,7 +30,7 @@ int rk_fb_set_prmry_screen(struct rk_screen *screen)
        return 0;
 }
 
-size_t get_fb_size(void)
+size_t get_fb_size(u8 reserved_fb)
 {
        size_t size = 0;
        u32 xres = 0;
@@ -44,12 +44,15 @@ size_t get_fb_size(void)
 
        /* align as 64 bytes(16*4) in an odd number of times */
        xres = ALIGN_64BYTE_ODD_TIMES(xres, ALIGN_PIXEL_64BYTE_RGB8888);
-
-       #if defined(CONFIG_THREE_FB_BUFFER)
+        if (reserved_fb == 1) {
+                size = (xres * yres << 2);/*one buffer*/
+        } else {
+#if defined(CONFIG_THREE_FB_BUFFER)
                size = (xres * yres << 2) * 3;  /* three buffer */
-       #else
+#else
                size = (xres * yres << 2) << 1; /* two buffer */
-       #endif
+#endif
+       }
        return ALIGN(size, SZ_1M);
 }
 
index 28b2fe8d9c8561523baa98fa5607d384df06b525..7caa56a065ecb9ff9bc2ea24c5dd9e0488657a72 100644 (file)
@@ -647,6 +647,7 @@ struct rk_lcdc_driver {
        int uboot_logo;
        int bcsh_init_status;
        bool cabc_pwm_pol;
+       u8  reserved_fb;
 
        void *trace_buf;
 };
index 6edeafa71400849226a80df196523e5645326dfe..af0ffe7d70d05adcd8b3ba6ccc8d61d4371358a3 100644 (file)
@@ -144,7 +144,7 @@ struct rk29fb_info {
 };
 
 extern void set_lcd_info(struct rk_screen *screen, struct rk29lcd_info *lcd_info);
-extern size_t get_fb_size(void);
+extern size_t get_fb_size(u8 reserved_fb);
 
 extern void set_tv_info(struct rk_screen *screen);
 extern void set_hdmi_info(struct rk_screen *screen);