disp: msm: dsi: update the phy timings and clocks together
In the case of DMS the dsi phy timings get updated in dsi_display_set_mode() and the clock in pre_kickoff(). This brings a mismatch between phy timing and the clock between the above two operations. For example, during dsi_display_enable(), the HW is programmed with the new phy timings but the clock is still running at the older rate. This mismatch can lead to screen flicker or error. Update the phy timings and clocks together during pre_kickoff(). Change-Id: I30198e91aba5879b1773103c088d94175639790c Signed-off-by: Rajeev Nandan <quic_rajeevny@quicinc.com>
Dieser Commit ist enthalten in:

committet von
Ayushi Makhija

Ursprung
953d70e49b
Commit
d6e2761b94
@@ -5284,7 +5284,12 @@ static int dsi_display_set_mode_sub(struct dsi_display *display,
|
||||
dsi_display_validate_dms_fps(display->panel->cur_mode, mode);
|
||||
}
|
||||
|
||||
if (priv_info->phy_timing_len) {
|
||||
if (priv_info->phy_timing_len &&
|
||||
!atomic_read(&display->clkrate_change_pending)) {
|
||||
/*
|
||||
* In case of clkrate change, the PHY timing update will happen
|
||||
* together with the clock update.
|
||||
*/
|
||||
display_for_each_ctrl(i, display) {
|
||||
ctrl = &display->ctrl[i];
|
||||
rc = dsi_phy_set_timing_params(ctrl->phy,
|
||||
@@ -8611,9 +8616,12 @@ int dsi_display_pre_kickoff(struct drm_connector *connector,
|
||||
struct dsi_display *display,
|
||||
struct msm_display_kickoff_params *params)
|
||||
{
|
||||
struct dsi_display_mode *mode;
|
||||
int rc = 0, ret = 0;
|
||||
int i;
|
||||
|
||||
mode = display->panel->cur_mode;
|
||||
|
||||
/* check and setup MISR */
|
||||
if (display->misr_enable)
|
||||
_dsi_display_setup_misr(display);
|
||||
@@ -8641,6 +8649,24 @@ int dsi_display_pre_kickoff(struct drm_connector *connector,
|
||||
goto wait_failure;
|
||||
}
|
||||
|
||||
if (mode->priv_info->phy_timing_len) {
|
||||
display_for_each_ctrl(i, display) {
|
||||
struct dsi_display_ctrl *ctrl;
|
||||
bool commit_phy_timing = false;
|
||||
|
||||
if (mode->dsi_mode_flags & DSI_MODE_FLAG_DMS)
|
||||
commit_phy_timing = true;
|
||||
|
||||
ctrl = &display->ctrl[i];
|
||||
ret = dsi_phy_set_timing_params(ctrl->phy,
|
||||
mode->priv_info->phy_timing_val,
|
||||
mode->priv_info->phy_timing_len,
|
||||
commit_phy_timing);
|
||||
if (ret)
|
||||
DSI_ERR("failed to add DSI PHY timing params\n");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't check the return value so as not to impact DRM commit
|
||||
* when error occurs.
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren