From: Li Peng <[email protected]>

There are many hard coded modelines for lvds and dsi output, put
them in a mode table.

Change-Id: I24475d0fdbc4acb14aad3814ed5efae7a5b995c0
Signed-off-by: Li Peng <[email protected]>
Signed-off-by: Justin Dou <[email protected]>
---
 drivers/staging/mrst/drv/psb_intel_dsi.c  |  168 +++++++---------------------
 drivers/staging/mrst/drv/psb_intel_lvds.c |  136 ++++++-----------------
 2 files changed, 77 insertions(+), 227 deletions(-)

diff --git a/drivers/staging/mrst/drv/psb_intel_dsi.c 
b/drivers/staging/mrst/drv/psb_intel_dsi.c
index 5a90440..860468b 100644
--- a/drivers/staging/mrst/drv/psb_intel_dsi.c
+++ b/drivers/staging/mrst/drv/psb_intel_dsi.c
@@ -1944,13 +1944,45 @@ static const struct drm_connector_funcs 
mrst_dsi_connector_funcs = {
        .destroy = psb_intel_lvds_destroy,
 };
 
+static struct drm_display_mode dsi_configuration_modes[] = {
+       /* LGE 480x1024 tentative timings */
+       { DRM_MODE("480x1024", DRM_MODE_TYPE_DRIVER, 33264, 480, 499,
+                  506, 517, 0, 1024, 1039, 1041, 1047, 0, 0) },
+       /* copy from SV - hard coded fixed mode for DSI TPO 3.8" panel */
+       { DRM_MODE("864x480",  DRM_MODE_TYPE_DRIVER, 33264, 864, 873,
+                  876, 887, 0, 480, 487, 490, 499, 0, 0) },
+       /* hard coded fixed mode for DSI TPO TD043MTEA2 LCD panel */
+       { DRM_MODE("800x480",  DRM_MODE_TYPE_DRIVER, 33264, 800, 836,
+                  846, 1056, 0, 480, 489, 491, 525, 0, 0) },
+       /* hard coded fixed mode for LVDS 800x480 */
+       { DRM_MODE("800x480",  DRM_MODE_TYPE_DRIVER, 30994, 800, 801,
+                  802, 1024, 0, 480, 481, 482, 525, 0, 0) },
+       /*FIXME jliu7 remove it later, jliu7 modify it according to the spec*/
+       /* hard coded fixed mode for Samsung 480wsvga LVDS 1024x...@75 */
+       { DRM_MODE("1024x600", DRM_MODE_TYPE_DRIVER, 53990, 1024, 1072,
+                  1104, 1184, 0, 600, 603, 604, 608, 0, 0) },
+       /*FIXME jliu7 remove it, it is copied from SBIOS */
+       /* hard coded fixed mode for Samsung 480wsvga LVDS 1024x...@75 */
+       { DRM_MODE("1024x600", DRM_MODE_TYPE_DRIVER, 53990, 1024, 1104,
+                  1136, 1184, 0, 600, 603, 604, 608, 0, 0) },
+       /* hard coded fixed mode for Sharp wsvga LVDS 1024x600 */
+       { DRM_MODE("1024x600", DRM_MODE_TYPE_DRIVER, 48885, 1024, 1124,
+                  1204, 1312, 0, 600, 607, 610, 621, 0, 0) },
+       /* hard coded fixed mode for LVDS 1024x768 */
+       { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
+                  1184, 1344, 0, 768, 771, 777, 806, 0, 0) },
+       /* hard coded fixed mode for LVDS 1366x768 */
+       { DRM_MODE("1366x768", DRM_MODE_TYPE_DRIVER, 77500, 1366, 1430,
+                  1558, 1664, 0, 768, 769, 770, 776, 0, 0) },
+};
+
 /** Returns the panel fixed mode from configuration. */
 /** FIXME JLIU7 need to revist it. */
-struct drm_display_mode *mrst_dsi_get_configuration_mode(struct drm_device 
*dev)
+static struct drm_display_mode *
+mrst_dsi_get_configuration_mode(struct drm_device *dev)
 {
-       struct drm_display_mode *mode;
-       struct drm_psb_private *dev_priv =
-               (struct drm_psb_private *) dev->dev_private;
+       struct drm_display_mode *mode = NULL;
+       struct drm_psb_private *dev_priv = (struct drm_psb_private *) 
dev->dev_private;
        u8 panel_index = dev_priv->gct_data.bpi;
        u8 panel_type = dev_priv->gct_data.pt;
        struct mrst_timing_info *ti = &dev_priv->gct_data.DTD;
@@ -1958,10 +1990,6 @@ struct drm_display_mode 
*mrst_dsi_get_configuration_mode(struct drm_device *dev)
 
        PSB_DEBUG_ENTRY("\n");
 
-       mode = kzalloc(sizeof(*mode), GFP_KERNEL);
-       if (!mode)
-               return NULL;
-
        if (dev_priv->vbt_data.Size != 0x00) /*if non-zero, vbt is present*/
                if ((1<<panel_index) & panel_type) /* if non-zero,*/
                        use_gct = true;                 /*then mipi panel.*/
@@ -1969,6 +1997,10 @@ struct drm_display_mode 
*mrst_dsi_get_configuration_mode(struct drm_device *dev)
        if (use_gct) {
                PSB_DEBUG_ENTRY("gct find MIPI panel. \n");
 
+               mode = kzalloc(sizeof(*mode), GFP_KERNEL);
+               if (!mode)
+                       return NULL;
+
                mode->hdisplay = (ti->hactive_hi << 8) | ti->hactive_lo;
                mode->vdisplay = (ti->vactive_hi << 8) | ti->vactive_lo;
                mode->hsync_start = mode->hdisplay + \
@@ -1998,124 +2030,8 @@ struct drm_display_mode 
*mrst_dsi_get_configuration_mode(struct drm_device *dev)
                PSB_DEBUG_ENTRY("VSE is %d\n", mode->vsync_end);
                PSB_DEBUG_ENTRY("vtotal is %d\n", mode->vtotal);
                PSB_DEBUG_ENTRY("clock is %d\n", mode->clock);
-       } else {
-
-#if 0 /* LGE 480x1024 tentative timings */
-       mode->hdisplay = 480;
-       mode->vdisplay = 1024;
-       mode->hsync_start = 499;
-       mode->hsync_end = 506;
-       mode->htotal = 517;
-       mode->vsync_start = 1039;
-       mode->vsync_end = 1041;
-       mode->vtotal = 1047;
-       mode->clock = 33264;
-#endif
-#if 1 /*FIXME jliu7 remove it later */
-       /* copy from SV - hard coded fixed mode for
-        * DSI TPO 3.8" panel */
-       mode->hdisplay = 864;
-       mode->vdisplay = 480;
-       mode->hsync_start = 873;
-       mode->hsync_end = 876;
-       mode->htotal = 887;
-       mode->vsync_start = 487;
-       mode->vsync_end = 490;
-       mode->vtotal = 499;
-       mode->clock = 33264;
-#endif  /*FIXME jliu7 remove it later */
-
-#if 0 /*FIXME jliu7 remove it later */
-           /* hard coded fixed mode for DSI TPO TD043MTEA2 LCD panel */
-       mode->hdisplay = 800;
-       mode->vdisplay = 480;
-       mode->hsync_start = 836;
-       mode->hsync_end = 846;
-       mode->htotal = 1056;
-       mode->vsync_start = 489;
-       mode->vsync_end = 491;
-       mode->vtotal = 525;
-       mode->clock = 33264;
-#endif /*FIXME jliu7 remove it later */
-
-#if 0 /*FIXME jliu7 remove it later */
-           /* hard coded fixed mode for LVDS 800x480 */
-       mode->hdisplay = 800;
-       mode->vdisplay = 480;
-       mode->hsync_start = 801;
-       mode->hsync_end = 802;
-       mode->htotal = 1024;
-       mode->vsync_start = 481;
-       mode->vsync_end = 482;
-       mode->vtotal = 525;
-       mode->clock = 30994;
-#endif /*FIXME jliu7 remove it later */
-
-#if 0  /*FIXME jliu7 remove it later, jliu7 modify it according to the spec*/
-       /* hard coded fixed mode for Samsung 480wsvga LVDS 1024x...@75 */
-       mode->hdisplay = 1024;
-       mode->vdisplay = 600;
-       mode->hsync_start = 1072;
-       mode->hsync_end = 1104;
-       mode->htotal = 1184;
-       mode->vsync_start = 603;
-       mode->vsync_end = 604;
-       mode->vtotal = 608;
-       mode->clock = 53990;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 0          /*FIXME jliu7 remove it, it is copied from SBIOS */
-       /* hard coded fixed mode for Samsung 480wsvga LVDS 1024x...@75 */
-       mode->hdisplay = 1024;
-       mode->vdisplay = 600;
-       mode->hsync_start = 1104;
-       mode->hsync_end = 1136;
-       mode->htotal = 1184;
-       mode->vsync_start = 603;
-       mode->vsync_end = 604;
-       mode->vtotal = 608;
-       mode->clock = 53990;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 0                          /*FIXME jliu7 remove it later */
-       /* hard coded fixed mode for Sharp wsvga LVDS 1024x600 */
-       mode->hdisplay = 1024;
-       mode->vdisplay = 600;
-       mode->hsync_start = 1124;
-       mode->hsync_end = 1204;
-       mode->htotal = 1312;
-       mode->vsync_start = 607;
-       mode->vsync_end = 610;
-       mode->vtotal = 621;
-       mode->clock = 48885;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 0                          /*FIXME jliu7 remove it later */
-       /* hard coded fixed mode for LVDS 1024x768 */
-       mode->hdisplay = 1024;
-       mode->vdisplay = 768;
-       mode->hsync_start = 1048;
-       mode->hsync_end = 1184;
-       mode->htotal = 1344;
-       mode->vsync_start = 771;
-       mode->vsync_end = 777;
-       mode->vtotal = 806;
-       mode->clock = 65000;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 0                          /*FIXME jliu7 remove it later */
-       /* hard coded fixed mode for LVDS 1366x768 */
-       mode->hdisplay = 1366;
-       mode->vdisplay = 768;
-       mode->hsync_start = 1430;
-       mode->hsync_end = 1558;
-       mode->htotal = 1664;
-       mode->vsync_start = 769;
-       mode->vsync_end = 770;
-       mode->vtotal = 776;
-       mode->clock = 77500;
-#endif                         /*FIXME jliu7 remove it later */
-       }
+       } else
+               mode = drm_mode_duplicate(dev, &dsi_configuration_modes[1]);
 
        dev_priv->pixelClock = mode->clock; /*KHz*/
        dev_priv->HsyncWidth = mode->hsync_end - mode->hsync_start;
