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

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

Merge "msm: mdss: enable burst mode for DSI command mode panels"

parents 605029b6 c4cb9fa2
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -2493,7 +2493,7 @@ static int mdss_dsi_cont_splash_config(struct mdss_panel_info *pinfo,
				       struct mdss_dsi_ctrl_pdata *ctrl_pdata)
{
	void *clk_handle;
	int rc = 0;
	int rc = 0, data;

	if (pinfo->cont_splash_enabled) {
		rc = mdss_dsi_panel_power_ctrl(&(ctrl_pdata->panel_data),
@@ -2513,6 +2513,13 @@ static int mdss_dsi_cont_splash_config(struct mdss_panel_info *pinfo,
		mdss_dsi_clk_ctrl(ctrl_pdata, clk_handle,
				  MDSS_DSI_ALL_CLKS, MDSS_DSI_CLK_ON);
		ctrl_pdata->is_phyreg_enabled = 1;
		mdss_dsi_get_hw_revision(ctrl_pdata);
		if ((ctrl_pdata->shared_data->hw_rev >= MDSS_DSI_HW_REV_103)
			&& (pinfo->type == MIPI_CMD_PANEL)) {
			data = MIPI_INP(ctrl_pdata->ctrl_base + 0x1b8);
			if (data & BIT(16))
				ctrl_pdata->burst_mode_enabled = true;
		}
		ctrl_pdata->ctrl_state |=
			(CTRL_STATE_PANEL_INIT | CTRL_STATE_MDP_ACTIVE);
	} else {
+2 −1
Original line number Diff line number Diff line
@@ -468,6 +468,7 @@ struct mdss_dsi_ctrl_pdata {
	int mdp_busy;
	struct mutex mutex;
	struct mutex cmd_mutex;
	struct mutex cmdlist_mutex;
	struct regulator *lab; /* vreg handle */
	struct regulator *ibb; /* vreg handle */
	struct mutex clk_lane_mutex;
@@ -478,7 +479,7 @@ struct mdss_dsi_ctrl_pdata {
	bool mmss_clamp;
	char dlane_swap;	/* data lane swap */
	bool is_phyreg_enabled;

	bool burst_mode_enabled;

	struct dsi_buf tx_buf;
	struct dsi_buf rx_buf;
+5 −0
Original line number Diff line number Diff line
@@ -729,6 +729,7 @@ struct dcs_cmd_req *mdss_dsi_cmdlist_get(struct mdss_dsi_ctrl_pdata *ctrl)
	struct dcs_cmd_list *clist;
	struct dcs_cmd_req *req = NULL;

	mutex_lock(&ctrl->cmdlist_mutex);
	clist = &ctrl->cmdlist;
	if (clist->get != clist->put) {
		req = &clist->list[clist->get];
@@ -738,6 +739,7 @@ struct dcs_cmd_req *mdss_dsi_cmdlist_get(struct mdss_dsi_ctrl_pdata *ctrl)
		pr_debug("%s: tot=%d put=%d get=%d\n", __func__,
		clist->tot, clist->put, clist->get);
	}
	mutex_unlock(&ctrl->cmdlist_mutex);
	return req;
}

@@ -749,6 +751,7 @@ int mdss_dsi_cmdlist_put(struct mdss_dsi_ctrl_pdata *ctrl,
	int ret = 0;

	mutex_lock(&ctrl->cmd_mutex);
	mutex_lock(&ctrl->cmdlist_mutex);
	clist = &ctrl->cmdlist;
	req = &clist->list[clist->put];
	*req = *cmdreq;
@@ -767,6 +770,8 @@ int mdss_dsi_cmdlist_put(struct mdss_dsi_ctrl_pdata *ctrl,
	pr_debug("%s: tot=%d put=%d get=%d\n", __func__,
		clist->tot, clist->put, clist->get);

	mutex_unlock(&ctrl->cmdlist_mutex);

	if (req->flags & CMD_REQ_COMMIT) {
		if (!ctrl->cmdlist_commit)
			pr_err("cmdlist_commit not implemented!\n");
+25 −5
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ void mdss_dsi_ctrl_init(struct device *ctrl_dev,
	mutex_init(&ctrl->mutex);
	mutex_init(&ctrl->cmd_mutex);
	mutex_init(&ctrl->clk_lane_mutex);
	mutex_init(&ctrl->cmdlist_mutex);
	mdss_dsi_buf_alloc(ctrl_dev, &ctrl->tx_buf, SZ_4K);
	mdss_dsi_buf_alloc(ctrl_dev, &ctrl->rx_buf, SZ_4K);
	mdss_dsi_buf_alloc(ctrl_dev, &ctrl->status_buf, SZ_4K);
@@ -1200,6 +1201,14 @@ static void mdss_dsi_mode_setup(struct mdss_panel_data *pdata)
			MIPI_OUTP((ctrl_pdata->ctrl_base) + 0x2b4, data);
		}

		/* Enable frame transfer in burst mode */
		if (ctrl_pdata->shared_data->hw_rev >= MDSS_DSI_HW_REV_103) {
			data = MIPI_INP(ctrl_pdata->ctrl_base + 0x1b8);
			data = data | BIT(16);
			MIPI_OUTP((ctrl_pdata->ctrl_base + 0x1b8), data);
			ctrl_pdata->burst_mode_enabled = 1;
		}

		/* DSI_COMMAND_MODE_MDP_STREAM_CTRL */
		MIPI_OUTP((ctrl_pdata->ctrl_base) + 0x60, stream_ctrl);
		MIPI_OUTP((ctrl_pdata->ctrl_base) + 0x58, stream_ctrl);
@@ -2283,18 +2292,26 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp)
	int ret = -EINVAL;
	int rc = 0;
	bool hs_req = false;
	bool cmd_mutex_acquired = false;

	if (mdss_get_sd_client_cnt())
		return -EPERM;

	if (from_mdp) {	/* from mdp kickoff */
		if (!ctrl->burst_mode_enabled) {
			mutex_lock(&ctrl->cmd_mutex);
			cmd_mutex_acquired = true;
		}
		pinfo = &ctrl->panel_data.panel_info;
		if (pinfo->partial_update_enabled)
			roi = &pinfo->roi;
	}

	req = mdss_dsi_cmdlist_get(ctrl);
	if (req && from_mdp && ctrl->burst_mode_enabled) {
		mutex_lock(&ctrl->cmd_mutex);
		cmd_mutex_acquired = true;
	}

	MDSS_XLOG(ctrl->ndx, from_mdp, ctrl->mdp_busy, current->pid,
							XLOG_FUNC_ENTRY);
@@ -2302,8 +2319,11 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp)
	if (req && (req->flags & CMD_REQ_HS_MODE))
		hs_req = true;

	if (!ctrl->burst_mode_enabled ||
		(from_mdp && ctrl->shared_data->cmd_clk_ln_recovery_en)) {
		/* make sure dsi_cmd_mdp is idle */
		mdss_dsi_cmd_mdp_busy(ctrl);
	}

	mdss_dsi_get_hw_revision(ctrl);

@@ -2403,7 +2423,7 @@ need_lock:
		 */
		if (!roi || (roi->w != 0 || roi->h != 0))
			mdss_dsi_cmd_mdp_start(ctrl);

		if (cmd_mutex_acquired)
			mutex_unlock(&ctrl->cmd_mutex);
	} else {	/* from dcs send */
		if (ctrl->shared_data->cmd_clk_ln_recovery_en &&