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

committed by
Gerrit - the friendly Code Review server

commit
c0dad8fa08
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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,
|
||||||
|
@@ -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_ */
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user