diff --git a/drivers/staging/mrst/drv/psb_intel_lvds.c 
b/drivers/staging/mrst/drv/psb_intel_lvds.c
index 821fdbc..5b5a560 100644
--- a/drivers/staging/mrst/drv/psb_intel_lvds.c
+++ b/drivers/staging/mrst/drv/psb_intel_lvds.c
@@ -1109,21 +1109,45 @@ static const struct drm_encoder_helper_funcs 
mrst_lvds_helper_funcs = {
        .commit = psb_intel_lvds_commit,
 };
 
+static struct drm_display_mode lvds_configuration_modes[] = {
+       /* hard coded fixed mode for TPO LTPS LPJ040K001A */
+       { DRM_MODE("800x480",  DRM_MODE_TYPE_DRIVER, 33264, 800, 836,
+                  846, 1056, 0, 480, 489, 491, 525, 0, 0) },
+       /* hard coded fixed mode for LVDS 800x480 */
+       { DRM_MODE("800x480",  DRM_MODE_TYPE_DRIVER, 30994, 800, 801,
+                  802, 1024, 0, 480, 481, 482, 525, 0, 0) },
+       /*FIXME jliu7 remove it later, jliu7 modify it according to the spec*/
+       /* hard coded fixed mode for Samsung 480wsvga LVDS 1024x...@75 */
+       { DRM_MODE("1024x600", DRM_MODE_TYPE_DRIVER, 53990, 1024, 1072,
+                  1104, 1184, 0, 600, 603, 604, 608, 0, 0) },
+       /*FIXME jliu7 remove it, it is copied from SBIOS */
+       /* hard coded fixed mode for Samsung 480wsvga LVDS 1024x...@75 */
+       { DRM_MODE("1024x600", DRM_MODE_TYPE_DRIVER, 53990, 1024, 1104,
+                  1136, 1184, 0, 600, 603, 604, 608, 0, 0) },
+       /* hard coded fixed mode for Sharp wsvga LVDS 1024x600 */
+       { DRM_MODE("1024x600", DRM_MODE_TYPE_DRIVER, 48885, 1024, 1124,
+                  1204, 1312, 0, 600, 607, 610, 621, 0, 0) },
+       /* hard coded fixed mode for LVDS 1024x768 */
+       { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
+                  1184, 1344, 0, 768, 771, 777, 806, 0, 0) },
+       /* hard coded fixed mode for LVDS 1366x768 */
+       { DRM_MODE("1366x768", DRM_MODE_TYPE_DRIVER, 77500, 1366, 1430,
+                  1558, 1664, 0, 768, 769, 770, 776, 0, 0) },
+};
+
 /** Returns the panel fixed mode from configuration. */
 /** FIXME JLIU7 need to revist it. */
