diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index 1ec284df13..8eede091eb 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -3974,7 +3974,7 @@ static void sde_crtc_clear_cached_mixer_cfg(struct drm_crtc *crtc) SDE_EVT32(DRMID(crtc)); } -static void sde_crtc_reset_sw_state_for_ipc(struct drm_crtc *crtc) +void sde_crtc_reset_sw_state(struct drm_crtc *crtc) { struct sde_crtc_state *cstate = to_sde_crtc_state(crtc->state); struct drm_plane *plane; @@ -4077,7 +4077,7 @@ static void sde_crtc_handle_power_event(u32 event_type, void *arg) sde_cp_crtc_pre_ipc(crtc); break; case SDE_POWER_EVENT_POST_DISABLE: - sde_crtc_reset_sw_state_for_ipc(crtc); + sde_crtc_reset_sw_state(crtc); sde_cp_crtc_suspend(crtc); event.type = DRM_EVENT_SDE_POWER; event.length = sizeof(power_on); diff --git a/msm/sde/sde_crtc.h b/msm/sde/sde_crtc.h index 782b60ef31..41ca11bb97 100644 --- a/msm/sde/sde_crtc.h +++ b/msm/sde/sde_crtc.h @@ -917,4 +917,11 @@ void sde_crtc_static_cache_read_kickoff(struct drm_crtc *crtc); int sde_crtc_get_num_datapath(struct drm_crtc *crtc, struct drm_connector *connector); +/** + * sde_crtc_reset_sw_state - reset dirty proerties on crtc and + * planes attached to the crtc + * @crtc: Pointer to DRM crtc object + */ +void sde_crtc_reset_sw_state(struct drm_crtc *crtc); + #endif /* _SDE_CRTC_H_ */ diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index e8682ac1c5..5201d33093 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -1367,6 +1367,9 @@ int sde_kms_vm_pre_release(struct sde_kms *sde_kms, /* disable vblank events */ drm_crtc_vblank_off(crtc); + /* reset sw state */ + sde_crtc_reset_sw_state(crtc); + return rc; }