diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2017-02-15 17:01:36 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-02-15 17:01:36 -0800 |
| commit | b574c4b1dc6cd964fca7330446485fc61e42cb5b (patch) | |
| tree | 250bb5865dfb95d9295ddbccf69bf2572fc6054e /drivers/video/fbdev/msm | |
| parent | c8617c203ff8d3d6c6ec37a0666a5bed8c631431 (diff) | |
| parent | 73ab4eae31b0b64a6cfca5c68032224c80d333bc (diff) | |
Merge "msm: mdss: mask DSI FIFO overflow errors during BTA operation"
Diffstat (limited to 'drivers/video/fbdev/msm')
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi_host.c | 14 |
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); |
