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
> ---
>  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