msm8953 mipi esd 流程分析

///dts里面
qcom,mdss-dsi-panel-status-check-mode   = "reg_read";
/代码流程
mdss_check_dsi_ctrl_status()  ------>>>> 
mdss_dsi_reg_status_check  ------>>>>
mdss_dsi_read_status  先读取寄存器状态----->
rc = mdss_dsi_cmdlist_put(ctrl, &cmdreq);
------->ret = ctrl->cmdlist_commit(ctrl, 0);
------->mdss_dsi_cmdlist_commit(ctrl_pdata, 1);
-------->ret = mdss_dsi_cmdlist_rx(ctrl, req);
----->len = mdss_dsi_cmds_rx(ctrl, req->cmds, req->rlen,(req->flags & CMD_REQ_DMA_TPG));
------>>>>后mdss_dsi_gen_read_status 比较寄存器状态

调试代码如下:

diff --git a/msm-3.18/drivers/video/msm/mdss/mdss_dsi_cmd.c b/msm-3.18/drivers/video/msm/mdss/mdss_dsi_cmd.c
index d07b504..b15cf26 100644
--- a/msm-3.18/drivers/video/msm/mdss/mdss_dsi_cmd.c
+++ b/msm-3.18/drivers/video/msm/mdss/mdss_dsi_cmd.c
@@ -774,7 +774,7 @@ int mdss_dsi_cmdlist_put(struct mdss_dsi_ctrl_pdata *ctrl,
         clist->tot--;
     }
 
-    pr_debug("%s: tot=%d put=%d get=%d\n", __func__,
+    printk("%s: tot=%d put=%d get=%d\n", __func__,
         clist->tot, clist->put, clist->get);
 
     mutex_unlock(&ctrl->cmdlist_mutex);
diff --git a/msm-3.18/drivers/video/msm/mdss/mdss_dsi_host.c b/msm-3.18/drivers/video/msm/mdss/mdss_dsi_host.c
index eda0e02..5877fa8 100644
--- a/msm-3.18/drivers/video/msm/mdss/mdss_dsi_host.c
+++ b/msm-3.18/drivers/video/msm/mdss/mdss_dsi_host.c
@@ -1110,10 +1110,18 @@ static int mdss_dsi_read_status(struct mdss_dsi_ctrl_pdata *ctrl)
         memset(&cmdreq, 0, sizeof(cmdreq));
         cmdreq.cmds = ctrl->status_cmds.cmds + i;
         cmdreq.cmds_cnt = 1;
+        //cmdreq.flags = CMD_REQ_COMMIT | CMD_REQ_RX;
         cmdreq.flags = CMD_REQ_COMMIT | CMD_CLK_CTRL | CMD_REQ_RX;
         cmdreq.rlen = ctrl->status_cmds_rlen[i];
         cmdreq.cb = NULL;
         cmdreq.rbuf = ctrl->status_buf.data;
+        printk("deanji  cmdreq.cmds %d %d %d %d %d %d %d\n",(cmdreq.cmds->dchdr).dtype,(cmdreq.cmds->dchdr).last,(cmdreq.cmds->dchdr).vc,
+        (cmdreq.cmds->dchdr).ack,(cmdreq.cmds->dchdr).wait,(cmdreq.cmds->dchdr).dlen,cmdreq.cmds->payload[0]);
+        printk("deanji cmdreq.rlen:%d cmdreq.rbuf:%d \n",cmdreq.rlen,cmdreq.rbuf[0]);
+        if (ctrl->status_cmds.link_state == DSI_LP_MODE){
+            printk("deanji DSI_LP_MODE\n");
+        } else if(ctrl->status_cmds.link_state == DSI_HS_MODE)
+            printk("deanji DSI_HS_MODE\n");
 
         if (ctrl->status_cmds.link_state == DSI_LP_MODE)
             cmdreq.flags  |= CMD_REQ_LP_MODE;
@@ -1156,6 +1164,7 @@ int mdss_dsi_reg_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
     }
 
     pr_debug("%s: Checking Register status\n", __func__);
+    printk("deanji %s: Checking Register status\n", __func__);
 
     mdss_dsi_clk_ctrl(ctrl_pdata, ctrl_pdata->dsi_clk_handle,
               MDSS_DSI_ALL_CLKS, MDSS_DSI_CLK_ON);