-struct drm_display_mode *mrst_lvds_get_configuration_mode(struct drm_device
-                                                         *dev)
+static struct drm_display_mode *
+mrst_lvds_get_configuration_mode(struct drm_device *dev)
 {
-       struct drm_display_mode *mode;
-       struct drm_psb_private *dev_priv =
-               (struct drm_psb_private *) dev->dev_private;
+       struct drm_display_mode *mode = NULL;
+       struct drm_psb_private *dev_priv = (struct drm_psb_private *) 
dev->dev_private;
        struct mrst_timing_info *ti = &dev_priv->gct_data.DTD;
 
-       mode = kzalloc(sizeof(*mode), GFP_KERNEL);
-       if (!mode)
-               return NULL;
-
        if (dev_priv->vbt_data.Size != 0x00) { /*if non-zero, then use vbt*/
+               mode = kzalloc(sizeof(*mode), GFP_KERNEL);
+               if (!mode)
+                       return NULL;
 
                mode->hdisplay = (ti->hactive_hi << 8) | ti->hactive_lo;
                mode->vdisplay = (ti->vactive_hi << 8) | ti->vactive_lo;
@@ -1155,99 +1179,9 @@ struct drm_display_mode 
*mrst_lvds_get_configuration_mode(struct drm_device
                printk(KERN_INFO "vtotal is %d\n", mode->vtotal);
                printk(KERN_INFO "clock is %d\n", mode->clock);
 #endif
-       } else {
+       } else
+               mode = drm_mode_duplicate(dev, &lvds_configuration_modes[2]);
 
-#if 0                          /*FIXME jliu7 remove it later */
-       /* hard coded fixed mode for TPO LTPS LPJ040K001A */
-       mode->hdisplay = 800;
-       mode->vdisplay = 480;
-       mode->hsync_start = 836;
-       mode->hsync_end = 846;
-       mode->htotal = 1056;
-       mode->vsync_start = 489;
-       mode->vsync_end = 491;
-       mode->vtotal = 525;
-       mode->clock = 33264;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 0                          /*FIXME jliu7 remove it later */
-       /* hard coded fixed mode for LVDS 800x480 */
-       mode->hdisplay = 800;
-       mode->vdisplay = 480;
-       mode->hsync_start = 801;
-       mode->hsync_end = 802;
-       mode->htotal = 1024;
-       mode->vsync_start = 481;
-       mode->vsync_end = 482;
-       mode->vtotal = 525;
-       mode->clock = 30994;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 1  /*FIXME jliu7 remove it later, jliu7 modify it according to the spec*/
-       /* hard coded fixed mode for Samsung 480wsvga LVDS 1024x...@75 */
-       mode->hdisplay = 1024;
-       mode->vdisplay = 600;
-       mode->hsync_start = 1072;
-       mode->hsync_end = 1104;
-       mode->htotal = 1184;
-       mode->vsync_start = 603;
-       mode->vsync_end = 604;
-       mode->vtotal = 608;
-       mode->clock = 53990;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 0  /*FIXME jliu7 remove it, it is copied from SBIOS */
-       /* hard coded fixed mode for Samsung 480wsvga LVDS 1024x...@75 */
-       mode->hdisplay = 1024;
-       mode->vdisplay = 600;
-       mode->hsync_start = 1104;
-       mode->hsync_end = 1136;
-       mode->htotal = 1184;
-       mode->vsync_start = 603;
-       mode->vsync_end = 604;
-       mode->vtotal = 608;
-       mode->clock = 53990;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 0                          /*FIXME jliu7 remove it later */
-       /* hard coded fixed mode for Sharp wsvga LVDS 1024x600 */
-       mode->hdisplay = 1024;
-       mode->vdisplay = 600;
-       mode->hsync_start = 1124;
-       mode->hsync_end = 1204;
-       mode->htotal = 1312;
-       mode->vsync_start = 607;
-       mode->vsync_end = 610;
-       mode->vtotal = 621;
-       mode->clock = 48885;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 0                          /*FIXME jliu7 remove it later */
-       /* hard coded fixed mode for LVDS 1024x768 */
-       mode->hdisplay = 1024;
-       mode->vdisplay = 768;
-       mode->hsync_start = 1048;
-       mode->hsync_end = 1184;
-       mode->htotal = 1344;
-       mode->vsync_start = 771;
-       mode->vsync_end = 777;
-       mode->vtotal = 806;
-       mode->clock = 65000;
-#endif                         /*FIXME jliu7 remove it later */
-
-#if 0                          /*FIXME jliu7 remove it later */
-       /* hard coded fixed mode for LVDS 1366x768 */
-       mode->hdisplay = 1366;
-       mode->vdisplay = 768;
-       mode->hsync_start = 1430;
-       mode->hsync_end = 1558;
-       mode->htotal = 1664;
-       mode->vsync_start = 769;
-       mode->vsync_end = 770;
-       mode->vtotal = 776;
-       mode->clock = 77500;
-#endif                         /*FIXME jliu7 remove it later */
-       }
        drm_mode_set_name(mode);
        drm_mode_set_crtcinfo(mode, 0);
 
-- 
1.7.1

_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to