mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 22:52:35 +02:00
rk2928 lcdc:switch all lcdc io to gpio mode when hdmi plug in
This commit is contained in:
parent
c75f38636c
commit
68609f11d5
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user