@@ -1163,6 +1172,7 @@ int mdss_dsi_reg_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
     sctrl_pdata = mdss_dsi_get_other_ctrl(ctrl_pdata);
     if (!mdss_dsi_sync_wait_enable(ctrl_pdata)) {
         ret = mdss_dsi_read_status(ctrl_pdata);
+        printk("deanji mdss_dsi_reg_status_check 111\n");
     } else {
         /*
          * Read commands to check ESD status are usually sent at
@@ -1172,11 +1182,16 @@ int mdss_dsi_reg_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
          * controller so that when the commands are triggered,
          * both controllers receive it at the same time.
          */
+
+         if(sctrl_pdata) printk("deanji sctrl_pdata is not NULL");
+         else printk("deanji sctrl_pdata is NULL");
         if (mdss_dsi_sync_wait_trigger(ctrl_pdata)) {
+        printk("deanji mdss_dsi_reg_status_check 222\n");
             if (sctrl_pdata)
                 ret = mdss_dsi_read_status(sctrl_pdata);
             ret = mdss_dsi_read_status(ctrl_pdata);
         } else {
+        printk("deanji mdss_dsi_reg_status_check 333\n");
             ret = mdss_dsi_read_status(ctrl_pdata);
             if (sctrl_pdata)
                 ret = mdss_dsi_read_status(sctrl_pdata);
@@ -1188,6 +1203,16 @@ int mdss_dsi_reg_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
      * by the panel. Success value is greater than zero and failure
      * case returns zero.
      */
+    printk("deanji %s %d\n",__func__,ret);
+/*    if(ret == 0){
+        printk("deanji  chongfa \n");
+        if (!mdss_dsi_sync_wait_enable(ctrl_pdata)) {
+            ret = mdss_dsi_read_status(ctrl_pdata);
+            printk("deanji 4444 %s %d\n",__func__,ret);
+        }
+    }
+*/
+
     if (ret > 0) {
         if (!mdss_dsi_sync_wait_enable(ctrl_pdata) ||
             mdss_dsi_sync_wait_trigger(ctrl_pdata))
@@ -1788,7 +1813,8 @@ int mdss_dsi_cmds_rx(struct mdss_dsi_ctrl_pdata *ctrl,
     struct dsi_buf *tp, *rp;
     char cmd;
     struct mdss_dsi_ctrl_pdata *mctrl = NULL;
-
+    int ii = 0;
+    printk("deanji mdss_dsi_cmds_rx use_dma_tpg is %x \n",use_dma_tpg);
 
     if (ctrl->panel_data.panel_info.panel_ack_disabled) {
         pr_err("%s: ACK from Client not supported\n", __func__);
@@ -1823,6 +1849,8 @@ int mdss_dsi_cmds_rx(struct mdss_dsi_ctrl_pdata *ctrl,
         }
     }
 
+    printk("deanji %s rlen:%d \n",__func__,rlen);
+
 do_send:
     ctrl->cmd_cfg_restore = __mdss_dsi_cmd_mode_config(ctrl, 1);
 
@@ -1847,7 +1875,7 @@ do_send:
     end = 0;
     mdss_dsi_buf_init(rp);
     while (!end) {
-        pr_debug("%s:  rlen=%d pkt_size=%d rx_byte=%d\n",
+        printk("%s:  rlen=%d pkt_size=%d rx_byte=%d\n",
                 __func__, rlen, pkt_size, rx_byte);
         /*
          * Skip max_pkt_size dcs cmd if
@@ -1884,7 +1912,7 @@ do_send:
             goto end;
         }
         ctrl->cur_max_pkt_size = pkt_size;
-        pr_debug("%s: max_pkt_size=%d sent\n",
+        printk("%s: max_pkt_size=%d sent\n",
                     __func__, pkt_size);
 
 skip_max_pkt_size:
@@ -1930,6 +1958,7 @@ skip_max_pkt_size:
          * after that dcs header lost during shift into registers
          */
         dlen = mdss_dsi_cmd_dma_rx(ctrl, rp, rx_byte);
+        printk("deanji mdss_dsi_cmd_dma_rx dlen=%d \n",dlen);
 
         if (!dlen)
             goto end;
@@ -1956,7 +1985,7 @@ skip_max_pkt_size:
             else
                 pkt_size += data_byte;
         }
-        pr_debug("%s: rp data=%x len=%d dlen=%d diff=%d\n",
+        printk("%s: rp data=%x len=%d dlen=%d diff=%d\n",
              __func__, (int) (unsigned long) rp->data,
              rp->len, dlen, diff);
     }
@@ -1967,14 +1996,18 @@ skip_max_pkt_size:
      * data buffer to skip the bytes which are not
      * updated.
      */
+
     if (rp->read_cnt < 16 && !short_response)
         rp->data = rp->start + (16 - rp->read_cnt);
     else
         rp->data = rp->start;
+
+     printk("deanji %s rp->read_cnt is %d \n",__func__,rp->read_cnt);
+     for(ii=0;ii<rp->read_cnt;ii++) printk("rp->data[%d]:%d \n",ii,rp->data[ii]);
     cmd = rp->data[0];
     switch (cmd) {
     case DTYPE_ACK_ERR_RESP:
-        pr_debug("%s: rx ACK_ERR_PACLAGE\n", __func__);
+        printk("%s: rx ACK_ERR_PACLAGE\n", __func__);
         rp->len = 0;
         rp->read_cnt = 0;
     case DTYPE_GEN_READ1_RESP:
@@ -1991,6 +2024,7 @@ skip_max_pkt_size:
         break;
     default:
         pr_warning("%s:Invalid response cmd\n", __func__);
+        printk("deanji Invalid response cmd:%d\n",cmd);
         rp->len = 0;
         rp->read_cnt = 0;
     }
@@ -2505,6 +2539,8 @@ int mdss_dsi_cmdlist_rx(struct mdss_dsi_ctrl_pdata *ctrl,
     struct dsi_buf *rp;
     int len = 0;
 
+    printk("deanji %s entered \n",__func__);
+
     if (req->rbuf) {
         rp = &ctrl->rx_buf;
         len = mdss_dsi_cmds_rx(ctrl, req->cmds, req->rlen,
@@ -2575,6 +2611,8 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp)
     bool hs_req = false;
     bool cmd_mutex_acquired = false;
 
+    printk("deanji %s entered \n",__func__);
+
     if (from_mdp) {    /* from mdp kickoff */
         if (!ctrl->burst_mode_enabled) {
             mutex_lock(&ctrl->cmd_mutex);
@@ -2621,7 +2659,7 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp)
     if (req && (ctrl->shared_data->hw_rev < MDSS_DSI_HW_REV_103))
         req->flags &= ~CMD_REQ_DMA_TPG;
 
-    pr_debug("%s: ctrl=%d from_mdp=%d pid=%d\n", __func__,
+    printk("%s: ctrl=%d from_mdp=%d pid=%d\n", __func__,
                 ctrl->ndx, from_mdp, current->pid);
 
     if (from_mdp) { /* from mdp kickoff */
@@ -2647,7 +2685,7 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp)
 
     MDSS_XLOG(ctrl->ndx, req->flags, req->cmds_cnt, from_mdp, current->pid);
 
-    pr_debug("%s:  from_mdp=%d pid=%d\n", __func__, from_mdp, current->pid);
+    printk("%s:  from_mdp=%d pid=%d\n", __func__, from_mdp, current->pid);
 
     if (!(req->flags & CMD_REQ_DMA_TPG)) {
         /*
@@ -2693,6 +2731,7 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp)
         mdss_dsi_set_tx_power_mode(0, &ctrl->panel_data);
 
     if (req->flags & CMD_REQ_RX)
+//        ret = msm_dsi_cmdlist_rx(ctrl, req);
         ret = mdss_dsi_cmdlist_rx(ctrl, req);
     else
         ret = mdss_dsi_cmdlist_tx(ctrl, req);
diff --git a/msm-3.18/drivers/video/msm/mdss/mdss_dsi_panel.c b/msm-3.18/drivers/video/msm/mdss/mdss_dsi_panel.c
index c238c81..7f75280 100644
--- a/msm-3.18/drivers/video/msm/mdss/mdss_dsi_panel.c
+++ b/msm-3.18/drivers/video/msm/mdss/mdss_dsi_panel.c
@@ -943,7 +943,7 @@ static int mdss_dsi_parse_dcs_cmds(struct device_node *np,
             pcmds->link_state = DSI_LP_MODE;
     }
 
-    pr_debug("%s: dcs_cmd=%x len=%d, cmd_cnt=%d link_state=%d\n", __func__,
+    printk("%s: dcs_cmd=%x len=%d, cmd_cnt=%d link_state=%d\n", __func__,
         pcmds->buf[0], pcmds->blen, pcmds->cmd_cnt, pcmds->link_state);
 
     return 0;
@@ -1506,6 +1506,15 @@ static bool mdss_dsi_cmp_panel_reg_v2(struct mdss_dsi_ctrl_pdata *ctrl)
     for (i = 0; i < ctrl->status_cmds.cmd_cnt; i++)
         len += lenp[i];
 
+    printk("deanji mdss_dsi_cmp_panel_reg_v2 len:%d \n",len);
+
+    for (j = 0; j < ctrl->groups; ++j) {
+        for (i = 0; i < len; ++i) {
+                printk("deanji ctrl->return_buf[]:%d  ctrl->status_value[group + i]%d\n",
+                ctrl->return_buf[i],ctrl->status_value[group + i]);
+        }
+    }
+
     for (j = 0; j < ctrl->groups; ++j) {
         for (i = 0; i < len; ++i) {
             if (ctrl->return_buf[i] !=
@@ -1523,10 +1532,12 @@ static bool mdss_dsi_cmp_panel_reg_v2(struct mdss_dsi_ctrl_pdata *ctrl)
 
 static int mdss_dsi_gen_read_status(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
 {
+    printk("deanji %s enter \n",__func__);
     if (!mdss_dsi_cmp_panel_reg_v2(ctrl_pdata)) {
         pr_err("%s: Read back value from panel is incorrect\n",
                             __func__);
         return -EINVAL;
+        //return 1;
     } else {
         return 1;
     }
@@ -1725,6 +1736,9 @@ static void mdss_dsi_parse_esd_params(struct device_node *np,
     pinfo->esd_check_enabled = of_property_read_bool(np,
         "qcom,esd-check-enabled");
 
+    if (!pinfo->esd_check_enabled) printk("deanji esd is no \n");
+    else printk("esd is ok \n");
+
     if (!pinfo->esd_check_enabled)
         return;
 

发布了25 篇原创文章 · 获赞 0 · 访问量 1024

猜你喜欢

转载自blog.csdn.net/jlgcumt/article/details/103050861
esd