Merge "disp: msm: dsi: add qsync min fps val in dsi display mode priv info"

This commit is contained in:
qctecmdr
2021-09-17 03:46:41 -07:00
committed by Gerrit - the friendly Code Review server
6 changed files with 23 additions and 25 deletions

View File

@@ -611,6 +611,7 @@ struct dsi_host_config {
* @mdp_transfer_time_us: Specifies the mdp transfer time for command mode * @mdp_transfer_time_us: Specifies the mdp transfer time for command mode
* panels in microseconds. * panels in microseconds.
* @dsi_transfer_time_us: Specifies the dsi transfer time for cmd panels. * @dsi_transfer_time_us: Specifies the dsi transfer time for cmd panels.
* @qsync_min_fps: Qsync min fps value for the mode
* @clk_rate_hz: DSI bit clock per lane in hz. * @clk_rate_hz: DSI bit clock per lane in hz.
* @min_dsi_clk_hz: Min dsi clk per lane to transfer frame in vsync time. * @min_dsi_clk_hz: Min dsi clk per lane to transfer frame in vsync time.
* @bit_clk_list: List of dynamic bit clock rates supported. * @bit_clk_list: List of dynamic bit clock rates supported.
@@ -636,6 +637,7 @@ struct dsi_display_mode_priv_info {
u32 panel_prefill_lines; u32 panel_prefill_lines;
u32 mdp_transfer_time_us; u32 mdp_transfer_time_us;
u32 dsi_transfer_time_us; u32 dsi_transfer_time_us;
u32 qsync_min_fps;
u64 clk_rate_hz; u64 clk_rate_hz;
u64 min_dsi_clk_hz; u64 min_dsi_clk_hz;
struct msm_dyn_clk_list bit_clk_list; struct msm_dyn_clk_list bit_clk_list;

View File

@@ -6978,6 +6978,11 @@ int dsi_display_get_modes(struct dsi_display *display,
if (!sub_mode->timing.qsync_min_fps && qsync_caps->qsync_min_fps) if (!sub_mode->timing.qsync_min_fps && qsync_caps->qsync_min_fps)
sub_mode->timing.qsync_min_fps = qsync_caps->qsync_min_fps; sub_mode->timing.qsync_min_fps = qsync_caps->qsync_min_fps;
/*
* Qsync min fps for the mode will be populated in the timing info
* in dsi_panel_get_mode function.
*/
sub_mode->priv_info->qsync_min_fps = sub_mode->timing.qsync_min_fps;
if (!dfps_caps.dfps_support || !support_video_mode) if (!dfps_caps.dfps_support || !support_video_mode)
continue; continue;
@@ -6986,8 +6991,10 @@ int dsi_display_get_modes(struct dsi_display *display,
sub_mode->timing.refresh_rate = dfps_caps.dfps_list[i]; sub_mode->timing.refresh_rate = dfps_caps.dfps_list[i];
/* Override with qsync min fps list in dfps usecases */ /* Override with qsync min fps list in dfps usecases */
if (qsync_caps->qsync_min_fps && qsync_caps->qsync_min_fps_list_len) 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]; sub_mode->timing.qsync_min_fps = qsync_caps->qsync_min_fps_list[i];
sub_mode->priv_info->qsync_min_fps = sub_mode->timing.qsync_min_fps;
}
dsi_display_get_dfps_timing(display, sub_mode, dsi_display_get_dfps_timing(display, sub_mode,
curr_refresh_rate); curr_refresh_rate);

View File

@@ -706,30 +706,21 @@ int dsi_conn_set_avr_step_info(struct dsi_panel *panel, void *info)
return 0; return 0;
} }
int dsi_conn_get_qsync_min_fps(void *display_dsi, struct drm_connector_state *conn_state) int dsi_conn_get_qsync_min_fps(struct drm_connector_state *conn_state)
{ {
struct dsi_display *display = (struct dsi_display *)display_dsi; struct sde_connector_state *sde_conn_state = to_sde_connector_state(conn_state);
int rc = 0; struct msm_display_mode *msm_mode;
struct dsi_display_mode partial_dsi_mode, *dsi_mode; struct dsi_display_mode_priv_info *priv_info;
struct msm_sub_mode new_sub_mode;
struct sde_connector_state *sde_conn_state;
struct drm_display_mode *drm_mode;
if (!display || !display->drm_conn || !conn_state) if (!sde_conn_state)
return -EINVAL; return -EINVAL;
sde_conn_state = to_sde_connector_state(conn_state); msm_mode = &sde_conn_state->msm_mode;
drm_mode = sde_conn_state->msm_mode.base; if (!msm_mode || !msm_mode->private)
convert_to_dsi_mode(drm_mode, &partial_dsi_mode); return -EINVAL;
new_sub_mode.dsc_mode = sde_connector_get_property(conn_state, CONNECTOR_PROP_DSC_MODE);
rc = dsi_display_find_mode(display, &partial_dsi_mode, &new_sub_mode, &dsi_mode); priv_info = (struct dsi_display_mode_priv_info *)(msm_mode->private);
if (rc) { return priv_info->qsync_min_fps;
DSI_ERR("invalid mode\n");
return rc;
}
return dsi_mode->timing.qsync_min_fps;
} }
int dsi_conn_set_info_blob(struct drm_connector *connector, int dsi_conn_set_info_blob(struct drm_connector *connector,

View File

@@ -174,10 +174,9 @@ void dsi_conn_set_submode_blob_info(struct drm_connector *conn,
/** /**
* dsi_conn_get_qsync_min_fps() - get qsync min fps for given fps * dsi_conn_get_qsync_min_fps() - get qsync min fps for given fps
* @display: Handle to display.
* @conn_state: Pointer to drm_connector_state structure * @conn_state: Pointer to drm_connector_state structure
* *
* Return: Qsync min fps rate or -ve error code. * Return: Qsync min fps rate or -ve error code.
*/ */
int dsi_conn_get_qsync_min_fps(void *dsi_display, struct drm_connector_state *conn_state); int dsi_conn_get_qsync_min_fps(struct drm_connector_state *conn_state);
#endif /* _DSI_DRM_H_ */ #endif /* _DSI_DRM_H_ */

View File

@@ -399,11 +399,10 @@ struct sde_connector_ops {
/** /**
* get_qsync_min_fps - Get qsync min fps from qsync-min-fps-list * get_qsync_min_fps - Get qsync min fps from qsync-min-fps-list
* @display: Pointer to private display structure
* @conn_state: Pointer to drm_connector_state structure * @conn_state: Pointer to drm_connector_state structure
* Returns: Qsync min fps value on success * Returns: Qsync min fps value on success
*/ */
int (*get_qsync_min_fps)(void *display, struct drm_connector_state *conn_state); int (*get_qsync_min_fps)(struct drm_connector_state *conn_state);
/** /**
* get_avr_step_req - Get the required avr_step for given fps rate * get_avr_step_req - Get the required avr_step for given fps rate

View File

@@ -1053,7 +1053,7 @@ static void _sde_encoder_get_qsync_fps_callback(struct drm_encoder *drm_enc,
sde_conn = to_sde_connector(sde_enc->cur_master->connector); sde_conn = to_sde_connector(sde_enc->cur_master->connector);
if (sde_conn->ops.get_qsync_min_fps) if (sde_conn->ops.get_qsync_min_fps)
rc = sde_conn->ops.get_qsync_min_fps(sde_conn->display, conn_state); rc = sde_conn->ops.get_qsync_min_fps(conn_state);
if (rc < 0) { if (rc < 0) {
SDE_ERROR("invalid qsync min fps %d\n", rc); SDE_ERROR("invalid qsync min fps %d\n", rc);