*/
 void intel_init_display_hooks(struct drm_i915_private *dev_priv)
 {
-       if (!HAS_DISPLAY(dev_priv))
-               return;
-
-       intel_color_init_hooks(dev_priv);
-       intel_init_cdclk_hooks(dev_priv);
-       intel_audio_hooks_init(dev_priv);
-
-       intel_dpll_init_clock_hook(dev_priv);
-
        if (DISPLAY_VER(dev_priv) >= 9) {
                dev_priv->display.funcs.display = &skl_display_funcs;
        } else if (HAS_DDI(dev_priv)) {
        } else {
                dev_priv->display.funcs.display = &i9xx_display_funcs;
        }
-
-       intel_fdi_init_hook(dev_priv);
 }
 
 int intel_initial_commit(struct drm_device *dev)
 
 #include "intel_display_types.h"
 #include "intel_dmc.h"
 #include "intel_dp.h"
+#include "intel_dpll.h"
 #include "intel_dpll_mgr.h"
 #include "intel_fb.h"
 #include "intel_fbc.h"
        }
 }
 
+void intel_display_driver_early_probe(struct drm_i915_private *i915)
+{
+       if (!HAS_DISPLAY(i915))
+               return;
+
+       intel_color_init_hooks(i915);
+       intel_init_cdclk_hooks(i915);
+       intel_audio_hooks_init(i915);
+       intel_dpll_init_clock_hook(i915);
+       intel_init_display_hooks(i915);
+       intel_fdi_init_hook(i915);
+}
+
 /* part #1: call before irq install */
 int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
 {
 
 
 bool intel_display_driver_probe_defer(struct pci_dev *pdev);
 void intel_display_driver_init_hw(struct drm_i915_private *i915);
+void intel_display_driver_early_probe(struct drm_i915_private *i915);
 int intel_display_driver_probe_noirq(struct drm_i915_private *i915);
 int intel_display_driver_probe_nogem(struct drm_i915_private *i915);
 int intel_display_driver_probe(struct drm_i915_private *i915);
 
        intel_detect_pch(dev_priv);
 
        intel_irq_init(dev_priv);
-       intel_init_display_hooks(dev_priv);
+       intel_display_driver_early_probe(dev_priv);
        intel_clock_gating_hooks_init(dev_priv);
 
        intel_detect_preproduction_hw(dev_priv);