Commit a261b246 authored by Daniel Vetter's avatar Daniel Vetter

drm/i915: disable all crtcs at suspend time

We need this to avoid confusing the hw state readout code with the cpt
pch plls at resume time: We'd read the new pipe state (which is
disabled), but still believe that we have a life pll connected to that
pipe (from before the suspend). Hence properly disable pipes to clear
out all the residual state.

This has the neat side-effect that we don't enable ports prematurely
by restoring bogus state from the saved register values.
Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
Signed-Off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent ea9d758d
...@@ -470,6 +470,9 @@ static int i915_drm_freeze(struct drm_device *dev) ...@@ -470,6 +470,9 @@ static int i915_drm_freeze(struct drm_device *dev)
"GEM idle failed, resume might fail\n"); "GEM idle failed, resume might fail\n");
return error; return error;
} }
intel_modeset_disable(dev);
drm_irq_uninstall(dev); drm_irq_uninstall(dev);
} }
......
...@@ -3545,6 +3545,16 @@ static void intel_crtc_disable(struct drm_crtc *crtc) ...@@ -3545,6 +3545,16 @@ static void intel_crtc_disable(struct drm_crtc *crtc)
} }
} }
void intel_modeset_disable(struct drm_device *dev)
{
struct drm_crtc *crtc;
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
if (crtc->enabled)
intel_crtc_disable(crtc);
}
}
void intel_encoder_noop(struct drm_encoder *encoder) void intel_encoder_noop(struct drm_encoder *encoder)
{ {
} }
......
...@@ -446,6 +446,7 @@ struct intel_set_config { ...@@ -446,6 +446,7 @@ struct intel_set_config {
extern bool intel_set_mode(struct drm_crtc *crtc, struct drm_display_mode *mode, extern bool intel_set_mode(struct drm_crtc *crtc, struct drm_display_mode *mode,
int x, int y, struct drm_framebuffer *old_fb); int x, int y, struct drm_framebuffer *old_fb);
extern void intel_modeset_disable(struct drm_device *dev);
extern void intel_crtc_load_lut(struct drm_crtc *crtc); extern void intel_crtc_load_lut(struct drm_crtc *crtc);
extern void intel_crtc_update_dpms(struct drm_crtc *crtc); extern void intel_crtc_update_dpms(struct drm_crtc *crtc);
extern void intel_encoder_noop(struct drm_encoder *encoder); extern void intel_encoder_noop(struct drm_encoder *encoder);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment