rk30:hdmi: fix hdmi display error when switch resolution.
authorZheng Yang <zhengyang@rock-chips.com>
Fri, 6 Apr 2012 02:17:48 +0000 (10:17 +0800)
committerZheng Yang <zhengyang@rock-chips.com>
Fri, 6 Apr 2012 02:17:48 +0000 (10:17 +0800)
drivers/video/rockchip/hdmi/rk30_hdmi.h
drivers/video/rockchip/hdmi/rk30_hdmi_lcdc.c

index 7cc68066930398995bcf7ab8e876f5ccdbb4c37e..66ee37685945c02db6e15646d8112fd1a32e6454 100755 (executable)
@@ -24,7 +24,7 @@ enum {
 #define HDMI_SOURCE_DEFAULT            HDMI_SOURCE_LCDC1
 
 /* default HDMI output video mode */
-#define HDMI_VIDEO_DEFAULT_MODE                        HDMI_1920x1080p_60Hz//HDMI_1280x720p_60Hz
+#define HDMI_VIDEO_DEFAULT_MODE                        HDMI_1280x720p_60Hz//HDMI_1920x1080p_60Hz
 #define HDMI_AUDIO_DEFAULT_CHANNEL             2
 #define HDMI_AUDIO_DEFAULT_RATE                        HDMI_AUDIO_FS_44100
 #define HDMI_AUDIO_DEFAULT_WORD_LENGTH HDMI_AUDIO_WORD_LENGTH_16bit
index 0c3d6e296e7f6363e68e665c6326d0c65883155a..6ca348f50de3439b908b491225b4fb4a61c04ddb 100755 (executable)
@@ -486,20 +486,30 @@ const char *hdmi_get_video_mode_name(unsigned char vic)
 int hdmi_switch_fb(struct hdmi *hdmi, int vic)
 {
        int rc = 0;
+       struct layer_par *par = NULL;
+       struct rk_lcdc_device_driver * dev_drv;
+       struct rk29fb_screen *screen; 
 
-//     if(hdmi->config_set.resolution == 0)
-//             hdmi->config_set.resolution = HDMI_DEFAULT_RESOLUTION;
+       if(hdmi->vic == 0)
+               hdmi->vic = HDMI_VIDEO_DEFAULT_MODE;
                
        if(hdmi->lcdc == NULL || hdmi->lcdc->screen == NULL) {
                dev_err(hdmi->dev, "lcdc %d not exist\n", HDMI_SOURCE_DEFAULT);
                return -1;
        }
 
+       dev_drv = hdmi->lcdc;
+       screen = dev_drv->screen;
        rc = hdmi_set_info(hdmi->lcdc->screen, vic);
 
        if(rc == 0 &&  hdmi->lcdc->load_screen) {
                
-               rc = hdmi->lcdc->load_screen(hdmi->lcdc, 0);
+               hdmi->lcdc->load_screen(hdmi->lcdc, 0);
+               par = &dev_drv->layer_par[1];
+               par->xsize = screen->x_res;
+       par->ysize = screen->y_res;
+               hdmi->lcdc->set_par(hdmi->lcdc, 1);
+               hdmi->lcdc->pan_display(hdmi->lcdc, 1);
        }
        return rc;
 }