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

Commit f2536c1a authored by Govinda Rajulu Chenna's avatar Govinda Rajulu Chenna Committed by Gerrit - the friendly Code Review server
Browse files

drm/msm/sde: add pre_destroy op for sde connectors



Add pre_destroy op for sde connectors. This new op provides
a way for interface drivers to release the internally allocated
resources before deallocated the sde connector object.

Change-Id: Idd630bded85e6d05f67964ad748200549857ded1
Signed-off-by: default avatarGovinda Rajulu Chenna <gchenna@codeaurora.org>
parent 1ca632e9
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -652,8 +652,8 @@ void sde_connector_destroy(struct drm_connector *connector)
	/* cancel if any pending esd work */
	sde_connector_schedule_status_work(connector, false);

	if (c_conn->ops.put_modes)
		c_conn->ops.put_modes(connector, c_conn->display);
	if (c_conn->ops.pre_destroy)
		c_conn->ops.pre_destroy(connector, c_conn->display);

	if (c_conn->blob_caps)
		drm_property_blob_put(c_conn->blob_caps);
@@ -2128,8 +2128,6 @@ struct drm_connector *sde_connector_init(struct drm_device *dev,
	SDE_DEBUG("connector %d attach encoder %d\n",
			c_conn->base.base.id, encoder->base.id);

	priv->connectors[priv->num_connectors++] = &c_conn->base;

	INIT_DELAYED_WORK(&c_conn->status_work,
			sde_connector_check_status_work);

+8 −8
Original line number Diff line number Diff line
@@ -75,14 +75,6 @@ struct sde_connector_ops {
	int (*get_modes)(struct drm_connector *connector,
			void *display);

	/**
	 * put_modes - free up drm modes of the connector
	 * @connector: Pointer to drm connector structure
	 * @display: Pointer to private display handle
	 */
	void (*put_modes)(struct drm_connector *connector,
			void *display);

	/**
	 * update_pps - update pps command for the display panel
	 * @connector: Pointer to drm connector structure
@@ -292,6 +284,14 @@ struct sde_connector_ops {
	int (*atomic_check)(struct drm_connector *connector,
			void *display,
			struct drm_connector_state *c_state);

	/**
	 * pre_destroy - handle pre destroy operations for the connector
	 * @connector: Pointer to drm connector structure
	 * @display: Pointer to private display handle
	 * Returns: Zero on success, negative error code for failures
	 */
	void (*pre_destroy)(struct drm_connector *connector, void *display);
};

/**
+4 −1
Original line number Diff line number Diff line
@@ -915,7 +915,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
		.set_info_blob = dsi_conn_set_info_blob,
		.detect =     dsi_conn_detect,
		.get_modes =  dsi_connector_get_modes,
		.put_modes =  dsi_connector_put_modes,
		.pre_destroy =  dsi_connector_put_modes,
		.mode_valid = dsi_conn_mode_valid,
		.get_info =   dsi_display_get_info,
		.set_backlight = dsi_display_set_backlight,
@@ -1009,6 +1009,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
					DRM_MODE_CONNECTOR_DSI);
		if (connector) {
			priv->encoders[priv->num_encoders++] = encoder;
			priv->connectors[priv->num_connectors++] = connector;
		} else {
			SDE_ERROR("dsi %d connector init failed\n", i);
			dsi_display_drm_bridge_deinit(display);
@@ -1051,6 +1052,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
				DRM_MODE_CONNECTOR_VIRTUAL);
		if (connector) {
			priv->encoders[priv->num_encoders++] = encoder;
			priv->connectors[priv->num_connectors++] = connector;
		} else {
			SDE_ERROR("wb %d connector init failed\n", i);
			sde_wb_drm_deinit(display);
@@ -1094,6 +1096,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
					DRM_MODE_CONNECTOR_DisplayPort);
		if (connector) {
			priv->encoders[priv->num_encoders++] = encoder;
			priv->connectors[priv->num_connectors++] = connector;
		} else {
			SDE_ERROR("dp %d connector init failed\n", i);
			dp_drm_bridge_deinit(display);