Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 578e609a authored by Thomas Hellstrom's avatar Thomas Hellstrom
Browse files

drm/vmwgfx: Add suggested screen x and y connector properties



Introduced by qxl, add these properties as a generic way to tell a
display manager about the GUI layout.

Also add the hotplug_mode_update_property which advises display managers to
reread the mode list on a hotplug event.

Signed-off-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: default avatarJakob Bornecrantz <jakob@vmware.com>
parent 4d492a07
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -408,6 +408,7 @@ struct vmw_private {
	enum vmw_display_unit_type active_display_unit;
	enum vmw_display_unit_type active_display_unit;
	struct vmw_legacy_display *ldu_priv;
	struct vmw_legacy_display *ldu_priv;
	struct vmw_overlay *overlay_priv;
	struct vmw_overlay *overlay_priv;
	struct drm_property *hotplug_mode_update_property;
	unsigned num_implicit;
	unsigned num_implicit;
	struct vmw_framebuffer *implicit_fb;
	struct vmw_framebuffer *implicit_fb;


+32 −0
Original line number Original line Diff line number Diff line
@@ -1108,6 +1108,22 @@ int vmw_kms_present(struct vmw_private *dev_priv,
	return 0;
	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)
int vmw_kms_init(struct vmw_private *dev_priv)
{
{
	struct drm_device *dev = dev_priv->dev;
	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_width = dev_priv->texture_max_width;
	dev->mode_config.max_height = dev_priv->texture_max_height;
	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);
	ret = vmw_kms_stdu_init_display(dev_priv);
	if (ret) {
	if (ret) {
		ret = vmw_kms_sou_init_display(dev_priv);
		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->pref_active = true;
			du->gui_x = rects[du->unit].x;
			du->gui_x = rects[du->unit].x;
			du->gui_y = rects[du->unit].y;
			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 {
		} else {
			du->pref_width = 800;
			du->pref_width = 800;
			du->pref_height = 600;
			du->pref_height = 600;
			du->pref_active = false;
			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);
		con->status = vmw_du_connector_detect(con, true);
	}
	}


	mutex_unlock(&dev->mode_config.mutex);
	mutex_unlock(&dev->mode_config.mutex);
	drm_sysfs_hotplug_event(dev);


	return 0;
	return 0;
}
}
+8 −2
Original line number Original line Diff line number Diff line
@@ -377,6 +377,12 @@ static int vmw_ldu_init(struct vmw_private *dev_priv, unsigned unit)
	drm_object_attach_property(&connector->base,
	drm_object_attach_property(&connector->base,
				   dev->mode_config.dirty_info_property,
				   dev->mode_config.dirty_info_property,
				   1);
				   1);
	drm_object_attach_property(&connector->base,
				   dev_priv->hotplug_mode_update_property, 1);
	drm_object_attach_property(&connector->base,
				   dev->mode_config.suggested_x_property, 0);
	drm_object_attach_property(&connector->base,
				   dev->mode_config.suggested_y_property, 0);


	return 0;
	return 0;
}
}
+8 −2
Original line number Original line Diff line number Diff line
@@ -535,6 +535,12 @@ static int vmw_sou_init(struct vmw_private *dev_priv, unsigned unit)
	drm_object_attach_property(&connector->base,
	drm_object_attach_property(&connector->base,
				   dev->mode_config.dirty_info_property,
				   dev->mode_config.dirty_info_property,
				   1);
				   1);
	drm_object_attach_property(&connector->base,
				   dev_priv->hotplug_mode_update_property, 1);
	drm_object_attach_property(&connector->base,
				   dev->mode_config.suggested_x_property, 0);
	drm_object_attach_property(&connector->base,
				   dev->mode_config.suggested_y_property, 0);


	return 0;
	return 0;
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -1128,6 +1128,12 @@ static int vmw_stdu_init(struct vmw_private *dev_priv, unsigned unit)
	drm_object_attach_property(&connector->base,
	drm_object_attach_property(&connector->base,
				   dev->mode_config.dirty_info_property,
				   dev->mode_config.dirty_info_property,
				   1);
				   1);
	drm_object_attach_property(&connector->base,
				   dev_priv->hotplug_mode_update_property, 1);
	drm_object_attach_property(&connector->base,
				   dev->mode_config.suggested_x_property, 0);
	drm_object_attach_property(&connector->base,
				   dev->mode_config.suggested_y_property, 0);


	return 0;
	return 0;
}
}