[PATCH] drm: Prefer noninterlace cmdline mode unless explicitly specified

Daniel Vetter daniel at ffwll.ch
Wed Mar 19 07:17:50 PDT 2014


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


More information about the dri-devel mailing list