|
@@ -693,8 +693,6 @@ static int i915_load_modeset_init(struct drm_device *dev)
|
|
/* Only enable hotplug handling once the fbdev is fully set up. */
|
|
/* Only enable hotplug handling once the fbdev is fully set up. */
|
|
intel_hpd_init(dev_priv);
|
|
intel_hpd_init(dev_priv);
|
|
|
|
|
|
- drm_kms_helper_poll_init(dev);
|
|
|
|
-
|
|
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
cleanup_gem:
|
|
cleanup_gem:
|
|
@@ -1255,6 +1253,13 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
|
|
* cannot run before the connectors are registered.
|
|
* cannot run before the connectors are registered.
|
|
*/
|
|
*/
|
|
intel_fbdev_initial_config_async(dev);
|
|
intel_fbdev_initial_config_async(dev);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * We need to coordinate the hotplugs with the asynchronous fbdev
|
|
|
|
+ * configuration, for which we use the fbdev->async_cookie.
|
|
|
|
+ */
|
|
|
|
+ if (INTEL_INFO(dev_priv)->num_pipes)
|
|
|
|
+ drm_kms_helper_poll_init(dev);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1266,6 +1271,13 @@ static void i915_driver_unregister(struct drm_i915_private *dev_priv)
|
|
intel_fbdev_unregister(dev_priv);
|
|
intel_fbdev_unregister(dev_priv);
|
|
intel_audio_deinit(dev_priv);
|
|
intel_audio_deinit(dev_priv);
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * After flushing the fbdev (incl. a late async config which will
|
|
|
|
+ * have delayed queuing of a hotplug event), then flush the hotplug
|
|
|
|
+ * events.
|
|
|
|
+ */
|
|
|
|
+ drm_kms_helper_poll_fini(&dev_priv->drm);
|
|
|
|
+
|
|
intel_gpu_ips_teardown();
|
|
intel_gpu_ips_teardown();
|
|
acpi_video_unregister();
|
|
acpi_video_unregister();
|
|
intel_opregion_unregister(dev_priv);
|
|
intel_opregion_unregister(dev_priv);
|