intel_display_driver_shutdown() and intel_display_driver_pm_suspend()
are quite similar. Abstract a shared function to call from both.

This is intentionally just the first non-functional step. More gradual
changes will follow.

Reviewed-by: Ville Syrjälä <[email protected]>
Signed-off-by: Jani Nikula <[email protected]>
---
 .../drm/i915/display/intel_display_driver.c   | 45 ++++++++++---------
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c 
b/drivers/gpu/drm/i915/display/intel_display_driver.c
index ab0639e8101a..5f6c3d741196 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -66,6 +66,8 @@
 #include "intel_wm.h"
 #include "skl_watermark.h"
 
+static int __intel_display_driver_pm_suspend(struct intel_display *display, 
bool shutdown);
+
 bool intel_display_driver_probe_defer(struct pci_dev *pdev)
 {
        struct drm_privacy_screen *privacy_screen;
@@ -680,18 +682,7 @@ 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_display_driver_pm_suspend(display, true);
 
        intel_encoder_block_all_hpds(display);
 
@@ -720,10 +711,9 @@ void intel_display_driver_shutdown_late(struct 
intel_display *display)
  * turn all crtc's off, but do not adjust state
  * This has to be paired with a call to intel_modeset_setup_hw_state.
  */
-int intel_display_driver_pm_suspend(struct intel_display *display)
+static int __intel_display_driver_pm_suspend(struct intel_display *display, 
bool shutdown)
 {
-       struct drm_atomic_commit *state;
-       int ret;
+       int ret = 0;
 
        if (!HAS_DISPLAY(display))
                return 0;
@@ -739,13 +729,19 @@ int intel_display_driver_pm_suspend(struct intel_display 
*display)
        drm_kms_helper_poll_disable(display->drm);
        intel_display_driver_disable_user_access(display);
 
-       state = drm_atomic_helper_suspend(display->drm);
-       ret = PTR_ERR_OR_ZERO(state);
-       if (ret)
-               drm_err(display->drm, "Suspending crtc's failed with %i\n",
-                       ret);
-       else
-               display->restore.modeset_state = state;
+       if (shutdown) {
+               drm_atomic_helper_shutdown(display->drm);
+       } else {
+               struct drm_atomic_commit *state;
+
+               state = drm_atomic_helper_suspend(display->drm);
+               ret = PTR_ERR_OR_ZERO(state);
+               if (ret)
+                       drm_err(display->drm, "Suspending crtc's failed with 
%i\n",
+                               ret);
+               else
+                       display->restore.modeset_state = state;
+       }
 
        /* ensure all DPT VMAs have been unpinned for intel_dpt_suspend() */
        flush_workqueue(display->wq.cleanup);
@@ -755,6 +751,11 @@ int intel_display_driver_pm_suspend(struct intel_display 
*display)
        return ret;
 }
 
+int intel_display_driver_pm_suspend(struct intel_display *display)
+{
+       return __intel_display_driver_pm_suspend(display, false);
+}
+
 void intel_display_driver_pm_suspend_late(struct intel_display *display, bool 
s2idle)
 {
        if (!HAS_DISPLAY(display))
-- 
2.47.3

Reply via email to