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

Commit 00f6141a authored by Alan Kwong's avatar Alan Kwong Committed by Steve Cohen
Browse files

drm/msm: separate connector set_info_blob from post_init



Connector performs post initialization to install connector
specific properties and info blob. However, this is also
used to refresh info blob during atomic check, resulting
in re-registration of connector properties. Separate
current info blob refresh from post initialization so that
connector properties are registered only once during
initialization.

Change-Id: Iae0ff05884a28148251d907cdf81cd34a7ebcd61
Signed-off-by: default avatarAlan Kwong <akwong@codeaurora.org>
parent 37756d75
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -287,12 +287,11 @@ int dp_connector_pre_kickoff(struct drm_connector *connector,
	return dp->pre_kickoff(dp, params->hdr_meta);
}

int dp_connector_post_init(struct drm_connector *connector,
		void *info, void *display, struct msm_mode_info *mode_info)
int dp_connector_post_init(struct drm_connector *connector, void *display)
{
	struct dp_display *dp_display = display;

	if (!info || !dp_display)
	if (!dp_display)
		return -EINVAL;

	dp_display->connector = connector;
+1 −6
Original line number Diff line number Diff line
@@ -45,15 +45,10 @@ int dp_connector_pre_kickoff(struct drm_connector *connector,
/**
 * dp_connector_post_init - callback to perform additional initialization steps
 * @connector: Pointer to drm connector structure
 * @info: Pointer to sde connector info structure
 * @display: Pointer to private display handle
 * @mode_info: Pointer to mode info structure
 * Returns: Zero on success
 */
int dp_connector_post_init(struct drm_connector *connector,
		void *info,
		void *display,
		struct msm_mode_info *mode_info);
int dp_connector_post_init(struct drm_connector *connector, void *display);

/**
 * dp_connector_detect - callback to determine if connector is connected
+1 −1
Original line number Diff line number Diff line
@@ -360,7 +360,7 @@ static const struct drm_bridge_funcs dsi_bridge_ops = {
	.mode_set     = dsi_bridge_mode_set,
};

int dsi_conn_post_init(struct drm_connector *connector,
int dsi_conn_set_info_blob(struct drm_connector *connector,
		void *info, void *display, struct msm_mode_info *mode_info)
{
	struct dsi_display *dsi_display = display;
+2 −2
Original line number Diff line number Diff line
@@ -33,14 +33,14 @@ struct dsi_bridge {
};

/**
 * dsi_conn_post_init - callback to perform additional initialization steps
 * dsi_conn_set_info_blob - callback to perform info blob initialization
 * @connector: Pointer to drm connector structure
 * @info: Pointer to sde connector info structure
 * @display: Pointer to private display handle
 * @mode_info: Pointer to mode info structure
 * Returns: Zero on success
 */
int dsi_conn_post_init(struct drm_connector *connector,
int dsi_conn_set_info_blob(struct drm_connector *connector,
		void *info,
		void *display,
		struct msm_mode_info *mode_info);
+17 −10
Original line number Diff line number Diff line
@@ -1610,17 +1610,16 @@ int sde_connector_set_blob_data(struct drm_connector *conn,
			SDE_DEBUG_CONN(c_conn, "invalid connector state\n");
		}

		if (!c_conn->ops.post_init) {
			SDE_ERROR_CONN(c_conn, "post_init not defined\n");
			goto exit;
		}

		rc = c_conn->ops.post_init(conn, info, c_conn->display,
				&mode_info);
		if (c_conn->ops.set_info_blob) {
			rc = c_conn->ops.set_info_blob(conn, info,
					c_conn->display, &mode_info);
			if (rc) {
			SDE_ERROR_CONN(c_conn, "post-init failed, %d\n", rc);
				SDE_ERROR_CONN(c_conn,
						"set_info_blob failed, %d\n",
						rc);
				goto exit;
			}
		}

		blob = c_conn->blob_caps;
	break;
@@ -1756,6 +1755,14 @@ struct drm_connector *sde_connector_init(struct drm_device *dev,
			CONNECTOR_PROP_COUNT, CONNECTOR_PROP_BLOBCOUNT,
			sizeof(struct sde_connector_state));

	if (c_conn->ops.post_init) {
		rc = c_conn->ops.post_init(&c_conn->base, display);
		if (rc) {
			SDE_ERROR("post-init failed, %d\n", rc);
			goto error_cleanup_fence;
		}
	}

	msm_property_install_blob(&c_conn->property_info,
			"capabilities",
			DRM_MODE_PROP_IMMUTABLE,
Loading