diff options
| author | Ray Zhang <rayz@codeaurora.org> | 2014-09-01 15:52:51 +0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:33:38 -0700 |
| commit | e2e79b5fe8f8e43ba0143c2a78e5df16edfa5400 (patch) | |
| tree | 784886b21f9439a17c02a473a80b6d2000ebcbcb | |
| parent | eca7092bac9800c9a54ec19f805d23506d93e354 (diff) | |
msm: mdss: remove unnecessary lock in checking DSI status
Since DSI status checking is purely DSI operation, it's not
necessary to acquire ov_lock in case of video mode, otherwise
this function could block other overlay functions, therefore
introducing extra delay.
CRs-fixed: 714531
Change-Id: I5051ff3495d516b405cd3bf5dc32ea712187975e
Signed-off-by: Ray Zhang <rayz@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/dsi_status_6g.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/video/fbdev/msm/dsi_status_6g.c b/drivers/video/fbdev/msm/dsi_status_6g.c index 75d62e072c85..133ba1c469a0 100644 --- a/drivers/video/fbdev/msm/dsi_status_6g.c +++ b/drivers/video/fbdev/msm/dsi_status_6g.c @@ -31,6 +31,7 @@ void mdss_check_dsi_ctrl_status(struct work_struct *work, uint32_t interval) { struct dsi_status_data *pstatus_data = NULL; struct mdss_panel_data *pdata = NULL; + struct mipi_panel_info *mipi = NULL; struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; struct mdss_overlay_private *mdp5_data = NULL; struct mdss_mdp_ctl *ctl = NULL; @@ -48,6 +49,7 @@ void mdss_check_dsi_ctrl_status(struct work_struct *work, uint32_t interval) pr_err("%s: Panel data not available\n", __func__); return; } + mipi = &pdata->panel_info.mipi; ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); @@ -73,14 +75,20 @@ void mdss_check_dsi_ctrl_status(struct work_struct *work, uint32_t interval) } mutex_lock(&ctrl_pdata->mutex); - if (ctl->shared_lock) - mutex_lock(ctl->shared_lock); - mutex_lock(&mdp5_data->ov_lock); + + /* + * TODO: Because mdss_dsi_cmd_mdp_busy has made sure DMA to + * be idle in mdss_dsi_cmdlist_commit, it is not necessary + * to acquire ov_lock in case of video mode. Removing this + * lock to fix issues so that ESD thread would not block other + * overlay operations. Need refine this lock for command mode + */ + if (mipi->mode == DSI_CMD_MODE) + mutex_lock(&mdp5_data->ov_lock); if (mdss_panel_is_power_off(pstatus_data->mfd->panel_power_state)) { - mutex_unlock(&mdp5_data->ov_lock); - if (ctl->shared_lock) - mutex_unlock(ctl->shared_lock); + if (mipi->mode == DSI_CMD_MODE) + mutex_unlock(&mdp5_data->ov_lock); mutex_unlock(&ctrl_pdata->mutex); pr_err("%s: DSI turning off, avoiding panel status check\n", __func__); @@ -106,9 +114,8 @@ void mdss_check_dsi_ctrl_status(struct work_struct *work, uint32_t interval) ret = ctrl_pdata->check_status(ctrl_pdata); mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF); - mutex_unlock(&mdp5_data->ov_lock); - if (ctl->shared_lock) - mutex_unlock(ctl->shared_lock); + if (mipi->mode == DSI_CMD_MODE) + mutex_unlock(&mdp5_data->ov_lock); mutex_unlock(&ctrl_pdata->mutex); if ((pstatus_data->mfd->panel_power_state == MDSS_PANEL_POWER_ON)) { |
