disp: msm: dsi: enable dfps trigger at mdp intf flush
This change allows dynamic refresh trigger to sw trigger and mdp intf flush. With this we can make sure that DSI timing/clock update and mdp intf timings are updated in one vsync. Change-Id: Ic807f498e2e47be6dd0f1e11ff1fc0896a8ec758 Signed-off-by: Vara Reddy <varar@codeaurora.org>
Šī revīzija ir iekļauta:
@@ -990,8 +990,9 @@ int dsi_conn_post_kickoff(struct drm_connector *connector,
|
||||
struct dsi_display_mode adj_mode;
|
||||
struct dsi_display *display;
|
||||
struct dsi_display_ctrl *m_ctrl, *ctrl;
|
||||
int i, rc = 0;
|
||||
int i, rc = 0, ctrl_version;
|
||||
bool enable;
|
||||
struct dsi_dyn_clk_caps *dyn_clk_caps;
|
||||
|
||||
if (!connector || !connector->state) {
|
||||
DSI_ERR("invalid connector or connector state\n");
|
||||
@@ -1007,9 +1008,11 @@ int dsi_conn_post_kickoff(struct drm_connector *connector,
|
||||
c_bridge = to_dsi_bridge(encoder->bridge);
|
||||
adj_mode = c_bridge->dsi_mode;
|
||||
display = c_bridge->display;
|
||||
dyn_clk_caps = &(display->panel->dyn_clk_caps);
|
||||
|
||||
if (adj_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR) {
|
||||
m_ctrl = &display->ctrl[display->clk_master_idx];
|
||||
ctrl_version = m_ctrl->ctrl->version;
|
||||
rc = dsi_ctrl_timing_db_update(m_ctrl->ctrl, false);
|
||||
if (rc) {
|
||||
DSI_ERR("[%s] failed to dfps update rc=%d\n",
|
||||
@@ -1017,6 +1020,17 @@ int dsi_conn_post_kickoff(struct drm_connector *connector,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((ctrl_version >= DSI_CTRL_VERSION_2_5) &&
|
||||
(dyn_clk_caps->maintain_const_fps)) {
|
||||
display_for_each_ctrl(i, display) {
|
||||
ctrl = &display->ctrl[i];
|
||||
rc = dsi_ctrl_wait4dynamic_refresh_done(
|
||||
ctrl->ctrl);
|
||||
if (rc)
|
||||
DSI_ERR("wait4dfps refresh failed\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Update the rest of the controllers */
|
||||
display_for_each_ctrl(i, display) {
|
||||
ctrl = &display->ctrl[i];
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user