aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_fb_helper.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 9795c0636da2..04d3fd3658f3 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -1159,6 +1159,7 @@ struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_connector *f
1159{ 1159{
1160 struct drm_cmdline_mode *cmdline_mode; 1160 struct drm_cmdline_mode *cmdline_mode;
1161 struct drm_display_mode *mode = NULL; 1161 struct drm_display_mode *mode = NULL;
1162 bool prefer_non_interlace;
1162 1163
1163 cmdline_mode = &fb_helper_conn->cmdline_mode; 1164 cmdline_mode = &fb_helper_conn->cmdline_mode;
1164 if (cmdline_mode->specified == false) 1165 if (cmdline_mode->specified == false)
@@ -1170,6 +1171,8 @@ struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_connector *f
1170 if (cmdline_mode->rb || cmdline_mode->margins) 1171 if (cmdline_mode->rb || cmdline_mode->margins)
1171 goto create_mode; 1172 goto create_mode;
1172 1173
1174 prefer_non_interlace = !cmdline_mode->interlace;
1175 again:
1173 list_for_each_entry(mode, &fb_helper_conn->connector->modes, head) { 1176 list_for_each_entry(mode, &fb_helper_conn->connector->modes, head) {
1174 /* check width/height */ 1177 /* check width/height */
1175 if (mode->hdisplay != cmdline_mode->xres || 1178 if (mode->hdisplay != cmdline_mode->xres ||
@@ -1184,10 +1187,18 @@ struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_connector *f
1184 if (cmdline_mode->interlace) { 1187 if (cmdline_mode->interlace) {
1185 if (!(mode->flags & DRM_MODE_FLAG_INTERLACE)) 1188 if (!(mode->flags & DRM_MODE_FLAG_INTERLACE))
1186 continue; 1189 continue;
1190 } else if (prefer_non_interlace) {
1191 if (mode->flags & DRM_MODE_FLAG_INTERLACE)
1192 continue;
1187 } 1193 }
1188 return mode; 1194 return mode;
1189 } 1195 }
1190 1196
1197 if (prefer_non_interlace) {
1198 prefer_non_interlace = false;
1199 goto again;
1200 }
1201
1191create_mode: 1202create_mode:
1192 mode = drm_mode_create_from_cmdline_mode(fb_helper_conn->connector->dev, 1203 mode = drm_mode_create_from_cmdline_mode(fb_helper_conn->connector->dev,
1193 cmdline_mode); 1204 cmdline_mode);