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

Commit b71db171 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drm/msm/dp: fix the controller programming sequence" into dev/msm-4.14-display

parents 13781d61 89912133
Loading
Loading
Loading
Loading
+23 −17
Original line number Diff line number Diff line
@@ -147,7 +147,7 @@ static void dp_ctrl_push_idle(struct dp_ctrl *dp_ctrl, enum dp_stream_id strm)

	if (!wait_for_completion_timeout(&ctrl->idle_comp,
			idle_pattern_completion_timeout_ms))
		pr_warn("PUSH_IDLE pattern timedout\n");
		pr_warn("PUSH_IDLE time out\n");

	pr_debug("mainlink off done\n");
}
@@ -179,11 +179,11 @@ static int dp_ctrl_wait4video_ready(struct dp_ctrl_private *ctrl)

	ret = wait_for_completion_timeout(&ctrl->video_comp, HZ / 2);
	if (ret <= 0) {
		pr_err("Link Train timedout\n");
		ret = -EINVAL;
		pr_err("SEND_VIDEO time out (%d)\n", ret);
		return -EINVAL;
	}

	return ret;
	return 0;
}

static int dp_ctrl_update_sink_vx_px(struct dp_ctrl_private *ctrl,
@@ -838,21 +838,22 @@ static void dp_ctrl_reset(struct dp_ctrl *dp_ctrl)
	ctrl->catalog->reset(ctrl->catalog);
}

static void dp_ctrl_send_video(struct dp_ctrl_private *ctrl)
{
	ctrl->catalog->state_ctrl(ctrl->catalog, ST_SEND_VIDEO);
}

static int dp_ctrl_mst_stream_setup(struct dp_ctrl_private *ctrl,
		struct dp_panel *panel)
{
	u32 x_int, y_frac_enum, lanes, bw_code;
	bool act_complete;

	if (!ctrl->mst_mode) {
		ctrl->catalog->state_ctrl(ctrl->catalog, ST_SEND_VIDEO);
	if (!ctrl->mst_mode)
		return 0;
	}

	DP_MST_DEBUG("mst stream channel allocation\n");

	panel->hw_cfg(panel);

	ctrl->catalog->channel_alloc(ctrl->catalog,
				panel->stream_id,
				panel->channel_start_slot,
@@ -875,8 +876,6 @@ static int dp_ctrl_mst_stream_setup(struct dp_ctrl_private *ctrl,
	DP_MST_DEBUG("mst lane_cnt:%d, bw:%d, x_int:%d, y_frac:%d\n",
			lanes, bw_code, x_int, y_frac_enum);

	ctrl->catalog->state_ctrl(ctrl->catalog, ST_SEND_VIDEO);

	ctrl->catalog->trigger_act(ctrl->catalog);
	msleep(20); /* needs 1 frame time */

@@ -897,8 +896,7 @@ static int dp_ctrl_stream_on(struct dp_ctrl *dp_ctrl, struct dp_panel *panel)
	struct dp_ctrl_private *ctrl;

	if (!dp_ctrl || !panel) {
		rc = -EINVAL;
		goto end;
		return -EINVAL;
	}

	ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl);
@@ -906,7 +904,7 @@ static int dp_ctrl_stream_on(struct dp_ctrl *dp_ctrl, struct dp_panel *panel)
	rc = dp_ctrl_enable_stream_clocks(ctrl, panel);
	if (rc) {
		pr_err("failure on stream clock enable\n");
		goto end;
		return rc;
	}

	if (ctrl->link->sink_request & DP_TEST_LINK_PHY_TEST_PATTERN) {
@@ -914,15 +912,23 @@ static int dp_ctrl_stream_on(struct dp_ctrl *dp_ctrl, struct dp_panel *panel)
		return 0;
	}

	rc = panel->hw_cfg(panel);
	if (rc)
		return rc;

	dp_ctrl_send_video(ctrl);

	rc = dp_ctrl_mst_stream_setup(ctrl, panel);
	if (rc)
		goto end;
		return rc;

	rc = dp_ctrl_wait4video_ready(ctrl);
	if (rc)
		return rc;

	dp_ctrl_wait4video_ready(ctrl);
	link_ready = ctrl->catalog->mainlink_ready(ctrl->catalog);
	pr_debug("mainlink %s\n", link_ready ? "READY" : "NOT READY");

end:
	return rc;
}

+4 −3
Original line number Diff line number Diff line
@@ -1269,7 +1269,9 @@ static int dp_display_enable(struct dp_display *dp_display, void *panel)
	}

	rc = dp->ctrl->on(dp->ctrl, dp->mst.mst_active);
	if (!rc)
	if (rc)
		goto end;

	dp->power_on = true;

stream_setup:
@@ -1285,7 +1287,6 @@ static void dp_display_stream_post_enable(struct dp_display_private *dp,
{
	dp_panel->spd_config(dp_panel);
	dp_panel->setup_hdr(dp_panel, NULL);
	dp_panel->hw_cfg(dp_panel);

	dp_panel->audio->register_ext_disp(dp_panel->audio);
}