rk2928 lcdc:switch all lcdc io to gpio mode when hdmi plug in

This commit is contained in:
yxj 2012-11-12 09:34:49 +08:00
parent c75f38636c
commit 68609f11d5
3 changed files with 19 additions and 1 deletions

View File

@ -1006,6 +1006,16 @@ static int rk2928_fb_get_layer(struct rk_lcdc_device_driver *dev_drv,const char
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);
@ -1042,6 +1052,7 @@ int rk2928_lcdc_early_suspend(struct rk_lcdc_device_driver *dev_drv)
}
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);
@ -1123,6 +1134,7 @@ static struct rk_lcdc_device_driver lcdc_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)
@ -1298,7 +1310,7 @@ static int __init rk2928_lcdc_init(void)
static void __exit rk2928_lcdc_exit(void)
{
platform_driver_unregister(&rk2928lcdc_driver);
platform_driver_unregister(&rk2928lcdc_driver);
}

View File

@ -748,6 +748,9 @@ int rk_fb_switch_screen(rk_screen *screen ,int enable ,int lcdc_id)
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))
{
@ -964,6 +967,8 @@ static int init_lcdc_device_driver(struct rk_lcdc_device_driver *dev_drv,
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);

View File

@ -236,6 +236,7 @@ struct rk_lcdc_device_driver{
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
};