From 35b4a244ebc263703ddcf1ca0af83b1ff18d4caf Mon Sep 17 00:00:00 2001 From: hjc Date: Tue, 26 May 2015 14:38:23 +0800 Subject: [PATCH] rk fb: fix uboot logo switch to kernel logo splash screen Signed-off-by: hjc --- drivers/video/rockchip/rk_fb.c | 12 +++++++++--- include/linux/rk_fb.h | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/video/rockchip/rk_fb.c b/drivers/video/rockchip/rk_fb.c index b9bca58b7768..20ab70cc9dfc 100755 --- a/drivers/video/rockchip/rk_fb.c +++ b/drivers/video/rockchip/rk_fb.c @@ -3919,6 +3919,7 @@ int rk_fb_register(struct rk_lcdc_driver *dev_drv, struct fb_info *fbi; struct rk_fb_par *fb_par = NULL; int i = 0, ret = 0, index = 0; + unsigned long flags; if (rk_fb->num_lcdc == RK30_MAX_LCDC_SUPPORT) return -ENXIO; @@ -4090,7 +4091,9 @@ int rk_fb_register(struct rk_lcdc_driver *dev_drv, xact, yact, width, height); return 0; } - + local_irq_save(flags); + if (dev_drv->ops->wait_frame_start) + dev_drv->ops->wait_frame_start(dev_drv, 0); if (dev_drv->ops->post_dspbuf) { dev_drv->ops->post_dspbuf(dev_drv, main_fbi->fix.smem_start, @@ -4103,7 +4106,7 @@ int rk_fb_register(struct rk_lcdc_driver *dev_drv, dev_drv->ops->mmu_en(dev_drv); freed_index = 0; } - + local_irq_restore(flags); return 0; } else if (dev_drv->uboot_logo && uboot_logo_base) { u32 start = uboot_logo_base; @@ -4143,7 +4146,9 @@ int rk_fb_register(struct rk_lcdc_driver *dev_drv, kfree(pages); vunmap(vaddr); - + local_irq_save(flags); + if (dev_drv->ops->wait_frame_start) + dev_drv->ops->wait_frame_start(dev_drv, 0); dev_drv->ops->post_dspbuf(dev_drv, main_fbi->fix.smem_start, format, xact, yact, @@ -4154,6 +4159,7 @@ int rk_fb_register(struct rk_lcdc_driver *dev_drv, dev_drv->ops->mmu_en(dev_drv); freed_index = 0; } + local_irq_restore(flags); return 0; } else { if (dev_drv->iommu_enabled) { diff --git a/include/linux/rk_fb.h b/include/linux/rk_fb.h index 2185db815450..694332df1354 100755 --- a/include/linux/rk_fb.h +++ b/include/linux/rk_fb.h @@ -483,6 +483,7 @@ struct rk_lcdc_drv_ops { int (*backlight_close)(struct rk_lcdc_driver *dev_drv, int enable); int (*area_support_num)(struct rk_lcdc_driver *dev_drv, unsigned int *area_support); int (*extern_func)(struct rk_lcdc_driver *dev_drv, int cmd); + int (*wait_frame_start)(struct rk_lcdc_driver *dev_drv, int enable); }; struct rk_fb_area_par { -- 2.34.1