On Wed, Mar 19, 2014 at 02:53:13PM +0100, Takashi Iwai wrote: > Currently drm_pick_cmdline_mode() doesn't care about the interlace > when the given mode line has no "i" suffix. That is, when there are > multiple entries for the same resolution, an interlace mode might be > picked up just depending on the assigned order, and there is no way to > exclude it. > > This patch changes the logic for the mode selection, to prefer the > noninterlace mode unless the interlace mode is explicitly given. > When no matching mode is found, it still tries the interlace mode as > fallback. > > Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> Yeah, makes sense. Do you have some bz or something for reference? Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> Cheers, Daniel > --- > drivers/gpu/drm/drm_fb_helper.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c > index 98a03639b413..0a4b0a24359f 100644 > --- a/drivers/gpu/drm/drm_fb_helper.c > +++ b/drivers/gpu/drm/drm_fb_helper.c > @@ -1162,6 +1162,7 @@ static struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_conne > { > struct drm_cmdline_mode *cmdline_mode; > struct drm_display_mode *mode = NULL; > + bool prefer_non_interlace; > > cmdline_mode = &fb_helper_conn->cmdline_mode; > if (cmdline_mode->specified == false) > @@ -1173,6 +1174,8 @@ static struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_conne > if (cmdline_mode->rb || cmdline_mode->margins) > goto create_mode; > > + prefer_non_interlace = !cmdline_mode->interlace; > + again: > list_for_each_entry(mode, &fb_helper_conn->connector->modes, head) { > /* check width/height */ > if (mode->hdisplay != cmdline_mode->xres || > @@ -1187,10 +1190,18 @@ static struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_conne > if (cmdline_mode->interlace) { > if (!(mode->flags & DRM_MODE_FLAG_INTERLACE)) > continue; > + } else if (prefer_non_interlace) { > + if (mode->flags & DRM_MODE_FLAG_INTERLACE) > + continue; > } > return mode; > } > > + if (prefer_non_interlace) { > + prefer_non_interlace = false; > + goto again; > + } > + > create_mode: > mode = drm_mode_create_from_cmdline_mode(fb_helper_conn->connector->dev, > cmdline_mode); > -- > 1.9.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel