|
@@ -1108,6 +1108,22 @@ int vmw_kms_present(struct vmw_private *dev_priv,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+vmw_kms_create_hotplug_mode_update_property(struct vmw_private *dev_priv)
|
|
|
+{
|
|
|
+ if (dev_priv->hotplug_mode_update_property)
|
|
|
+ return;
|
|
|
+
|
|
|
+ dev_priv->hotplug_mode_update_property =
|
|
|
+ drm_property_create_range(dev_priv->dev,
|
|
|
+ DRM_MODE_PROP_IMMUTABLE,
|
|
|
+ "hotplug_mode_update", 0, 1);
|
|
|
+
|
|
|
+ if (!dev_priv->hotplug_mode_update_property)
|
|
|
+ return;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
int vmw_kms_init(struct vmw_private *dev_priv)
|
|
|
{
|
|
|
struct drm_device *dev = dev_priv->dev;
|
|
@@ -1120,6 +1136,9 @@ int vmw_kms_init(struct vmw_private *dev_priv)
|
|
|
dev->mode_config.max_width = dev_priv->texture_max_width;
|
|
|
dev->mode_config.max_height = dev_priv->texture_max_height;
|
|
|
|
|
|
+ drm_mode_create_suggested_offset_properties(dev);
|
|
|
+ vmw_kms_create_hotplug_mode_update_property(dev_priv);
|
|
|
+
|
|
|
ret = vmw_kms_stdu_init_display(dev_priv);
|
|
|
if (ret) {
|
|
|
ret = vmw_kms_sou_init_display(dev_priv);
|
|
@@ -1359,15 +1378,28 @@ static int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
|
|
|
du->pref_active = true;
|
|
|
du->gui_x = rects[du->unit].x;
|
|
|
du->gui_y = rects[du->unit].y;
|
|
|
+ drm_object_property_set_value
|
|
|
+ (&con->base, dev->mode_config.suggested_x_property,
|
|
|
+ du->gui_x);
|
|
|
+ drm_object_property_set_value
|
|
|
+ (&con->base, dev->mode_config.suggested_y_property,
|
|
|
+ du->gui_y);
|
|
|
} else {
|
|
|
du->pref_width = 800;
|
|
|
du->pref_height = 600;
|
|
|
du->pref_active = false;
|
|
|
+ drm_object_property_set_value
|
|
|
+ (&con->base, dev->mode_config.suggested_x_property,
|
|
|
+ 0);
|
|
|
+ drm_object_property_set_value
|
|
|
+ (&con->base, dev->mode_config.suggested_y_property,
|
|
|
+ 0);
|
|
|
}
|
|
|
con->status = vmw_du_connector_detect(con, true);
|
|
|
}
|
|
|
|
|
|
mutex_unlock(&dev->mode_config.mutex);
|
|
|
+ drm_sysfs_hotplug_event(dev);
|
|
|
|
|
|
return 0;
|
|
|
}
|