dev_drv->id);
if (enable == 2 /*&& dev_drv->enable*/)
return 0;
+ pr_info("switch:en=%d,lcdc_id=%d,screen type=%d,cur type=%d\n",
+ enable, lcdc_id, screen->type, dev_drv->cur_screen->type);
+
+ mutex_lock(&dev_drv->switch_screen);
hdmi_switch_state = 0;
dev_drv->hdmi_switch = 1;
envp[0] = "switch screen";
envp[1] = kmalloc(32, GFP_KERNEL);
- if (envp[1] == NULL)
+ if (envp[1] == NULL) {
+ pr_err("switch screen kmalloc envp[1] fail\n");
+ mutex_unlock(&dev_drv->switch_screen);
return 0;
+ }
sprintf(envp[1], "SCREEN=%d,ENABLE=%d", screen->type, enable);
envp[2] = NULL;
/* if screen type is different, we do not disable lcdc. */
if (dev_drv->cur_screen->type != screen->type) {
dev_drv->hdmi_switch = 0;
+ mutex_unlock(&dev_drv->switch_screen);
return 0;
}
hdmi_switch_state = 0;
dev_drv->hdmi_switch = 0;
+ mutex_unlock(&dev_drv->switch_screen);
return 0;
} else {
if (dev_drv->screen1)
(rk_fb->disp_mode == ONE_DUAL))
dev_drv->ops->backlight_close(dev_drv, 0);
}
+ mutex_unlock(&dev_drv->switch_screen);
return 0;
}
mutex_init(&dev_drv->fb_win_id_mutex);
mutex_init(&dev_drv->win_config);
mutex_init(&dev_drv->front_lock);
+ mutex_init(&dev_drv->switch_screen);
dev_drv->ops->fb_win_remap(dev_drv, dev_drv->fb_win_map);
dev_drv->first_frame = 1;
dev_drv->overscan.left = 100;
struct mutex fb_win_id_mutex;
struct mutex win_config;
+ struct mutex switch_screen; /*for switch screen*/
struct completion frame_done; /*sync for pan_display,whe we set a new
frame address to lcdc register,we must
make sure the frame begain to display*/