summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/display/intel_display_driver.c28
-rw-r--r--drivers/gpu/drm/i915/display/intel_display_driver.h1
-rw-r--r--drivers/gpu/drm/i915/i915_driver.c24
3 files changed, 30 insertions, 23 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index 0326a292ee1e..ab0639e8101a 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -675,6 +675,34 @@ void intel_display_driver_unregister(struct intel_display *display)
intel_vga_unregister(display);
}
+void intel_display_driver_shutdown(struct intel_display *display)
+{
+ if (!HAS_DISPLAY(display))
+ return;
+
+ intel_display_power_disable(display);
+
+ drm_client_dev_suspend(display->drm);
+ drm_kms_helper_poll_disable(display->drm);
+
+ intel_display_driver_disable_user_access(display);
+
+ drm_atomic_helper_shutdown(display->drm);
+
+ flush_workqueue(display->wq.cleanup);
+
+ intel_dp_mst_suspend(display);
+
+ intel_encoder_block_all_hpds(display);
+
+ intel_hpd_cancel_work(display);
+
+ intel_display_driver_suspend_access(display);
+
+ intel_encoder_suspend_all(display);
+ intel_encoder_shutdown_all(display);
+}
+
void intel_display_driver_shutdown_late(struct intel_display *display)
{
if (!HAS_DISPLAY(display))
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.h b/drivers/gpu/drm/i915/display/intel_display_driver.h
index 61515577758b..7eca3d17dd82 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.h
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.h
@@ -24,6 +24,7 @@ void intel_display_driver_remove(struct intel_display *display);
void intel_display_driver_remove_noirq(struct intel_display *display);
void intel_display_driver_remove_nogem(struct intel_display *display);
void intel_display_driver_unregister(struct intel_display *display);
+void intel_display_driver_shutdown(struct intel_display *display);
void intel_display_driver_shutdown_late(struct intel_display *display);
int intel_display_driver_pm_suspend(struct intel_display *display);
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 99fa42561989..2458a8a684e9 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -54,7 +54,6 @@
#include "display/intel_bw.h"
#include "display/intel_cdclk.h"
#include "display/intel_crtc.h"
-#include "display/intel_display_core.h"
#include "display/intel_display_device.h"
#include "display/intel_display_driver.h"
#include "display/intel_display_power.h"
@@ -1044,29 +1043,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
disable_rpm_wakeref_asserts(&i915->runtime_pm);
intel_runtime_pm_disable(&i915->runtime_pm);
- intel_display_power_disable(display);
-
- drm_client_dev_suspend(&i915->drm);
- if (intel_display_device_present(display)) {
- drm_kms_helper_poll_disable(&i915->drm);
- intel_display_driver_disable_user_access(display);
-
- drm_atomic_helper_shutdown(&i915->drm);
- }
-
- flush_workqueue(display->wq.cleanup);
-
- intel_dp_mst_suspend(display);
-
- intel_encoder_block_all_hpds(display);
-
- intel_hpd_cancel_work(display);
- if (intel_display_device_present(display))
- intel_display_driver_suspend_access(display);
-
- intel_encoder_suspend_all(display);
- intel_encoder_shutdown_all(display);
+ intel_display_driver_shutdown(display);
intel_irq_suspend(i915);