|
@@ -860,6 +860,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
|
|
|
|
|
|
for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
|
|
for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
|
|
const struct drm_crtc_helper_funcs *funcs;
|
|
const struct drm_crtc_helper_funcs *funcs;
|
|
|
|
+ int ret;
|
|
|
|
|
|
/* Shut down everything that needs a full modeset. */
|
|
/* Shut down everything that needs a full modeset. */
|
|
if (!drm_atomic_crtc_needs_modeset(new_crtc_state))
|
|
if (!drm_atomic_crtc_needs_modeset(new_crtc_state))
|
|
@@ -883,6 +884,14 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
|
|
funcs->disable(crtc);
|
|
funcs->disable(crtc);
|
|
else
|
|
else
|
|
funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
|
|
funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
|
|
|
|
+
|
|
|
|
+ if (!(dev->irq_enabled && dev->num_crtcs))
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ ret = drm_crtc_vblank_get(crtc);
|
|
|
|
+ WARN_ONCE(ret != -EINVAL, "driver forgot to call drm_crtc_vblank_off()\n");
|
|
|
|
+ if (ret == 0)
|
|
|
|
+ drm_crtc_vblank_put(crtc);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|