drm/panel: simple: Set appropriate mode type
authorBoris Brezillon <boris.brezillon@free-electrons.com>
Fri, 15 Apr 2016 16:23:33 +0000 (18:23 +0200)
committerThierry Reding <treding@nvidia.com>
Thu, 12 May 2016 09:32:14 +0000 (11:32 +0200)
All modes exposed by simple panels should be tagged as driver defined
modes. Moreover, if a panel supports only one mode, this mode is
obviously the preferred one.

Doing this also fix a problem occurring when a 'video=' parameter is
passed on the kernel command line. In some cases the user provided mode
will be preferred over the simple panel ones, which might result in
unpredictable behavior.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Reviewed-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Tested-by: Nicolas Ferre <nicolas.ferre@atmel.com>
[treding@nvidia.com: reshuffle some code for consistency]
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/panel/panel-simple.c

index 847abee5ea368a67f8fdbf33404bf88898dbdd91..a6d8a5dda4243ede3b1199fc32753de0a188c36f 100644 (file)
@@ -117,6 +117,12 @@ static int panel_simple_get_fixed_modes(struct panel_simple *panel)
                }
 
                drm_display_mode_from_videomode(&vm, mode);
+
+               mode->type |= DRM_MODE_TYPE_DRIVER;
+
+               if (panel->desc->num_modes == 1)
+                       mode->type |= DRM_MODE_TYPE_PREFERRED;
+
                drm_mode_set_name(mode);
 
                drm_mode_probed_add(connector, mode);
@@ -133,6 +139,11 @@ static int panel_simple_get_fixed_modes(struct panel_simple *panel)
                        continue;
                }
 
+               mode->type |= DRM_MODE_TYPE_DRIVER;
+
+               if (panel->desc->num_modes == 1)
+                       mode->type |= DRM_MODE_TYPE_PREFERRED;
+
                drm_mode_set_name(mode);
 
                drm_mode_probed_add(connector, mode);