@@ -1522,6 +1522,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;
@@ -1566,11 +1567,32 @@ 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) {
+ 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 */
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@ti.com> Signed-off-by: Vincent Abriou <vincent.abriou@st.com> --- drivers/gpu/drm/drm_fb_helper.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-)