aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_edid.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index bad2f11aa224..c6366e90041e 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1039,6 +1039,19 @@ drm_dmt_modes_for_range(struct drm_connector *connector, struct edid *edid,
1039 return modes; 1039 return modes;
1040} 1040}
1041 1041
1042/* fix up 1366x768 mode from 1368x768;
1043 * GFT/CVT can't express 1366 width which isn't dividable by 8
1044 */
1045static void fixup_mode_1366x768(struct drm_display_mode *mode)
1046{
1047 if (mode->hdisplay == 1368 && mode->vdisplay == 768) {
1048 mode->hdisplay = 1366;
1049 mode->hsync_start--;
1050 mode->hsync_end--;
1051 drm_mode_set_name(mode);
1052 }
1053}
1054
1042static int 1055static int
1043drm_gtf_modes_for_range(struct drm_connector *connector, struct edid *edid, 1056drm_gtf_modes_for_range(struct drm_connector *connector, struct edid *edid,
1044 struct detailed_timing *timing) 1057 struct detailed_timing *timing)
@@ -1053,6 +1066,7 @@ drm_gtf_modes_for_range(struct drm_connector *connector, struct edid *edid,
1053 if (!newmode) 1066 if (!newmode)
1054 return modes; 1067 return modes;
1055 1068
1069 fixup_mode_1366x768(newmode);
1056 if (!mode_in_range(newmode, edid, timing)) { 1070 if (!mode_in_range(newmode, edid, timing)) {
1057 drm_mode_destroy(dev, newmode); 1071 drm_mode_destroy(dev, newmode);
1058 continue; 1072 continue;
@@ -1080,6 +1094,7 @@ drm_cvt_modes_for_range(struct drm_connector *connector, struct edid *edid,
1080 if (!newmode) 1094 if (!newmode)
1081 return modes; 1095 return modes;
1082 1096
1097 fixup_mode_1366x768(newmode);
1083 if (!mode_in_range(newmode, edid, timing)) { 1098 if (!mode_in_range(newmode, edid, timing)) {
1084 drm_mode_destroy(dev, newmode); 1099 drm_mode_destroy(dev, newmode);
1085 continue; 1100 continue;