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

Commit 39834dce 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: error handling in the dsi driver on 8x10"

parents 218f03f2 3417d549
Loading
Loading
Loading
Loading
+29 −14
Original line number Diff line number Diff line
@@ -546,7 +546,12 @@ int msm_dsi_cmds_tx(struct mdss_panel_data *pdata,
	cm = cmds;
	for (i = 0; i < cnt; i++) {
		dsi_buf_init(tp);
		dsi_cmd_dma_add(tp, cm);
		rc = dsi_cmd_dma_add(tp, cm);
		if (!rc) {
			pr_err("%s: dsi_cmd_dma_add fail\n", __func__);
			rc = -EINVAL;
			break;
		}
		rc = msm_dsi_cmd_dma_tx(tp);
		if (IS_ERR_VALUE(rc)) {
			pr_err("%s: failed to call cmd_dma_tx\n", __func__);
@@ -634,27 +639,35 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata,
		pkt_size = len;
		max_pktsize[0] = pkt_size;
		dsi_buf_init(tp);
		dsi_cmd_dma_add(tp, pkt_size_cmd);
		rc = dsi_cmd_dma_add(tp, pkt_size_cmd);
		if (!rc) {
			pr_err("%s: dsi_cmd_dma_add failed\n", __func__);
			rp->len = 0;
			goto msm_dsi_cmds_rx_err;
		}
		rc = msm_dsi_cmd_dma_tx(tp);
		if (IS_ERR_VALUE(rc)) {
			msm_dsi_disable_irq();
			pr_err("%s: dma_tx failed\n", __func__);
			pr_err("%s: msm_dsi_cmd_dma_tx failed\n", __func__);
			rp->len = 0;
			goto end;
			goto msm_dsi_cmds_rx_err;
		}
		pr_debug("%s: Max packet size sent\n", __func__);
	}

	dsi_buf_init(tp);
	dsi_cmd_dma_add(tp, cmds);
	rc = dsi_cmd_dma_add(tp, cmds);
	if (!rc) {
		pr_err("%s: dsi_cmd_dma_add failed\n", __func__);
		rp->len = 0;
		goto msm_dsi_cmds_rx_err;
	}

	/* transmit read comamnd to client */
	msm_dsi_cmd_dma_tx(tp);
	rc = msm_dsi_cmd_dma_tx(tp);
	if (IS_ERR_VALUE(rc)) {
		msm_dsi_disable_irq();
		pr_err("%s: dma_tx failed\n", __func__);
		pr_err("%s: msm_dsi_cmd_dma_tx failed\n", __func__);
		rp->len = 0;
		goto end;
		goto msm_dsi_cmds_rx_err;
	}
	/*
	 * once cmd_dma_done interrupt received,
@@ -672,8 +685,6 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata,

	msm_dsi_cmd_dma_rx(rp, cnt);

	msm_dsi_disable_irq();

	if (pdata->panel_info.mipi.no_max_pkt_size) {
		/*
		 * remove extra 2 bytes from previous
@@ -689,6 +700,7 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata,
	switch (cmd) {
	case DTYPE_ACK_ERR_RESP:
		pr_debug("%s: rx ACK_ERR_PACLAGE\n", __func__);
		rp->len = 0;
		break;
	case DTYPE_GEN_READ1_RESP:
	case DTYPE_DCS_READ1_RESP:
@@ -705,14 +717,17 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata,
		rp->len -= diff; /* align bytes */
		break;
	default:
		pr_debug("%s: Unknown cmd received\n", __func__);
		pr_warn("%s: Unknown cmd received\n", __func__);
		rp->len = 0;
		break;
	}

	if (video_mode)
		MIPI_OUTP(ctrl_base + DSI_CTRL,
					dsi_ctrl); /* restore */
end:

msm_dsi_cmds_rx_err:
	msm_dsi_disable_irq();
	return rp->len;
}