From dad427ac345a763224d7e116f72f062496ae38be Mon Sep 17 00:00:00 2001 From: yzq Date: Tue, 7 May 2013 17:35:41 +0800 Subject: [PATCH] mfd:rk616 hdmi: use vif rebuild signal for hdmi 1080p --- .../rockchip/hdmi/chips/rk616/rk616_hdmi_hw.c | 20 ++++++++----------- drivers/video/rockchip/hdmi/rk_hdmi.h | 1 + drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c | 2 ++ drivers/video/rockchip/hdmi/rk_hdmi_task.c | 2 ++ 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/video/rockchip/hdmi/chips/rk616/rk616_hdmi_hw.c b/drivers/video/rockchip/hdmi/chips/rk616/rk616_hdmi_hw.c index 5398cb856ed0..eeb22c0569b4 100755 --- a/drivers/video/rockchip/hdmi/chips/rk616/rk616_hdmi_hw.c +++ b/drivers/video/rockchip/hdmi/chips/rk616/rk616_hdmi_hw.c @@ -5,7 +5,6 @@ #include "rk616_hdmi_hw.h" static char edid_result = 0; -static bool analog_sync = 0; static int rk616_hdmi_init_pol_set(struct mfd_rk616 * rk616,int pol) @@ -49,7 +48,7 @@ static void rk616_hdmi_set_pwr_mode(int mode) hdmi_dbg(hdmi->dev,"%s change pwr_mode %d --> %d\n",__FUNCTION__,hdmi->pwr_mode,mode); switch(mode){ case NORMAL: - hdmi_dbg(hdmi->dev,"%s change pwr_mode NORMAL\n",__FUNCTION__,hdmi->pwr_mode,mode); + hdmi_dbg(hdmi->dev,"%s change pwr_mode NORMAL\n",__FUNCTION__,hdmi->pwr_mode,mode); rk616_hdmi_sys_power_down(); HDMIWrReg(PHY_DRIVER,0xaa); HDMIWrReg(PHY_PRE_EMPHASIS,0x0f); @@ -62,7 +61,6 @@ static void rk616_hdmi_set_pwr_mode(int mode) HDMIWrReg(0xce, 0x01); rk616_hdmi_av_mute(1); rk616_hdmi_sys_power_up(); - analog_sync = 1; break; case LOWER_PWR: hdmi_dbg(hdmi->dev,"%s change pwr_mode LOWER_PWR\n",__FUNCTION__,hdmi->pwr_mode,mode); @@ -388,16 +386,13 @@ void rk616_hdmi_control_output(int enable) HDMIRdReg(AV_MUTE,&mutestatus); if(mutestatus && (m_AUDIO_MUTE | m_VIDEO_BLACK)) { HDMIWrReg(AV_MUTE, v_AUDIO_MUTE(0) | v_VIDEO_MUTE(0)); - rk616_hdmi_sys_power_up(); - rk616_hdmi_sys_power_down(); - rk616_hdmi_sys_power_up(); - if(analog_sync){ - HDMIWrReg(0xce, 0x00); - delay100us(); - HDMIWrReg(0xce, 0x01); - analog_sync = 0; - } } + rk616_hdmi_sys_power_up(); + rk616_hdmi_sys_power_down(); + rk616_hdmi_sys_power_up(); + HDMIWrReg(0xce, 0x00); + delay100us(); + HDMIWrReg(0xce, 0x01); } else { HDMIWrReg(AV_MUTE, v_AUDIO_MUTE(1) | v_VIDEO_MUTE(1)); @@ -467,6 +462,7 @@ int rk616_hdmi_initial(void) hdmi->config_audio = rk616_hdmi_config_audio; hdmi->detect_hotplug = rk616_hdmi_detect_hotplug; hdmi->read_edid = rk616_hdmi_read_edid; + hdmi->set_vif = rk616_set_vif; rk616_hdmi_reset(); diff --git a/drivers/video/rockchip/hdmi/rk_hdmi.h b/drivers/video/rockchip/hdmi/rk_hdmi.h index 5c4cf8ad4803..09dd016bc9b1 100755 --- a/drivers/video/rockchip/hdmi/rk_hdmi.h +++ b/drivers/video/rockchip/hdmi/rk_hdmi.h @@ -301,6 +301,7 @@ struct hdmi { int (*detect_hotplug)(void); // call back for edid int (*read_edid)(int block, unsigned char *buff); + int (*set_vif)(rk_screen * screen,bool connect); // call back for hdcp operatoion void (*hdcp_cb)(void); diff --git a/drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c b/drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c index eda672f06ca5..22f38f356ea7 100755 --- a/drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c +++ b/drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c @@ -509,6 +509,8 @@ int hdmi_switch_fb(struct hdmi *hdmi, int vic) rc = hdmi_set_info(screen, hdmi->vic); if(rc == 0) { + if(hdmi->set_vif) + hdmi->set_vif(screen,1); rk_fb_switch_screen(screen, 1, hdmi->lcdc->id); rk_fb_disp_scale(hdmi->xscale, hdmi->yscale, hdmi->lcdc->id); } diff --git a/drivers/video/rockchip/hdmi/rk_hdmi_task.c b/drivers/video/rockchip/hdmi/rk_hdmi_task.c index 82be97724ff2..057e32d60554 100755 --- a/drivers/video/rockchip/hdmi/rk_hdmi_task.c +++ b/drivers/video/rockchip/hdmi/rk_hdmi_task.c @@ -80,6 +80,8 @@ void hdmi_sys_remove(void) memset(&hdmi->edid, 0, sizeof(struct hdmi_edid)); INIT_LIST_HEAD(&hdmi->edid.modelist); hdmi->display = HDMI_DISABLE; + if(hdmi->set_vif) + hdmi->set_vif(hdmi->lcdc->screen1,0); rk_fb_switch_screen(hdmi->lcdc->screen1, 0, hdmi->lcdc->id); kobject_uevent_env(&hdmi->dev->kobj, KOBJ_REMOVE, envp); #ifdef CONFIG_SWITCH -- 2.34.1