disp: msm: add support for seamless dsc switch

This change adds logic to determine dsc switch based on
the connector property "CONNECTOR_PROP_DSC_MODE" and
performs seamless DSC switch if there is any change in
DSC configuration. The connector property is populated
in msm_sub_mode based on which suitable mode is selected.

Change-Id: Ifc4931f16dfb814781bc1d72b103e09103e6bfee
Signed-off-by: Yashwanth <yvulapu@codeaurora.org>
此提交包含在:
Yashwanth
2021-04-26 13:37:48 +05:30
提交者 Gerrit - the friendly Code Review server
父節點 ffc7cdbe08
當前提交 7e03fb61fd
共有 17 個檔案被更改,包括 156 行新增36 行删除

查看文件

@@ -66,6 +66,11 @@ static const struct drm_prop_enum_list e_qsync_mode[] = {
{SDE_RM_QSYNC_CONTINUOUS_MODE, "continuous"},
{SDE_RM_QSYNC_ONE_SHOT_MODE, "one_shot"},
};
static const struct drm_prop_enum_list e_dsc_mode[] = {
{MSM_DISPLAY_DSC_MODE_NONE, "none"},
{MSM_DISPLAY_DSC_MODE_ENABLED, "dsc_enabled"},
{MSM_DISPLAY_DSC_MODE_DISABLED, "dsc_disabled"},
};
static const struct drm_prop_enum_list e_frame_trigger_mode[] = {
{FRAME_DONE_WAIT_DEFAULT, "default"},
{FRAME_DONE_WAIT_SERIALIZE, "serialize_frame_trigger"},
@@ -441,6 +446,7 @@ int sde_connector_set_msm_mode(struct drm_connector_state *conn_state,
int sde_connector_get_mode_info(struct drm_connector *conn,
const struct drm_display_mode *drm_mode,
struct msm_sub_mode *sub_mode,
struct msm_mode_info *mode_info)
{
struct sde_connector *sde_conn;
@@ -455,7 +461,7 @@ int sde_connector_get_mode_info(struct drm_connector *conn,
sde_connector_get_avail_res_info(conn, &avail_res);
return sde_conn->ops.get_mode_info(conn, drm_mode,
return sde_conn->ops.get_mode_info(conn, drm_mode, sub_mode,
mode_info, sde_conn->display, &avail_res);
}
@@ -2631,7 +2637,7 @@ static int sde_connector_populate_mode_info(struct drm_connector *conn,
memset(&mode_info, 0, sizeof(mode_info));
rc = sde_connector_get_mode_info(&c_conn->base, mode,
rc = sde_connector_get_mode_info(&c_conn->base, mode, NULL,
&mode_info);
if (rc) {
SDE_ERROR_CONN(c_conn,
@@ -2892,6 +2898,9 @@ static int _sde_connector_install_properties(struct drm_device *dev,
CONNECTOR_PROP_AVR_STEP);
}
msm_property_install_enum(&c_conn->property_info, "dsc_mode", 0,
0, e_dsc_mode, ARRAY_SIZE(e_dsc_mode), 0, CONNECTOR_PROP_DSC_MODE);
if (display_info->capabilities & MSM_DISPLAY_CAP_CMD_MODE)
msm_property_install_enum(&c_conn->property_info,
"frame_trigger_mode", 0, 0,