Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 843152b4 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Move connector registration to driver registration



Defer connector registration from during construction to the driver
registration phase. This is important for ordering the action correctly,
e.g. not using debugfs before it is ready.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1466773227-7994-4-git-send-email-chris@chris-wilson.co.uk
parent 1ebaa0b9
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1398,6 +1398,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
		I915_WRITE(vgtif_reg(display_ready), VGT_DRV_DISPLAY_READY);

	i915_setup_sysfs(dev);
	intel_modeset_register(dev_priv);

	if (INTEL_INFO(dev_priv)->num_pipes) {
		/* Must be done after probing outputs */
@@ -1430,6 +1431,7 @@ static void i915_driver_unregister(struct drm_i915_private *dev_priv)
	intel_gpu_ips_teardown();
	acpi_video_unregister();
	intel_opregion_unregister(dev_priv);
	intel_modeset_unregister(dev_priv);
	i915_teardown_sysfs(dev_priv->dev);
	i915_gem_shrinker_cleanup(dev_priv);
}
+2 −0
Original line number Diff line number Diff line
@@ -3734,6 +3734,8 @@ extern void intel_modeset_init_hw(struct drm_device *dev);
extern void intel_modeset_init(struct drm_device *dev);
extern void intel_modeset_gem_init(struct drm_device *dev);
extern void intel_modeset_cleanup(struct drm_device *dev);
extern void intel_modeset_register(struct drm_i915_private *dev_priv);
extern void intel_modeset_unregister(struct drm_i915_private *dev_priv);
extern int intel_connector_register(struct drm_connector *);
extern void intel_connector_unregister(struct drm_connector *);
extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state);
+0 −2
Original line number Diff line number Diff line
@@ -880,8 +880,6 @@ void intel_crt_init(struct drm_device *dev)

	drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);

	drm_connector_register(connector);

	if (!I915_HAS_HOTPLUG(dev))
		intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT;

+10 −2
Original line number Diff line number Diff line
@@ -15551,6 +15551,16 @@ void intel_modeset_init_hw(struct drm_device *dev)
	intel_enable_gt_powersave(dev_priv);
}

void intel_modeset_register(struct drm_i915_private *dev_priv)
{
	drm_connector_register_all(dev_priv->dev);
}

void intel_modeset_unregister(struct drm_i915_private *dev_priv)
{
	drm_connector_unregister_all(dev_priv->dev);
}

/*
 * Calculate what we think the watermarks should be for the state we've read
 * out of the hardware and then immediately program those watermarks so that
@@ -16365,8 +16375,6 @@ void intel_modeset_cleanup(struct drm_device *dev)
	/* flush any delayed tasks or pending work */
	flush_scheduled_work();

	drm_connector_unregister_all(dev);

	drm_mode_config_cleanup(dev);

	intel_cleanup_overlay(dev_priv);
+0 −2
Original line number Diff line number Diff line
@@ -5583,7 +5583,6 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
			  edp_panel_vdd_work);

	intel_connector_attach_encoder(intel_connector, intel_encoder);
	drm_connector_register(connector);

	if (HAS_DDI(dev))
		intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
@@ -5639,7 +5638,6 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
	return true;

fail:
	drm_connector_unregister(connector);
	drm_connector_cleanup(connector);

	return false;
Loading