Created
March 28, 2015 15:46
-
-
Save invisiblek/38143dc4082c8759d53a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/drivers/video/msm/mdss/dsi_host_v2.c b/drivers/video/msm/mdss/dsi_host_v2.c | |
index f78090a..68c991c 100644 | |
--- a/drivers/video/msm/mdss/dsi_host_v2.c | |
+++ b/drivers/video/msm/mdss/dsi_host_v2.c | |
@@ -1329,7 +1329,83 @@ static int msm_dsi_cont_on(struct mdss_panel_data *pdata) | |
return 0; | |
} | |
-int msm_dsi_bta_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata) | |
+static int msm_dsi_read_status(struct mdss_dsi_ctrl_pdata *ctrl) | |
+{ | |
+ struct dcs_cmd_req cmdreq; | |
+ | |
+ memset(&cmdreq, 0, sizeof(cmdreq)); | |
+ cmdreq.cmds = ctrl->status_cmds.cmds; | |
+ cmdreq.cmds_cnt = ctrl->status_cmds.cmd_cnt; | |
+ cmdreq.flags = CMD_REQ_COMMIT | CMD_CLK_CTRL | CMD_REQ_RX; | |
+ cmdreq.rlen = 1; | |
+ cmdreq.cb = NULL; | |
+ cmdreq.rbuf = ctrl->status_buf.data; | |
+ | |
+ return mdss_dsi_cmdlist_put(ctrl, &cmdreq); | |
+} | |
+ | |
+ | |
+/** | |
+ * msm_dsi_reg_status_check() - Check dsi panel status through reg read | |
+ * @ctrl_pdata: pointer to the dsi controller structure | |
+ * | |
+ * This function can be used to check the panel status through reading the | |
+ * status register from the panel. | |
+ * | |
+ * Return: positive value if the panel is in good state, negative value or | |
+ * zero otherwise. | |
+ */ | |
+int msm_dsi_reg_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata) | |
+{ | |
+ int ret = 0; | |
+ | |
+ if (ctrl_pdata == NULL) { | |
+ pr_err("%s: Invalid input data\n", __func__); | |
+ return 0; | |
+ } | |
+ | |
+ pr_debug("%s: Checking Register status\n", __func__); | |
+ | |
+ msm_dsi_clk_ctrl(&ctrl_pdata->panel_data, 1); | |
+ | |
+ if (ctrl_pdata->status_cmds.link_state == DSI_HS_MODE) | |
+ dsi_set_tx_power_mode(0); | |
+ | |
+ ret = msm_dsi_read_status(ctrl_pdata); | |
+ | |
+ if (ctrl_pdata->status_cmds.link_state == DSI_HS_MODE) | |
+ dsi_set_tx_power_mode(1); | |
+ | |
+ if (ret == 0) { | |
+ if (ctrl_pdata->status_buf.data[0] != | |
+ ctrl_pdata->status_value) { | |
+ pr_err("%s: Read back value from panel is incorrect\n", | |
+ __func__); | |
+ ret = -EINVAL; | |
+ } else { | |
+ ret = 1; | |
+ } | |
+ } else { | |
+ pr_err("%s: Read status register returned error\n", __func__); | |
+ } | |
+ | |
+ msm_dsi_clk_ctrl(&ctrl_pdata->panel_data, 0); | |
+ pr_debug("%s: Read register done with ret: %d\n", __func__, ret); | |
+ | |
+ return ret; | |
+} | |
+ | |
+/** | |
+ * msm_dsi_bta_status_check() - Check dsi panel status through bta check | |
+ * @ctrl_pdata: pointer to the dsi controller structure | |
+ * | |
+ * This function can be used to check status of the panel using bta check | |
+ * for the panel. | |
+ * | |
+ * Return: positive value if the panel is in good state, negative value or | |
+ * zero otherwise. | |
+ */ | |
+static int msm_dsi_bta_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata) | |
{ | |
int ret = 0; | |
@@ -1544,9 +1620,19 @@ void msm_dsi_ctrl_init(struct mdss_dsi_ctrl_pdata *ctrl) | |
complete(&ctrl->mdp_comp); | |
dsi_buf_alloc(&ctrl->tx_buf, SZ_4K); | |
dsi_buf_alloc(&ctrl->rx_buf, SZ_4K); | |
+ dsi_buf_alloc(&ctrl->status_buf, SZ_4K); | |
ctrl->cmdlist_commit = msm_dsi_cmdlist_commit; | |
ctrl->panel_mode = ctrl->panel_data.panel_info.mipi.mode; | |
- ctrl->check_status = msm_dsi_bta_status_check; | |
+ | |
+ if (ctrl->status_mode == ESD_REG) | |
+ ctrl->check_status = msm_dsi_reg_status_check; | |
+ else if (ctrl->status_mode == ESD_BTA) | |
+ ctrl->check_status = msm_dsi_bta_status_check; | |
+ | |
+ if (ctrl->status_mode == ESD_MAX) { | |
+ pr_err("%s: Using default BTA for ESD check\n", __func__); | |
+ ctrl->check_status = msm_dsi_bta_status_check; | |
+ } | |
} | |
static int __devinit msm_dsi_probe(struct platform_device *pdev) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment