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

Commit f0e165a8 authored by Jayaprakash's avatar Jayaprakash
Browse files

disp: msm: sde: add helper function for setting crtc to conn state



Add changes to move the state operations for setting crtc to
connector state to a helper api. This can be reused during
preclose operation for issuing a drm commit.

Change-Id: I8daf4f2119c8d0e54c123a07255cb8119c2040ea
Signed-off-by: default avatarJayaprakash <jmadiset@codeaurora.org>
parent a5efd1f0
Loading
Loading
Loading
Loading
+42 −29
Original line number Diff line number Diff line
@@ -2029,6 +2029,46 @@ static void sde_kms_destroy(struct msm_kms *kms)
	kfree(sde_kms);
}

static int sde_kms_set_crtc_for_conn(struct drm_device *dev,
		struct drm_encoder *enc, struct drm_atomic_state *state)
{
	struct drm_connector *conn = NULL;
	struct drm_connector *tmp_conn = NULL;
	struct drm_connector_list_iter conn_iter;
	struct drm_crtc_state *crtc_state = NULL;
	struct drm_connector_state *conn_state = NULL;
	int ret = 0;

	drm_connector_list_iter_begin(dev, &conn_iter);
	drm_for_each_connector_iter(tmp_conn, &conn_iter) {
		if (enc == tmp_conn->state->best_encoder) {
			conn = tmp_conn;
			break;
		}
	}
	drm_connector_list_iter_end(&conn_iter);

	if (!conn) {
		SDE_ERROR("error in finding conn for enc:%d\n", DRMID(enc));
		return -EINVAL;
	}

	crtc_state = drm_atomic_get_crtc_state(state, enc->crtc);
	conn_state = drm_atomic_get_connector_state(state, conn);
	if (IS_ERR(conn_state)) {
		SDE_ERROR("error %d getting connector %d state\n",
				ret, DRMID(conn));
		return -EINVAL;
	}

	crtc_state->active = true;
	ret = drm_atomic_set_crtc_for_connector(conn_state, enc->crtc);
	if (ret)
		SDE_ERROR("error %d setting the crtc\n", ret);

	return 0;
}

static void _sde_kms_plane_force_remove(struct drm_plane *plane,
			struct drm_atomic_state *state)
{
@@ -2744,12 +2784,7 @@ static void _sde_kms_null_commit(struct drm_device *dev,
		struct drm_encoder *enc)
{
	struct drm_modeset_acquire_ctx ctx;
	struct drm_connector *conn = NULL;
	struct drm_connector *tmp_conn = NULL;
	struct drm_connector_list_iter conn_iter;
	struct drm_atomic_state *state = NULL;
	struct drm_crtc_state *crtc_state = NULL;
	struct drm_connector_state *conn_state = NULL;
	int retry_cnt = 0;
	int ret = 0;

@@ -2773,32 +2808,10 @@ static void _sde_kms_null_commit(struct drm_device *dev,
	}

	state->acquire_ctx = &ctx;
	drm_connector_list_iter_begin(dev, &conn_iter);
	drm_for_each_connector_iter(tmp_conn, &conn_iter) {
		if (enc == tmp_conn->state->best_encoder) {
			conn = tmp_conn;
			break;
		}
	}
	drm_connector_list_iter_end(&conn_iter);

	if (!conn) {
		SDE_ERROR("error in finding conn for enc:%d\n", DRMID(enc));
		goto end;
	}

	crtc_state = drm_atomic_get_crtc_state(state, enc->crtc);
	conn_state = drm_atomic_get_connector_state(state, conn);
	if (IS_ERR(conn_state)) {
		SDE_ERROR("error %d getting connector %d state\n",
				ret, DRMID(conn));
		goto end;
	}

	crtc_state->active = true;
	ret = drm_atomic_set_crtc_for_connector(conn_state, enc->crtc);
	ret = sde_kms_set_crtc_for_conn(dev, enc, state);
	if (ret)
		SDE_ERROR("error %d setting the crtc\n", ret);
		goto end;

	ret = drm_atomic_commit(state);
	if (ret)