drm/client: Look for command-line modes first
authorThomas Zimmermann <tzimmermann@suse.de>
Wed, 11 May 2022 18:31:24 +0000 (20:31 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 16 May 2022 11:43:21 +0000 (13:43 +0200)
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 <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20220511183125.14294-3-tzimmermann@suse.de
drivers/gpu/drm/drm_client_modeset.c

index e6346a67cd981df97be1a6eb091fc71052552afb..b777faa87f043d5b34ba806429c6d692dc4baf7e 100644 (file)
@@ -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;