]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00170800 mxc hdmi add more video mode to default modelist
authorSandor Yu <R01008@freescale.com>
Wed, 21 Dec 2011 13:48:02 +0000 (21:48 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:33:41 +0000 (08:33 +0200)
Add all non-interlaced CEA mode to default modelist
Add XGA and SXGA video mode to default modelist

Signed-off-by: Sandor Yu <R01008@freescale.com>
drivers/video/mxc_hdmi.c

index 0bdf6b0469ee3dba77da079c0f0e84a6596c978a..63d3cba82509f9b85cdf10524b9ed39365cf1f27 100644 (file)
@@ -96,6 +96,19 @@ static const struct fb_videomode vga_mode = {
        FB_VMODE_NONINTERLACED | FB_VMODE_ASPECT_4_3, 0,
 };
 
+static const struct fb_videomode xga_mode = {
+       /* 13 1024x768-60 VESA */
+       NULL, 60, 1024, 768, 15384, 160, 24, 29, 3, 136, 6,
+       0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA
+};
+
+static const struct fb_videomode sxga_mode = {
+       /* 20 1280x1024-60 VESA */
+       NULL, 60, 1280, 1024, 9259, 248, 48, 38, 1, 112, 3,
+       FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+       FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA
+};
+
 enum hdmi_datamap {
        RGB444_8B = 0x01,
        RGB444_10B = 0x03,
@@ -1553,11 +1566,13 @@ static void  mxc_hdmi_default_modelist(struct mxc_hdmi *hdmi)
 {
        u32 i;
        const struct fb_videomode *mode;
+       struct fb_videomode m;
 
        dev_dbg(&hdmi->pdev->dev, "%s\n", __func__);
 
        /* If not EDID data read, set up default modelist  */
        dev_info(&hdmi->pdev->dev, "No modes read from edid\n");
+       dev_info(&hdmi->pdev->dev, "create default modelist\n");
 
        /* Set the default mode only once. */
        if (!hdmi->dft_mode_set) {
@@ -1577,17 +1592,30 @@ static void  mxc_hdmi_default_modelist(struct mxc_hdmi *hdmi)
 
        fb_destroy_modelist(&hdmi->fbi->modelist);
 
+       /*Add all no interlaced CEA mode to default modelist */
        for (i = 0; i < ARRAY_SIZE(mxc_cea_mode); i++) {
                mode = &mxc_cea_mode[i];
-               if ((mode->xres == hdmi->fbi->var.xres) &&
-                   (mode->yres == hdmi->fbi->var.yres) &&
-                   !(mode->vmode & FB_VMODE_INTERLACED))
+               if (!(mode->vmode & FB_VMODE_INTERLACED) && (mode->xres != 0))
                        fb_add_videomode(mode, &hdmi->fbi->modelist);
        }
 
+       /*Add XGA and SXGA to default modelist */
+       fb_add_videomode(&xga_mode, &hdmi->fbi->modelist);
+       fb_add_videomode(&sxga_mode, &hdmi->fbi->modelist);
+
        console_unlock();
 
-       mxc_hdmi_notify_fb(hdmi);
+       fb_var_to_videomode(&m, &hdmi->fbi->var);
+       dump_fb_videomode(&m);
+       mode = fb_find_nearest_mode(&m, &hdmi->fbi->modelist);
+       if (mode) {
+               fb_videomode_to_var(&hdmi->fbi->var, mode);
+               dump_fb_videomode((struct fb_videomode *)mode);
+               dev_warn(&hdmi->pdev->dev,
+                       "Default modelist,the video mode may not support by monitor.\n");
+               mxc_hdmi_notify_fb(hdmi);
+       } else
+               pr_err("%s: could not find mode in default modelist\n", __func__);
 }
 
 static void mxc_hdmi_set_mode_to_vga_dvi(struct mxc_hdmi *hdmi)