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
