summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev/msm
diff options
context:
space:
mode:
authorSandeep Panda <spanda@codeaurora.org>2017-02-07 14:55:56 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2017-02-12 08:36:14 -0800
commit73ab4eae31b0b64a6cfca5c68032224c80d333bc (patch)
treebce6ac5a9ca1f4935f6c832e67d11315c79043a8 /drivers/video/fbdev/msm
parent88fee0f3817730e279872a381b760833a146aa5b (diff)
msm: mdss: mask DSI FIFO overflow errors during BTA operation
For some DSI panels where porch values are less, if BTA operation does not finish in BLLP period, then fake overflow errors are expected. So disable DSI FIFO overflow errors before triggering BTA and enable it back once BTA acknowledgment is received for video mode panels. Change-Id: If63ac6435f5786c834fe797478c38a9a2f51076b Signed-off-by: Sandeep Panda <spanda@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev/msm')
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi_host.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi_host.c b/drivers/video/fbdev/msm/mdss_dsi_host.c
index e75e4e187de0..d57558a1b52d 100644
--- a/drivers/video/fbdev/msm/mdss_dsi_host.c
+++ b/drivers/video/fbdev/msm/mdss_dsi_host.c
@@ -1437,6 +1437,7 @@ int mdss_dsi_bta_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
{
int ret = 0;
unsigned long flag;
+ int ignore_underflow = 0;
if (ctrl_pdata == NULL) {
pr_err("%s: Invalid input data\n", __func__);
@@ -1451,6 +1452,9 @@ int mdss_dsi_bta_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
mutex_lock(&ctrl_pdata->cmd_mutex);
+ if (ctrl_pdata->panel_mode == DSI_VIDEO_MODE)
+ ignore_underflow = 1;
+
pr_debug("%s: Checking BTA status\n", __func__);
mdss_dsi_clk_ctrl(ctrl_pdata, ctrl_pdata->dsi_clk_handle,
@@ -1459,6 +1463,9 @@ int mdss_dsi_bta_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
reinit_completion(&ctrl_pdata->bta_comp);
mdss_dsi_enable_irq(ctrl_pdata, DSI_BTA_TERM);
spin_unlock_irqrestore(&ctrl_pdata->mdp_lock, flag);
+ /* mask out overflow errors */
+ if (ignore_underflow)
+ mdss_dsi_set_reg(ctrl_pdata, 0x10c, 0x0f0000, 0x0f0000);
MIPI_OUTP(ctrl_pdata->ctrl_base + 0x098, 0x01); /* trigger */
wmb();
@@ -1469,6 +1476,13 @@ int mdss_dsi_bta_status_check(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
pr_err("%s: DSI BTA error: %i\n", __func__, ret);
}
+ if (ignore_underflow) {
+ /* clear pending overflow status */
+ mdss_dsi_set_reg(ctrl_pdata, 0xc, 0xffffffff, 0x44440000);
+ /* restore overflow isr */
+ mdss_dsi_set_reg(ctrl_pdata, 0x10c, 0x0f0000, 0);
+ }
+
mdss_dsi_clk_ctrl(ctrl_pdata, ctrl_pdata->dsi_clk_handle,
MDSS_DSI_ALL_CLKS, MDSS_DSI_CLK_OFF);
pr_debug("%s: BTA done with ret: %d\n", __func__, ret);