summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPadmanabhan Komanduru <pkomandu@codeaurora.org>2017-03-28 18:50:29 +0530
committerPadmanabhan Komanduru <pkomandu@codeaurora.org>2017-04-03 13:20:43 +0530
commit0f766ccdadce98408cfe792cc4e7011c75935d97 (patch)
treeb42fe3b807ec7cc341dcc3715568976eb8d5eeb6
parentfec225ae45829184255a95a00d81cf1387fd6a84 (diff)
msm: mdss: update the recovery sequence for DSI LP_RX_TIMEOUT/BTA_TIMEOUT
The MDP timing generator line count check for DSI error recovery from LP_RX_TIMEOUT/BTA_TIMEOUT needs to be performed after clearing the FORCE_TX_STOP bits for DSI data/clock lanes and before enabling back the DSI video mode engine. Update this sequence to recover the MDP timing generator from halt state due to back pressure before the check for line count. Change-Id: I17ca4ed74e3e11f4e81108a33271f113117ab669 Signed-off-by: Padmanabhan Komanduru <pkomandu@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi_host.c42
1 files changed, 24 insertions, 18 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi_host.c b/drivers/video/fbdev/msm/mdss_dsi_host.c
index 9f4b7eb52492..d9d8f0220986 100644
--- a/drivers/video/fbdev/msm/mdss_dsi_host.c
+++ b/drivers/video/fbdev/msm/mdss_dsi_host.c
@@ -778,6 +778,12 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event)
u32 loop = 10, u_dly = 200;
pr_debug("%s: MDSS DSI CTRL and PHY reset. ctrl-num = %d\n",
__func__, ctrl->ndx);
+
+ if (ctrl->panel_mode == DSI_CMD_MODE) {
+ pr_warn("ctl_phy_reset not applicable for cmd mode\n");
+ return;
+ }
+
if (event == DSI_EV_DLNx_FIFO_OVERFLOW) {
mask = BIT(20); /* clock lane only for overflow recovery */
} else if (event == DSI_EV_LP_RX_TIMEOUT) {
@@ -792,15 +798,6 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event)
ctrl0 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_0);
ctrl1 = mdss_dsi_get_ctrl_by_index(DSI_CTRL_1);
- if (ctrl0->recovery) {
- rc = ctrl0->recovery->fxn(ctrl0->recovery->data,
- MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW);
- if (rc < 0) {
- pr_debug("%s: Target is in suspend/shutdown\n",
- __func__);
- return;
- }
- }
/*
* Disable PHY contention detection and receive.
* Configure the strength ctrl 1 register.
@@ -874,6 +871,15 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event)
MIPI_OUTP(ctrl0->ctrl_base + 0x0ac, ln_ctrl0 & ~mask);
MIPI_OUTP(ctrl1->ctrl_base + 0x0ac, ln_ctrl1 & ~mask);
+ if (ctrl0->recovery) {
+ rc = ctrl0->recovery->fxn(ctrl0->recovery->data,
+ MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW);
+ if (rc < 0) {
+ pr_debug("%s: Target is in suspend/shutdown\n",
+ __func__);
+ return;
+ }
+ }
/* Enable Video mode for DSI controller */
MIPI_OUTP(ctrl0->ctrl_base + 0x004, data0);
MIPI_OUTP(ctrl1->ctrl_base + 0x004, data1);
@@ -890,15 +896,6 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event)
*/
udelay(200);
} else {
- if (ctrl->recovery) {
- rc = ctrl->recovery->fxn(ctrl->recovery->data,
- MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW);
- if (rc < 0) {
- pr_debug("%s: Target is in suspend/shutdown\n",
- __func__);
- return;
- }
- }
/* Disable PHY contention detection and receive */
MIPI_OUTP((ctrl->phy_io.base) + 0x0188, 0);
@@ -951,6 +948,15 @@ static void mdss_dsi_ctl_phy_reset(struct mdss_dsi_ctrl_pdata *ctrl, u32 event)
__func__, ln0);
MIPI_OUTP(ctrl->ctrl_base + 0x0ac, ln_ctrl0 & ~mask);
+ if (ctrl->recovery) {
+ rc = ctrl->recovery->fxn(ctrl->recovery->data,
+ MDP_INTF_DSI_VIDEO_FIFO_OVERFLOW);
+ if (rc < 0) {
+ pr_debug("%s: Target is in suspend/shutdown\n",
+ __func__);
+ return;
+ }
+ }
/* Enable Video mode for DSI controller */
MIPI_OUTP(ctrl->ctrl_base + 0x004, data0);
/* Enable PHY contention detection and receiver */