From: hjc <hjc@rock-chips.com>
Date: Tue, 26 May 2015 06:38:23 +0000 (+0800)
Subject: rk fb: fix uboot logo switch to kernel logo splash screen
X-Git-Tag: firefly_0821_release~4108
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=35b4a244ebc263703ddcf1ca0af83b1ff18d4caf;p=firefly-linux-kernel-4.4.55.git

rk fb: fix uboot logo switch to kernel logo splash screen

Signed-off-by: hjc <hjc@rock-chips.com>
---

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 {