/* Always safe in the mode setting case. */
        /* FIXME: do pre/post-mode set stuff in core KMS code */
        dev->vblank_disable_allowed = 1;
+       if (INTEL_INFO(dev)->num_pipes == 0) {
+               dev_priv->mm.suspended = 0;
+               return 0;
+       }
 
        ret = intel_fbdev_init(dev);
        if (ret)
        if (IS_VALLEYVIEW(dev))
                dev_priv->num_plane = 2;
 
-       ret = drm_vblank_init(dev, INTEL_INFO(dev)->num_pipes);
-       if (ret)
-               goto out_gem_unload;
+       if (INTEL_INFO(dev)->num_pipes) {
+               ret = drm_vblank_init(dev, INTEL_INFO(dev)->num_pipes);
+               if (ret)
+                       goto out_gem_unload;
+       }
 
        /* Start out suspended */
        dev_priv->mm.suspended = 1;
 
        i915_setup_sysfs(dev);
 
-       /* Must be done after probing outputs */
-       intel_opregion_init(dev);
-       acpi_video_register();
+       if (INTEL_INFO(dev)->num_pipes) {
+               /* Must be done after probing outputs */
+               intel_opregion_init(dev);
+               acpi_video_register();
+       }
 
        if (IS_GEN5(dev))
                intel_gpu_ips_init(dev_priv);
 
        struct drm_mode_config *config = &dev->mode_config;
        struct drm_plane *plane;
 
+       if (INTEL_INFO(dev)->num_pipes == 0)
+               return;
+
        drm_modeset_lock_all(dev);
 
        ret = drm_fb_helper_restore_fbdev_mode(&dev_priv->fbdev->helper);