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>
Thu, 2 Apr 2015 11:11:02 +0000 (19:11 +0800)
Signed-off-by: hjc <hjc@rock-chips.com>
drivers/video/rockchip/lcdc/rk3368_lcdc.c
drivers/video/rockchip/rk_fb.c
drivers/video/rockchip/screen/rk_screen.c
include/linux/rk_fb.h
include/linux/rk_screen.h

index 6b3803f53c416cd9f925b1b21ad5cd0a74c7d9c4..7b1c6a054d1bc62a1f0c8be86395900800726fb8 100755 (executable)
@@ -4632,6 +4632,7 @@ static int rk3368_lcdc_probe(struct platform_device *pdev)
        dev_drv->id = lcdc_dev->id;
        dev_drv->ops = &lcdc_drv_ops;
        dev_drv->lcdc_win_num = ARRAY_SIZE(lcdc_win);
+       dev_drv->reserved_fb = 1;/*only need reserved 1 buffer*/
        spin_lock_init(&lcdc_dev->reg_lock);
 
        lcdc_dev->irq = platform_get_irq(pdev, 0);
index a73df898ca48484267a43f8cf58e01a11f0a3d95..58b21f11ae681d4d2babbb51318f786716e142a9 100755 (executable)
@@ -3439,7 +3439,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 39fc2a76dfe492b09681cc1aebf248493a9ec4b1..891ac5b1fab6059fb4a754dbfb8fdcb54e37f51a 100644 (file)
@@ -648,6 +648,7 @@ struct rk_lcdc_driver {
        int uboot_logo;
        int bcsh_init_status;
        bool cabc_pwm_pol;
+       u8  reserved_fb;
 };
 
 struct rk_fb_par {
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);