drm/fb-helper: pass physical dimensions to fbdev
[sfrench/cifs-2.6.git] / drivers / gpu / drm / drm_fb_helper.c
index 4447a28c6d4721f87e9142756fdd8ce3900f3f0e..1b8f013ffa6503ec960cee3bdb9cb7c3fa78d2bc 100644 (file)
@@ -1882,8 +1882,6 @@ void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helpe
        info->var.xoffset = 0;
        info->var.yoffset = 0;
        info->var.activate = FB_ACTIVATE_NOW;
-       info->var.height = -1;
-       info->var.width = -1;
 
        switch (fb->format->depth) {
        case 8:
@@ -2435,11 +2433,26 @@ out:
  */
 static void drm_setup_crtcs_fb(struct drm_fb_helper *fb_helper)
 {
+       struct fb_info *info = fb_helper->fbdev;
        int i;
 
        for (i = 0; i < fb_helper->crtc_count; i++)
                if (fb_helper->crtc_info[i].mode_set.num_connectors)
                        fb_helper->crtc_info[i].mode_set.fb = fb_helper->fb;
+
+       mutex_lock(&fb_helper->dev->mode_config.mutex);
+       drm_fb_helper_for_each_connector(fb_helper, i) {
+               struct drm_connector *connector =
+                                       fb_helper->connector_info[i]->connector;
+
+               /* use first connected connector for the physical dimensions */
+               if (connector->status == connector_status_connected) {
+                       info->var.width = connector->display_info.width_mm;
+                       info->var.height = connector->display_info.height_mm;
+                       break;
+               }
+       }
+       mutex_unlock(&fb_helper->dev->mode_config.mutex);
 }
 
 /* Note: Drops fb_helper->lock before returning. */