disp: msm: sde: correct num_datapath during PM resume with CWB

In PM resume with CWB concurrency usecase, crtc pointer in
conn->state is NULL since drm_mode_config_reset operation is
performed on pm_resume. This change relies on conn_mask in
new_crtc_state for primary connector retrieval and also adds
get_num_lm_from_mode callback to DSI for LM count retrieval
from dsi panel topology. Existing get_mode_info api cannot
retrieve the topology info because mode->priv_info is NULL.
This occurs as WB encoder is added in the drm encoder_list
before primary encoder, introduced as part of commit d28ebf05f4
("disp: msm: sde: populate WB display encoder list before dsi").

Change-Id: I55358fd88ab778bd81475cf3628be13335de1cb5
Signed-off-by: Jayaprakash Madisetty <jmadiset@codeaurora.org>
Signed-off-by: Samantha Tran <samtran@codeaurora.org>
Этот коммит содержится в:
Jayaprakash Madisetty
2021-04-01 18:04:32 +05:30
коммит произвёл Samantha Tran
родитель 6a01182c1e
Коммит a29369e224
8 изменённых файлов: 95 добавлений и 13 удалений

Просмотреть файл

@@ -549,6 +549,29 @@ u32 dsi_drm_get_dfps_maxfps(void *display)
return dfps_maxfps;
}
int dsi_conn_get_lm_from_mode(void *display, const struct drm_display_mode *drm_mode)
{
struct dsi_display *dsi_display = display;
struct dsi_display_mode dsi_mode, *panel_dsi_mode;
int rc = -EINVAL;
if (!dsi_display || !drm_mode) {
DSI_ERR("Invalid params %d %d\n", !display, !drm_mode);
return rc;
}
convert_to_dsi_mode(drm_mode, &dsi_mode);
rc = dsi_display_find_mode(dsi_display, &dsi_mode, NULL, &panel_dsi_mode);
if (rc) {
DSI_ERR("mode not found %d\n", rc);
drm_mode_debug_printmodeline(drm_mode);
return rc;
}
return panel_dsi_mode->priv_info->topology.num_lm;
}
int dsi_conn_get_mode_info(struct drm_connector *connector,
const struct drm_display_mode *drm_mode,
struct msm_sub_mode *sub_mode,