diff options
-rw-r--r-- | drivers/gpu/drm/drm_fb_helper.c | 11 |
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 | |||
1191 | create_mode: | 1202 | create_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); |