diff options
author | xinliang.liu <xinliang.liu@linaro.org> | 2015-08-20 10:34:08 +0800 |
---|---|---|
committer | Guodong Xu <guodong.xu@linaro.org> | 2015-09-08 20:40:08 +0800 |
commit | 46ae2655667cba4479d80713709f378f3c458b8e (patch) | |
tree | 90d089334c662f732d9d541b85212073e6004fa8 | |
parent | be08a9b9169c0fe7a3b87843cbfe9ecf9d0fefeb (diff) |
drm: hisilicon: Filter out unsupport modes and reorder modes according to testingworking-hdmi-test-0908-01
1. Filter out DRM_MODE_FLAG_INTERLACE modes.
2. Filter out unsupport pixel clock modes.
3. Support these modes as high priority if exist in EDID:
1920x1200 16:10 Monitor
1920x1080 16:9 TV
1680x1050 16:10 Monitor
1280x1024 5:4 Monitor
1280x720 16:9 TV
800x600 4:3 TV
Signed-off-by: xinliang.liu <xinliang.liu@linaro.org>
Signed-off-by: Guodong.Xu <guodong.xu@linaro.org>
-rw-r--r-- | drivers/gpu/drm/hisilicon/hisi_drm_dsi.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c b/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c index fac1e026ebbd..d0ec2e490417 100644 --- a/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c +++ b/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c @@ -1012,6 +1012,14 @@ static int hisi_drm_connector_mode_valid(struct drm_connector *connector, struct drm_encoder *encoder = &dsi->base.base; struct drm_encoder_slave_funcs *sfuncs = get_slave_funcs(encoder); int ret = MODE_OK; + int vrate; + + if (mode->flags & DRM_MODE_FLAG_INTERLACE) + return MODE_NO_INTERLACE; + + /* pixel clock support range is (1190494208/64, 1190494208)Hz */ + if (mode->clock < 18602 || mode->clock > 1190494) + return MODE_CLOCK_RANGE; if (sfuncs->mode_valid) { ret = sfuncs->mode_valid(encoder, mode); @@ -1019,6 +1027,22 @@ static int hisi_drm_connector_mode_valid(struct drm_connector *connector, return ret; } + /* + * some work well modes which want to add prefer type + * others will clear prefer + */ + vrate = mode->vrefresh = drm_mode_vrefresh(mode); + if ((mode->hdisplay == 1920 && mode->vdisplay == 1200 && vrate == 59) || + (mode->hdisplay == 1920 && mode->vdisplay == 1080) || + (mode->hdisplay == 1680 && mode->vdisplay == 1050 && vrate == 59) || + (mode->hdisplay == 1280 && mode->vdisplay == 1024 && vrate == 60) || + (mode->hdisplay == 1280 && mode->vdisplay == 720 && + (vrate == 60 || vrate == 59 || vrate == 50)) || + (mode->hdisplay == 800 && mode->vdisplay == 600 && vrate == 60)) + mode->type |= DRM_MODE_TYPE_PREFERRED; + else + mode->type &= ~DRM_MODE_TYPE_PREFERRED; + DRM_DEBUG_DRIVER("exit success. ret=%d\n", ret); return ret; } |