disp: msm: remove use of drm_display_mode vrefresh

Use of drm_display_mode vrefresh is being deprecated in
upstream DRM framework. Downstream driver need to use
drm_mode_vrefresh API from now on.

This change removes dependency on drm_display_mode vrefresh
and replaces it with drm_mode_vrefresh API in SDE, DSI and
DP driver. In addition, it also modifies drm_display_mode clock
to align with upstream approach where an uncompressed mode clock
is required to match drm_mode_vrefresh API.

Change-Id: Ie972a2e140adfd81c4e68df8e7bc69feaaca22e1
Signed-off-by: Nilaan Gunabalachandran <ngunabal@codeaurora.org>
Signed-off-by: Amine Najahi <anajahi@codeaurora.org>
This commit is contained in:
Amine Najahi
2021-01-12 17:50:03 -05:00
rodzic ab3f86f918
commit 08358fd857
13 zmienionych plików z 54 dodań i 50 usunięć

Wyświetl plik

@@ -51,9 +51,7 @@ static void convert_to_dsi_mode(const struct drm_display_mode *drm_mode,
dsi_mode->timing.v_front_porch = drm_mode->vsync_start -
drm_mode->vdisplay;
dsi_mode->timing.refresh_rate = drm_mode->vrefresh;
dsi_mode->pixel_clk_khz = drm_mode->clock;
dsi_mode->timing.refresh_rate = drm_mode_vrefresh(drm_mode);
dsi_mode->timing.h_sync_polarity =
!!(drm_mode->flags & DRM_MODE_FLAG_PHSYNC);
@@ -123,8 +121,8 @@ void dsi_convert_to_drm_mode(const struct dsi_display_mode *dsi_mode,
dsi_mode->timing.v_sync_width;
drm_mode->vtotal = drm_mode->vsync_end + dsi_mode->timing.v_back_porch;
drm_mode->vrefresh = dsi_mode->timing.refresh_rate;
drm_mode->clock = dsi_mode->pixel_clk_khz;
drm_mode->clock = drm_mode->htotal * drm_mode->vtotal * dsi_mode->timing.refresh_rate;
drm_mode->clock /= 1000;
if (dsi_mode->timing.h_sync_polarity)
drm_mode->flags |= DRM_MODE_FLAG_PHSYNC;
@@ -132,9 +130,9 @@ void dsi_convert_to_drm_mode(const struct dsi_display_mode *dsi_mode,
drm_mode->flags |= DRM_MODE_FLAG_PVSYNC;
/* set mode name */
snprintf(drm_mode->name, DRM_DISPLAY_MODE_LEN, "%dx%dx%dx%d%s",
snprintf(drm_mode->name, DRM_DISPLAY_MODE_LEN, "%dx%dx%dx%u%s",
drm_mode->hdisplay, drm_mode->vdisplay,
drm_mode->vrefresh, drm_mode->clock,
drm_mode_vrefresh(drm_mode), dsi_mode->pixel_clk_khz,
panel_caps);
}
@@ -421,6 +419,7 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge,
}
convert_to_dsi_mode(mode, &dsi_mode);
msm_parse_mode_priv_info(&conn_state->msm_mode, &dsi_mode);
/*
* retrieve dsi mode from dsi driver's cache since not safe to take
@@ -536,7 +535,7 @@ u64 dsi_drm_find_bit_clk_rate(void *display,
if ((dsi_mode->timing.v_active == drm_mode->vdisplay) &&
(dsi_mode->timing.h_active == drm_mode->hdisplay) &&
(dsi_mode->pixel_clk_khz == drm_mode->clock) &&
(dsi_mode->timing.refresh_rate == drm_mode->vrefresh)) {
(dsi_mode->timing.refresh_rate == drm_mode_vrefresh(drm_mode))) {
bit_clk_rate = dsi_mode->timing.clk_rate_hz;
break;
}
@@ -571,7 +570,7 @@ int dsi_conn_get_mode_info(struct drm_connector *connector,
mode_info->jitter_numer = dsi_mode->priv_info->panel_jitter_numer;
mode_info->jitter_denom = dsi_mode->priv_info->panel_jitter_denom;
mode_info->dfps_maxfps = dsi_drm_get_dfps_maxfps(display);
mode_info->clk_rate = dsi_drm_find_bit_clk_rate(display, drm_mode);
mode_info->clk_rate = dsi_mode->timing.clk_rate_hz;
mode_info->panel_mode_caps = dsi_mode->panel_mode_caps;
mode_info->mdp_transfer_time_us =
dsi_mode->priv_info->mdp_transfer_time_us;
@@ -1004,6 +1003,7 @@ enum drm_mode_status dsi_conn_mode_valid(struct drm_connector *connector,
{
struct dsi_display_mode dsi_mode;
struct dsi_display_mode *full_dsi_mode = NULL;
struct sde_connector_state *conn_state;
int rc;
if (!connector || !mode) {
@@ -1012,6 +1012,11 @@ enum drm_mode_status dsi_conn_mode_valid(struct drm_connector *connector,
}
convert_to_dsi_mode(mode, &dsi_mode);
conn_state = to_sde_connector_state(connector->state);
if (conn_state)
msm_parse_mode_priv_info(&conn_state->msm_mode, &dsi_mode);
rc = dsi_display_find_mode(display, &dsi_mode, &full_dsi_mode);
if (rc) {
DSI_ERR("could not find mode %s\n", mode->name);