diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index 1fdba43ad0..880f5389ce 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -3985,6 +3985,7 @@ retry: DRM_ERROR("failed to get crtc %d state\n", conn->state->crtc->base.id); drm_connector_list_iter_end(&conn_iter); + ret = -EINVAL; goto unlock; } @@ -4023,6 +4024,12 @@ unlock: drm_modeset_backoff(&ctx); goto retry; } + + if ((ret || !num_crtcs) && sde_kms->suspend_state) { + drm_atomic_state_put(sde_kms->suspend_state); + sde_kms->suspend_state = NULL; + } + drm_modeset_drop_locks(&ctx); drm_modeset_acquire_fini(&ctx); @@ -4061,7 +4068,8 @@ static int sde_kms_pm_resume(struct device *dev) SDE_EVT32(sde_kms->suspend_state != NULL); - drm_mode_config_reset(ddev); + if (sde_kms->suspend_state) + drm_mode_config_reset(ddev); drm_modeset_acquire_init(&ctx, 0); retry: