disp: msm: expose qsync avr step as part of conn mode caps
Add capability to read avr step for each timing mode. This will be in addition to the existing avr-step-list which is defined when dfps is enabled. Expose the avr-step as part of each mode in connector caps to user-mode. Additionally, change the avr_step connector property to enum to give usermode just the capability to enable/disable avr-step and not alter the step value as its fixed from the device tree. Change-Id: I6d7f8e9fcf03f98abef7640fc741e5e1be8597a1 Signed-off-by: Veera Sundaram Sankaran <quic_veeras@quicinc.com>
Cette révision appartient à :
@@ -641,6 +641,7 @@ int dsi_conn_get_mode_info(struct drm_connector *connector,
|
||||
mode_info->mdp_transfer_time_us_max = dsi_mode->priv_info->mdp_transfer_time_us_max;
|
||||
mode_info->disable_rsc_solver = dsi_mode->priv_info->disable_rsc_solver;
|
||||
mode_info->qsync_min_fps = dsi_mode->timing.qsync_min_fps;
|
||||
mode_info->avr_step_fps = dsi_mode->timing.avr_step_fps;
|
||||
mode_info->wd_jitter = dsi_mode->priv_info->wd_jitter;
|
||||
|
||||
mode_info->vpadding = dsi_display->panel->host_config.vpadding;
|
||||
@@ -711,28 +712,6 @@ static const struct drm_bridge_funcs dsi_bridge_ops = {
|
||||
.mode_set = dsi_bridge_mode_set,
|
||||
};
|
||||
|
||||
int dsi_conn_set_avr_step_info(struct dsi_panel *panel, void *info)
|
||||
{
|
||||
u32 i;
|
||||
int idx = 0;
|
||||
size_t buff_sz = PAGE_SIZE;
|
||||
char *buff;
|
||||
|
||||
buff = kzalloc(buff_sz, GFP_KERNEL);
|
||||
if (!buff)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < panel->avr_caps.avr_step_fps_list_len && (idx < (buff_sz - 1)); i++)
|
||||
idx += scnprintf(&buff[idx], buff_sz - idx, "%u@%u ",
|
||||
panel->avr_caps.avr_step_fps_list[i],
|
||||
panel->dfps_caps.dfps_list[i]);
|
||||
|
||||
sde_kms_info_add_keystr(info, "avr step requirement", buff);
|
||||
kfree(buff);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dsi_conn_get_qsync_min_fps(struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct sde_connector_state *sde_conn_state = to_sde_connector_state(conn_state);
|
||||
@@ -750,6 +729,23 @@ int dsi_conn_get_qsync_min_fps(struct drm_connector_state *conn_state)
|
||||
return priv_info->qsync_min_fps;
|
||||
}
|
||||
|
||||
int dsi_conn_get_avr_step_fps(struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct sde_connector_state *sde_conn_state = to_sde_connector_state(conn_state);
|
||||
struct msm_display_mode *msm_mode;
|
||||
struct dsi_display_mode_priv_info *priv_info;
|
||||
|
||||
if (!sde_conn_state)
|
||||
return -EINVAL;
|
||||
|
||||
msm_mode = &sde_conn_state->msm_mode;
|
||||
if (!msm_mode || !msm_mode->private)
|
||||
return -EINVAL;
|
||||
|
||||
priv_info = (struct dsi_display_mode_priv_info *)(msm_mode->private);
|
||||
return priv_info->avr_step_fps;
|
||||
}
|
||||
|
||||
int dsi_conn_set_info_blob(struct drm_connector *connector,
|
||||
void *info, void *display, struct msm_mode_info *mode_info)
|
||||
{
|
||||
@@ -798,8 +794,6 @@ int dsi_conn_set_info_blob(struct drm_connector *connector,
|
||||
switch (panel->panel_mode) {
|
||||
case DSI_OP_VIDEO_MODE:
|
||||
sde_kms_info_add_keystr(info, "panel mode", "video");
|
||||
if (panel->avr_caps.avr_step_fps_list_len)
|
||||
dsi_conn_set_avr_step_info(panel, info);
|
||||
break;
|
||||
case DSI_OP_CMD_MODE:
|
||||
sde_kms_info_add_keystr(info, "panel mode", "command");
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur