return layer_id;
}
+static int rk2928_lcdc_hdmi_process(struct rk_lcdc_device_driver *dev_drv,int mode)
+{
+ if(mode)
+ rk2928_lcdc_iomux(dev_drv->screen0,0); //switch to gpio mode,to avoid current leakage
+ else
+ rk2928_lcdc_iomux(dev_drv->screen0,1); //switch to gpio mode,to avoid current leakage
+
+ return 0;
+
+}
int rk2928_lcdc_early_suspend(struct rk_lcdc_device_driver *dev_drv)
{
struct rk2928_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk2928_lcdc_device,driver);
}
+
int rk2928_lcdc_early_resume(struct rk_lcdc_device_driver *dev_drv)
{
struct rk2928_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk2928_lcdc_device,driver);
.fps_mgr = rk2928_lcdc_fps_mgr,
.fb_get_layer = rk2928_fb_get_layer,
.fb_layer_remap = rk2928_fb_layer_remap,
+ .lcdc_hdmi_process = rk2928_lcdc_hdmi_process,
};
#ifdef CONFIG_PM
static int rk2928_lcdc_suspend(struct platform_device *pdev, pm_message_t state)
static void __exit rk2928_lcdc_exit(void)
{
- platform_driver_unregister(&rk2928lcdc_driver);
+ platform_driver_unregister(&rk2928lcdc_driver);
}
ret = info->fbops->fb_open(info,1);
ret = dev_drv->load_screen(dev_drv,1);
ret = info->fbops->fb_set_par(info);
+ if(dev_drv->lcdc_hdmi_process)
+ dev_drv->lcdc_hdmi_process(dev_drv,enable);
+
#if defined(CONFIG_DUAL_LCDC_DUAL_DISP_IN_KERNEL)
if(likely(inf->num_lcdc == 2))
{
dev_drv->set_dsp_lut = def_drv->set_dsp_lut;
if(def_drv->read_dsp_lut)
dev_drv->read_dsp_lut = def_drv->read_dsp_lut;
+ if(def_drv->lcdc_hdmi_process)
+ dev_drv->lcdc_hdmi_process = def_drv->lcdc_hdmi_process;
init_layer_par(dev_drv);
init_completion(&dev_drv->frame_done);
spin_lock_init(&dev_drv->cpl_lock);
int (*fb_layer_remap)(struct rk_lcdc_device_driver *dev_drv,enum fb_win_map_order order);
int (*set_dsp_lut)(struct rk_lcdc_device_driver *dev_drv,int *lut);
int (*read_dsp_lut)(struct rk_lcdc_device_driver *dev_drv,int *lut);
+ int (*lcdc_hdmi_process)(struct rk_lcdc_device_driver *dev_drv,int mode); //some lcdc need to some process in hdmi mode
};