In case no connector is found while creating the fbdev, gives the
possibility to specify the default fbdev size by firstly checking if the
command line is defining a preferred mode. Else go into fallback and set
1024x768 fbdev size as it was already done.

Cc: Tomi Valkeinen <tomi.valkeinen at ti.com>
Signed-off-by: Vincent Abriou <vincent.abriou at st.com>
---
Patch v2:
 add a break in the connector for loop when a first cmdline mode is found

 drivers/gpu/drm/drm_fb_helper.c | 34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 0ab6aaa..b38285f 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -1526,6 +1526,7 @@ static int drm_fb_helper_single_fb_probe(struct 
drm_fb_helper *fb_helper,
        }

        crtc_count = 0;
+
        for (i = 0; i < fb_helper->crtc_count; i++) {
                struct drm_display_mode *desired_mode;
                struct drm_mode_set *mode_set;
@@ -1570,11 +1571,34 @@ static int drm_fb_helper_single_fb_probe(struct 
drm_fb_helper *fb_helper,
        }

        if (crtc_count == 0 || sizes.fb_width == -1 || sizes.fb_height == -1) {
-               /* hmm everyone went away - assume VGA cable just fell out
-                  and will come back later. */
-               DRM_INFO("Cannot find any crtc or sizes - going 1024x768\n");
-               sizes.fb_width = sizes.surface_width = 1024;
-               sizes.fb_height = sizes.surface_height = 768;
+               struct drm_display_mode *mode = NULL;
+               /* hmm everyone went away - assume cable just fell out and will
+                * come back later.
+                * Get fb size from command line mode (if existing) else fb size
+                * is set to 1024x768
+                */
+               for (i = 0; i < fb_helper->connector_count; i++) {
+                       struct drm_fb_helper_connector *fb_helper_conn;
+
+                       fb_helper_conn = fb_helper->connector_info[i];
+                       mode = drm_pick_cmdline_mode(fb_helper_conn);
+                       if (mode)
+                               break;
+               }
+
+               if (mode) {
+                       sizes.fb_width = mode->hdisplay;
+                       sizes.fb_height = mode->vdisplay;
+                       DRM_INFO("Cannot find any crtc or sizes - use cmdline 
%dx%d\n",
+                                sizes.fb_width, sizes.fb_height);
+               } else {
+                       sizes.fb_width = 1024;
+                       sizes.fb_height = 768;
+                       DRM_INFO("Cannot find any crtc or sizes - going 
1024x768\n");
+               }
+
+               sizes.surface_width = sizes.fb_width;
+               sizes.surface_height = sizes.fb_height;
        }

        /* push down into drivers */
-- 
2.7.4

Reply via email to