When picking a mode, first look for modes that have been specified
by the user on the kernel's command line. Only if that fails, use
the existing heuristic of picking a nearby mode from it's various
parameters.

Signed-off-by: Thomas Zimmermann <[email protected]>
---
 drivers/gpu/drm/drm_client_modeset.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/drm_client_modeset.c 
b/drivers/gpu/drm/drm_client_modeset.c
index e6346a67cd98..b777faa87f04 100644
--- a/drivers/gpu/drm/drm_client_modeset.c
+++ b/drivers/gpu/drm/drm_client_modeset.c
@@ -165,6 +165,17 @@ drm_connector_pick_cmdline_mode(struct drm_connector 
*connector)
        struct drm_display_mode *mode;
        bool prefer_non_interlace;
 
+       /*
+        * Find a user-defined mode. If the user gave us a valid
+        * mode on the kernel command line, it will show up in this
+        * list.
+        */
+
+       list_for_each_entry(mode, &connector->modes, head) {
+               if (mode->type & DRM_MODE_TYPE_USERDEF)
+                       return mode;
+       }
+
        cmdline_mode = &connector->cmdline_mode;
        if (cmdline_mode->specified == false)
                return NULL;
-- 
2.36.0

Reply via email to