disp: msm: add qsync refresh rate support per mode
This change adds support for qsync min refresh rate per timing mode and populates qsync min refresh rate based on the current fps when qsync is enabled. Change-Id: I191d1d72e95dd065c8c0b56a6100104c00c6d8f6 Signed-off-by: Yashwanth <yvulapu@codeaurora.org>
This commit is contained in:
@@ -6838,6 +6838,7 @@ int dsi_display_get_modes(struct dsi_display *display,
|
||||
struct dsi_dyn_clk_caps *dyn_clk_caps;
|
||||
int i, start, end, rc = -EINVAL;
|
||||
int dsc_modes = 0, nondsc_modes = 0;
|
||||
struct dsi_qsync_capabilities *qsync_caps;
|
||||
|
||||
if (!display || !out_modes) {
|
||||
DSI_ERR("Invalid params\n");
|
||||
@@ -6868,6 +6869,7 @@ int dsi_display_get_modes(struct dsi_display *display,
|
||||
goto error;
|
||||
}
|
||||
|
||||
qsync_caps = &(display->panel->qsync_caps);
|
||||
dyn_clk_caps = &(display->panel->dyn_clk_caps);
|
||||
|
||||
timing_mode_count = display->panel->num_timing_nodes;
|
||||
@@ -6963,6 +6965,14 @@ int dsi_display_get_modes(struct dsi_display *display,
|
||||
memcpy(sub_mode, &display_mode, sizeof(display_mode));
|
||||
array_idx++;
|
||||
|
||||
/*
|
||||
* Populate mode qsync min fps from panel min qsync fps dt property
|
||||
* in video mode & in command mode where per mode qsync min fps is
|
||||
* not defined.
|
||||
*/
|
||||
if (!sub_mode->timing.qsync_min_fps && qsync_caps->qsync_min_fps)
|
||||
sub_mode->timing.qsync_min_fps = qsync_caps->qsync_min_fps;
|
||||
|
||||
if (!dfps_caps.dfps_support || !support_video_mode)
|
||||
continue;
|
||||
|
||||
@@ -6970,6 +6980,10 @@ int dsi_display_get_modes(struct dsi_display *display,
|
||||
curr_refresh_rate = sub_mode->timing.refresh_rate;
|
||||
sub_mode->timing.refresh_rate = dfps_caps.dfps_list[i];
|
||||
|
||||
/* Override with qsync min fps list in dfps usecases */
|
||||
if (qsync_caps->qsync_min_fps && qsync_caps->qsync_min_fps_list_len)
|
||||
sub_mode->timing.qsync_min_fps = qsync_caps->qsync_min_fps_list[i];
|
||||
|
||||
dsi_display_get_dfps_timing(display, sub_mode,
|
||||
curr_refresh_rate);
|
||||
sub_mode->panel_mode_caps = DSI_OP_VIDEO_MODE;
|
||||
@@ -7080,25 +7094,6 @@ int dsi_display_get_default_lms(void *dsi_display, u32 *num_lm)
|
||||
return rc;
|
||||
}
|
||||
|
||||
int dsi_display_get_qsync_min_fps(void *display_dsi, u32 mode_fps)
|
||||
{
|
||||
struct dsi_display *display = (struct dsi_display *)display_dsi;
|
||||
struct dsi_panel *panel;
|
||||
u32 i;
|
||||
|
||||
if (display == NULL || display->panel == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
panel = display->panel;
|
||||
for (i = 0; i < panel->dfps_caps.dfps_list_len; i++) {
|
||||
if (panel->dfps_caps.dfps_list[i] == mode_fps)
|
||||
return panel->qsync_caps.qsync_min_fps_list[i];
|
||||
}
|
||||
SDE_EVT32(mode_fps);
|
||||
DSI_DEBUG("Invalid mode_fps %d\n", mode_fps);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
int dsi_display_get_avr_step_req_fps(void *display_dsi, u32 mode_fps)
|
||||
{
|
||||
struct dsi_display *display = (struct dsi_display *)display_dsi;
|
||||
@@ -8061,11 +8056,6 @@ static int dsi_display_qsync(struct dsi_display *display, bool enable)
|
||||
int i;
|
||||
int rc = 0;
|
||||
|
||||
if (!display->panel->qsync_caps.qsync_min_fps) {
|
||||
DSI_ERR("%s:ERROR: qsync set, but no fps\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
mutex_lock(&display->display_lock);
|
||||
|
||||
display_for_each_ctrl(i, display) {
|
||||
|
Reference in New Issue
Block a user