Merge "drm/msm/dsi: add flag for mode switch with fps"
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

commit
4fbdc64598
@@ -96,6 +96,7 @@ enum dsi_op_mode {
|
|||||||
* @DSI_MODE_FLAG_POMS:
|
* @DSI_MODE_FLAG_POMS:
|
||||||
* Seamless transition is dynamic panel operating mode switch
|
* Seamless transition is dynamic panel operating mode switch
|
||||||
* @DSI_MODE_FLAG_DYN_CLK: Seamless transition is dynamic clock change
|
* @DSI_MODE_FLAG_DYN_CLK: Seamless transition is dynamic clock change
|
||||||
|
* @DSI_MODE_FLAG_DMS_FPS: Seamless fps only transition in Dynamic Mode Switch
|
||||||
*/
|
*/
|
||||||
enum dsi_mode_flags {
|
enum dsi_mode_flags {
|
||||||
DSI_MODE_FLAG_SEAMLESS = BIT(0),
|
DSI_MODE_FLAG_SEAMLESS = BIT(0),
|
||||||
@@ -105,6 +106,7 @@ enum dsi_mode_flags {
|
|||||||
DSI_MODE_FLAG_VRR = BIT(4),
|
DSI_MODE_FLAG_VRR = BIT(4),
|
||||||
DSI_MODE_FLAG_POMS = BIT(5),
|
DSI_MODE_FLAG_POMS = BIT(5),
|
||||||
DSI_MODE_FLAG_DYN_CLK = BIT(6),
|
DSI_MODE_FLAG_DYN_CLK = BIT(6),
|
||||||
|
DSI_MODE_FLAG_DMS_FPS = BIT(7),
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -4387,6 +4387,30 @@ static bool dsi_display_validate_mode_seamless(struct dsi_display *display,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dsi_display_validate_dms_fps(struct dsi_display_mode *cur_mode,
|
||||||
|
struct dsi_display_mode *to_mode)
|
||||||
|
{
|
||||||
|
u32 cur_fps, to_fps;
|
||||||
|
u32 cur_h_active, to_h_active;
|
||||||
|
u32 cur_v_active, to_v_active;
|
||||||
|
|
||||||
|
cur_fps = cur_mode->timing.refresh_rate;
|
||||||
|
to_fps = to_mode->timing.refresh_rate;
|
||||||
|
cur_h_active = cur_mode->timing.h_active;
|
||||||
|
cur_v_active = cur_mode->timing.v_active;
|
||||||
|
to_h_active = to_mode->timing.h_active;
|
||||||
|
to_v_active = to_mode->timing.v_active;
|
||||||
|
|
||||||
|
if ((cur_h_active == to_h_active) && (cur_v_active == to_v_active) &&
|
||||||
|
(cur_fps != to_fps)) {
|
||||||
|
to_mode->dsi_mode_flags |= DSI_MODE_FLAG_DMS_FPS;
|
||||||
|
DSI_DEBUG("DMS Modeset with FPS change\n");
|
||||||
|
} else {
|
||||||
|
to_mode->dsi_mode_flags &= ~DSI_MODE_FLAG_DMS_FPS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int dsi_display_set_mode_sub(struct dsi_display *display,
|
static int dsi_display_set_mode_sub(struct dsi_display *display,
|
||||||
struct dsi_display_mode *mode,
|
struct dsi_display_mode *mode,
|
||||||
u32 flags)
|
u32 flags)
|
||||||
@@ -4403,6 +4427,7 @@ static int dsi_display_set_mode_sub(struct dsi_display *display,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDE_EVT32(mode->dsi_mode_flags);
|
||||||
if (mode->dsi_mode_flags & DSI_MODE_FLAG_POMS) {
|
if (mode->dsi_mode_flags & DSI_MODE_FLAG_POMS) {
|
||||||
display->config.panel_mode = mode->panel_mode;
|
display->config.panel_mode = mode->panel_mode;
|
||||||
display->panel->panel_mode = mode->panel_mode;
|
display->panel->panel_mode = mode->panel_mode;
|
||||||
@@ -4462,9 +4487,12 @@ static int dsi_display_set_mode_sub(struct dsi_display *display,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((mode->dsi_mode_flags & DSI_MODE_FLAG_DMS) &&
|
if ((mode->dsi_mode_flags & DSI_MODE_FLAG_DMS) &&
|
||||||
(display->panel->panel_mode == DSI_OP_CMD_MODE))
|
(display->panel->panel_mode == DSI_OP_CMD_MODE)) {
|
||||||
atomic_set(&display->clkrate_change_pending, 1);
|
atomic_set(&display->clkrate_change_pending, 1);
|
||||||
|
|
||||||
|
dsi_display_validate_dms_fps(display->panel->cur_mode, mode);
|
||||||
|
}
|
||||||
|
|
||||||
if (priv_info->phy_timing_len) {
|
if (priv_info->phy_timing_len) {
|
||||||
display_for_each_ctrl(i, display) {
|
display_for_each_ctrl(i, display) {
|
||||||
ctrl = &display->ctrl[i];
|
ctrl = &display->ctrl[i];
|
||||||
@@ -7134,7 +7162,9 @@ int dsi_display_enable(struct dsi_display *display)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode->priv_info->dsc_enabled) {
|
/* Block sending pps command if modeset is due to fps difference */
|
||||||
|
if ((mode->priv_info->dsc_enabled) &&
|
||||||
|
!(mode->dsi_mode_flags & DSI_MODE_FLAG_DMS_FPS)) {
|
||||||
mode->priv_info->dsc.pic_width *= display->ctrl_count;
|
mode->priv_info->dsc.pic_width *= display->ctrl_count;
|
||||||
rc = dsi_panel_update_pps(display->panel);
|
rc = dsi_panel_update_pps(display->panel);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
|
Reference in New Issue
Block a user