Loading msm/dsi/dsi_display.c +2 −4 Original line number Diff line number Diff line Loading @@ -4931,10 +4931,8 @@ static int dsi_display_set_mode_sub(struct dsi_display *display, } SDE_EVT32(mode->dsi_mode_flags, mode->panel_mode); if (mode->dsi_mode_flags & DSI_MODE_FLAG_POMS) { display->config.panel_mode = mode->panel_mode; display->panel->panel_mode = mode->panel_mode; } rc = dsi_panel_get_host_cfg_for_mode(display->panel, mode, &display->config); Loading msm/sde/sde_encoder.c +21 −7 Original line number Diff line number Diff line Loading @@ -2065,17 +2065,17 @@ static void sde_encoder_virt_mode_switch(struct drm_encoder *drm_enc, if (intf_mode == INTF_MODE_CMD) { for (i = 0; i < sde_enc->num_phys_encs; i++) sde_enc->phys_encs[i] = sde_enc->phys_vid_encs[i]; SDE_DEBUG_ENC(sde_enc, "switch to video physical encoder\n"); SDE_EVT32(DRMID(&sde_enc->base), intf_mode, msm_is_mode_seamless_poms(adj_mode), SDE_EVTLOG_FUNC_CASE1); SDE_EVT32(DRMID(&sde_enc->base), intf_mode, adj_mode->flags, adj_mode->private_flags, SDE_EVTLOG_FUNC_CASE1); } else if (intf_mode == INTF_MODE_VIDEO) { for (i = 0; i < sde_enc->num_phys_encs; i++) sde_enc->phys_encs[i] = sde_enc->phys_cmd_encs[i]; SDE_EVT32(DRMID(&sde_enc->base), intf_mode, msm_is_mode_seamless_poms(adj_mode), SDE_EVTLOG_FUNC_CASE2); SDE_DEBUG_ENC(sde_enc, "switch to command physical encoder\n"); SDE_EVT32(DRMID(&sde_enc->base), intf_mode, adj_mode->flags, adj_mode->private_flags, SDE_EVTLOG_FUNC_CASE2); } } Loading Loading @@ -2168,6 +2168,19 @@ static void _sde_encoder_virt_populate_hw_res(struct drm_encoder *drm_enc) } } static bool sde_encoder_detect_panel_mode_switch( struct drm_display_mode *adj_mode, enum sde_intf_mode intf_mode) { /* don't rely on POMS flag as it may not be set for power-on modeset */ if ((intf_mode == INTF_MODE_CMD && adj_mode->flags & DRM_MODE_FLAG_VID_MODE_PANEL) || (intf_mode == INTF_MODE_VIDEO && adj_mode->flags & DRM_MODE_FLAG_CMD_MODE_PANEL)) return true; return false; } static int sde_encoder_virt_modeset_rc(struct drm_encoder *drm_enc, struct drm_display_mode *adj_mode, bool pre_modeset) { Loading Loading @@ -2199,7 +2212,8 @@ static int sde_encoder_virt_modeset_rc(struct drm_encoder *drm_enc, * modeset to guarantee previous kickoff has finished. */ sde_encoder_dce_disable(sde_enc); } else if (msm_is_mode_seamless_poms(adj_mode)) { } else if (sde_encoder_detect_panel_mode_switch(adj_mode, intf_mode)) { _sde_encoder_modeset_helper_locked(drm_enc, SDE_ENC_RC_EVENT_PRE_MODESET); sde_encoder_virt_mode_switch(drm_enc, intf_mode, Loading Loading
msm/dsi/dsi_display.c +2 −4 Original line number Diff line number Diff line Loading @@ -4931,10 +4931,8 @@ static int dsi_display_set_mode_sub(struct dsi_display *display, } SDE_EVT32(mode->dsi_mode_flags, mode->panel_mode); if (mode->dsi_mode_flags & DSI_MODE_FLAG_POMS) { display->config.panel_mode = mode->panel_mode; display->panel->panel_mode = mode->panel_mode; } rc = dsi_panel_get_host_cfg_for_mode(display->panel, mode, &display->config); Loading
msm/sde/sde_encoder.c +21 −7 Original line number Diff line number Diff line Loading @@ -2065,17 +2065,17 @@ static void sde_encoder_virt_mode_switch(struct drm_encoder *drm_enc, if (intf_mode == INTF_MODE_CMD) { for (i = 0; i < sde_enc->num_phys_encs; i++) sde_enc->phys_encs[i] = sde_enc->phys_vid_encs[i]; SDE_DEBUG_ENC(sde_enc, "switch to video physical encoder\n"); SDE_EVT32(DRMID(&sde_enc->base), intf_mode, msm_is_mode_seamless_poms(adj_mode), SDE_EVTLOG_FUNC_CASE1); SDE_EVT32(DRMID(&sde_enc->base), intf_mode, adj_mode->flags, adj_mode->private_flags, SDE_EVTLOG_FUNC_CASE1); } else if (intf_mode == INTF_MODE_VIDEO) { for (i = 0; i < sde_enc->num_phys_encs; i++) sde_enc->phys_encs[i] = sde_enc->phys_cmd_encs[i]; SDE_EVT32(DRMID(&sde_enc->base), intf_mode, msm_is_mode_seamless_poms(adj_mode), SDE_EVTLOG_FUNC_CASE2); SDE_DEBUG_ENC(sde_enc, "switch to command physical encoder\n"); SDE_EVT32(DRMID(&sde_enc->base), intf_mode, adj_mode->flags, adj_mode->private_flags, SDE_EVTLOG_FUNC_CASE2); } } Loading Loading @@ -2168,6 +2168,19 @@ static void _sde_encoder_virt_populate_hw_res(struct drm_encoder *drm_enc) } } static bool sde_encoder_detect_panel_mode_switch( struct drm_display_mode *adj_mode, enum sde_intf_mode intf_mode) { /* don't rely on POMS flag as it may not be set for power-on modeset */ if ((intf_mode == INTF_MODE_CMD && adj_mode->flags & DRM_MODE_FLAG_VID_MODE_PANEL) || (intf_mode == INTF_MODE_VIDEO && adj_mode->flags & DRM_MODE_FLAG_CMD_MODE_PANEL)) return true; return false; } static int sde_encoder_virt_modeset_rc(struct drm_encoder *drm_enc, struct drm_display_mode *adj_mode, bool pre_modeset) { Loading Loading @@ -2199,7 +2212,8 @@ static int sde_encoder_virt_modeset_rc(struct drm_encoder *drm_enc, * modeset to guarantee previous kickoff has finished. */ sde_encoder_dce_disable(sde_enc); } else if (msm_is_mode_seamless_poms(adj_mode)) { } else if (sde_encoder_detect_panel_mode_switch(adj_mode, intf_mode)) { _sde_encoder_modeset_helper_locked(drm_enc, SDE_ENC_RC_EVENT_PRE_MODESET); sde_encoder_virt_mode_switch(drm_enc, intf_mode, Loading