[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