diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index ee3e76dd234d83950397f93cda079405f6aa83b9..1950990735b0446398cd17d30b45d8fa0fcba0c7 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -3122,9 +3122,6 @@ drm_output_set_mode(struct weston_output *base,
 	output->base.native_mode = output->base.current_mode;
 	output->base.native_scale = output->base.current_scale;
 
-	output->base.mm_width = output->connector->mmWidth;
-	output->base.mm_height = output->connector->mmHeight;
-
 	return 0;
 }
 
@@ -3188,12 +3185,6 @@ drm_output_enable(struct weston_output *base)
 	output->base.gamma_size = output->original_crtc->gamma_size;
 	output->base.set_gamma = drm_output_set_gamma;
 
-	output->base.subpixel = drm_subpixel_to_wayland(output->connector->subpixel);
-
-	if (output->connector->connector_type == DRM_MODE_CONNECTOR_LVDS ||
-	    output->connector->connector_type == DRM_MODE_CONNECTOR_eDP)
-		output->base.connection_internal = true;
-
 	weston_plane_init(&output->cursor_plane, b->compositor,
 			  INT32_MIN, INT32_MIN);
 	weston_plane_init(&output->scanout_plane, b->compositor, 0, 0);
@@ -3393,6 +3384,15 @@ create_output_for_connector(struct drm_backend *b,
 	output->base.make = (char *)make;
 	output->base.model = (char *)model;
 	output->base.serial_number = (char *)serial_number;
+	output->base.subpixel = drm_subpixel_to_wayland(output->connector->subpixel);
+
+	if (output->connector->connector_type == DRM_MODE_CONNECTOR_LVDS ||
+	    output->connector->connector_type == DRM_MODE_CONNECTOR_eDP)
+		output->base.connection_internal = true;
+
+	output->base.mm_width = output->connector->mmWidth;
+	output->base.mm_height = output->connector->mmHeight;
+
 	drmModeFreeObjectProperties(props);
 
 	for (i = 0; i < output->connector->count_modes; i++) {