rk fb: delay 200ms when extern display switch screen can fix mmu pagefault
authorhjc <hjc@rock-chips.com>
Wed, 6 May 2015 07:56:58 +0000 (15:56 +0800)
committerhjc <hjc@rock-chips.com>
Sat, 9 May 2015 07:09:12 +0000 (15:09 +0800)
drivers/video/rockchip/rk_fb.c

index d4de585b3dc9f31596714284acbf0f6942ae18c2..6bb2ad81e8d00142b6fa2e3ad6bd2b809d07aded 100644 (file)
@@ -2643,6 +2643,7 @@ static int rk_fb_blank(int blank_mode, struct fb_info *info)
        win_id = dev_drv->ops->fb_get_win_id(dev_drv, fix->id);
        if (win_id < 0)
                return -ENODEV;
+       mutex_lock(&dev_drv->switch_screen);
 #if defined(CONFIG_RK_HDMI)
        if ((rk_fb->disp_mode == ONE_DUAL) &&
            (hdmi_get_hotplug() == HDMI_HPD_ACTIVED)) {
@@ -2652,6 +2653,7 @@ static int rk_fb_blank(int blank_mode, struct fb_info *info)
        {
                dev_drv->ops->blank(dev_drv, win_id, blank_mode);
        }
+       mutex_unlock(&dev_drv->switch_screen);
        return 0;
 }
 
@@ -3193,6 +3195,8 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id)
        mutex_lock(&dev_drv->switch_screen);
        hdmi_switch_state = 0;
        dev_drv->hdmi_switch = 1;
+       if (!dev_drv->uboot_logo)
+               mdelay(200);
 
        envp[0] = "switch screen";
        envp[1] = kmalloc(32, GFP_KERNEL);