diff options
Diffstat (limited to 'drivers/video/mxc/mxc_hdmi.c')
-rw-r--r-- | drivers/video/mxc/mxc_hdmi.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/video/mxc/mxc_hdmi.c b/drivers/video/mxc/mxc_hdmi.c index bf20720d1452..127bfb659f44 100644 --- a/drivers/video/mxc/mxc_hdmi.c +++ b/drivers/video/mxc/mxc_hdmi.c @@ -173,7 +173,7 @@ struct mxc_hdmi { bool irq_enabled; spinlock_t irq_lock; bool phy_enabled; - struct fb_videomode previous_mode; + struct fb_videomode default_mode; struct fb_videomode previous_non_vga_mode; bool requesting_vga_for_initialization; @@ -1872,13 +1872,7 @@ static void mxc_hdmi_set_mode(struct mxc_hdmi *hdmi) /* Set the default mode only once. */ if (!hdmi->dft_mode_set) { - dev_dbg(&hdmi->pdev->dev, "%s: setting to default=%s bpp=%d\n", - __func__, hdmi->dft_mode_str, hdmi->default_bpp); - - fb_find_mode(&var, hdmi->fbi, - hdmi->dft_mode_str, NULL, 0, NULL, - hdmi->default_bpp); - + fb_videomode_to_var(&var, &hdmi->default_mode); hdmi->dft_mode_set = true; } else fb_videomode_to_var(&var, &hdmi->previous_non_vga_mode); @@ -2147,9 +2141,6 @@ static void mxc_hdmi_setup(struct mxc_hdmi *hdmi, unsigned long event) dev_dbg(&hdmi->pdev->dev, "%s - video mode changed\n", __func__); - /* Save mode as 'previous_mode' so that we can know if mode changed. */ - memcpy(&hdmi->previous_mode, &m, sizeof(struct fb_videomode)); - hdmi->vic = 0; if (!hdmi->requesting_vga_for_initialization) { /* Save mode if this isn't the result of requesting @@ -2160,6 +2151,8 @@ static void mxc_hdmi_setup(struct mxc_hdmi *hdmi, unsigned long event) edid_mode = fb_find_nearest_mode(&m, &hdmi->fbi->modelist); pr_debug("edid mode "); dump_fb_videomode((struct fb_videomode *)edid_mode); + /* update fbi mode */ + hdmi->fbi->mode = (struct fb_videomode *)edid_mode; hdmi->vic = mxc_edid_mode_to_vic(edid_mode); } } @@ -2468,8 +2461,6 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp, if (irq < 0) return -ENODEV; - hdmi->dft_mode_set = false; - /* Setting HDMI default to blank state */ hdmi->blank = FB_BLANK_POWERDOWN; @@ -2565,6 +2556,10 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp, fb_var_to_videomode(&m, &hdmi->fbi->var); dump_fb_videomode(&m); + hdmi->dft_mode_set = false; + /* Save default video mode */ + memcpy(&hdmi->default_mode, &m, sizeof(struct fb_videomode)); + mode = fb_find_nearest_mode(&m, &hdmi->fbi->modelist); if (!mode) { pr_err("%s: could not find mode in modelist\n", __func__); @@ -2573,6 +2568,9 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp, fb_videomode_to_var(&hdmi->fbi->var, mode); + /* update fbi mode */ + hdmi->fbi->mode = (struct fb_videomode *)mode; + /* Default setting HDMI working in HDMI mode*/ hdmi->edid_cfg.hdmi_cap = true; |