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 at suse.de>
> 
> Yeah, makes sense. Do you have some bz or something for reference?
> 
> Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> 
> Cheers, Daniel

Dave, could you check this patch for 3.15?  I can resend if needed.


thanks,

Takashi


> > ---
> >  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 at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/dri-devel
> 
> -- 
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
> 

Reply via email to