|
@@ -15227,6 +15227,23 @@ void intel_connector_unregister(struct drm_connector *connector)
|
|
|
intel_panel_destroy_backlight(connector);
|
|
|
}
|
|
|
|
|
|
+static void intel_hpd_poll_fini(struct drm_device *dev)
|
|
|
+{
|
|
|
+ struct intel_connector *connector;
|
|
|
+ struct drm_connector_list_iter conn_iter;
|
|
|
+
|
|
|
+ /* First disable polling... */
|
|
|
+ drm_kms_helper_poll_fini(dev);
|
|
|
+
|
|
|
+ /* Then kill the work that may have been queued by hpd. */
|
|
|
+ drm_connector_list_iter_begin(dev, &conn_iter);
|
|
|
+ for_each_intel_connector_iter(connector, &conn_iter) {
|
|
|
+ if (connector->modeset_retry_work.func)
|
|
|
+ cancel_work_sync(&connector->modeset_retry_work);
|
|
|
+ }
|
|
|
+ drm_connector_list_iter_end(&conn_iter);
|
|
|
+}
|
|
|
+
|
|
|
void intel_modeset_cleanup(struct drm_device *dev)
|
|
|
{
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev);
|
|
@@ -15247,7 +15264,7 @@ void intel_modeset_cleanup(struct drm_device *dev)
|
|
|
* Due to the hpd irq storm handling the hotplug work can re-arm the
|
|
|
* poll handlers. Hence disable polling after hpd handling is shut down.
|
|
|
*/
|
|
|
- drm_kms_helper_poll_fini(dev);
|
|
|
+ intel_hpd_poll_fini(dev);
|
|
|
|
|
|
/* poll work can call into fbdev, hence clean that up afterwards */
|
|
|
intel_fbdev_fini(dev_priv);
|