mfd:rk616 hdmi: use vif rebuild signal for hdmi 1080p
authoryzq <yzq@rock-chips.com>
Tue, 7 May 2013 09:35:41 +0000 (17:35 +0800)
committeryzq <yzq@rock-chips.com>
Tue, 7 May 2013 09:37:00 +0000 (17:37 +0800)
drivers/video/rockchip/hdmi/chips/rk616/rk616_hdmi_hw.c
drivers/video/rockchip/hdmi/rk_hdmi.h
drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c
drivers/video/rockchip/hdmi/rk_hdmi_task.c

index 5398cb856ed0167b5e85b05de77d3c7990fbe63d..eeb22c0569b4a7ccac0343e312ec3c32bd39d756 100755 (executable)
@@ -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();
 
index 5c4cf8ad48038d3a6fd48c5cadf9e0c0ab3b5016..09dd016bc9b1e4c9f640321e79a6c7f4279004e0 100755 (executable)
@@ -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);
index eda672f06ca51772c6fe2c591b533e43359054ad..22f38f356ea77b38bcd91c85d4ddfc86c9477739 100755 (executable)
@@ -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);
        }
index 82be97724ff2ef19c1e00654210b1128ba380e59..057e32d60554f65a31403113c104e682d3e22e20 100755 (executable)
@@ -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