At Wed, 19 Mar 2014 15:17:50 +0100, Daniel Vetter wrote: > > 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? https://bugzilla.novell.com/show_bug.cgi?id=853350 A reporter hits a problem with an LCD monitor connected to VGA. 1024x768i is broken but other modes couldn't be chosen. Takashi > > 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