From acf4e1b1b7b2b33d6dbd397ecf97752ac21f1b2b Mon Sep 17 00:00:00 2001 From: hjc Date: Thu, 2 Apr 2015 19:11:02 +0800 Subject: [PATCH] rk fb: from rk3368 fb only need to reserved 1 framebuffer Signed-off-by: hjc --- drivers/video/rockchip/rk_fb.c | 2 +- drivers/video/rockchip/screen/rk_screen.c | 13 ++++++++----- include/linux/rk_fb.h | 1 + include/linux/rk_screen.h | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/video/rockchip/rk_fb.c b/drivers/video/rockchip/rk_fb.c index ff0d5f33dae8..0c785dea8563 100644 --- a/drivers/video/rockchip/rk_fb.c +++ b/drivers/video/rockchip/rk_fb.c @@ -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; diff --git a/drivers/video/rockchip/screen/rk_screen.c b/drivers/video/rockchip/screen/rk_screen.c index 558c3b2f5b27..d3aadd6bfd93 100755 --- a/drivers/video/rockchip/screen/rk_screen.c +++ b/drivers/video/rockchip/screen/rk_screen.c @@ -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); } diff --git a/include/linux/rk_fb.h b/include/linux/rk_fb.h index 28b2fe8d9c85..7caa56a065ec 100644 --- a/include/linux/rk_fb.h +++ b/include/linux/rk_fb.h @@ -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; }; diff --git a/include/linux/rk_screen.h b/include/linux/rk_screen.h index 6edeafa71400..af0ffe7d70d0 100644 --- a/include/linux/rk_screen.h +++ b/include/linux/rk_screen.h @@ -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); -- 2.34.1