Skip to content

Commit

Permalink
drm/i915: Move connector registration to driver registration
Browse files Browse the repository at this point in the history
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: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1466773227-7994-4-git-send-email-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson committed Jun 24, 2016
1 parent 1ebaa0b commit 843152b
Show file tree
Hide file tree
Showing 11 changed files with 14 additions and 22 deletions.
2 changes: 2 additions & 0 deletions drivers/gpu/drm/i915/i915_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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);
}
Expand Down
2 changes: 2 additions & 0 deletions drivers/gpu/drm/i915/i915_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 0 additions & 2 deletions drivers/gpu/drm/i915/intel_crt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
12 changes: 10 additions & 2 deletions drivers/gpu/drm/i915/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 0 additions & 2 deletions drivers/gpu/drm/i915/intel_dp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 0 additions & 2 deletions drivers/gpu/drm/i915/intel_dsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1592,8 +1592,6 @@ void intel_dsi_init(struct drm_device *dev)

intel_dsi_add_properties(intel_connector);

drm_connector_register(connector);

return;

err:
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/i915/intel_dvo.c
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,6 @@ void intel_dvo_init(struct drm_device *dev)
intel_dvo->panel_wants_dither = true;
}

drm_connector_register(connector);
return;
}

Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/i915/intel_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1915,7 +1915,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
intel_hdmi_add_properties(intel_hdmi, connector);

intel_connector_attach_encoder(intel_connector, intel_encoder);
drm_connector_register(connector);
intel_hdmi->attached_connector = intel_connector;

/* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/i915/intel_lvds.c
Original file line number Diff line number Diff line change
Expand Up @@ -1134,7 +1134,6 @@ void intel_lvds_init(struct drm_device *dev)
DRM_DEBUG_KMS("lid notifier registration failed\n");
lvds_connector->lid_notifier.notifier_call = NULL;
}
drm_connector_register(connector);

return;

Expand Down
10 changes: 0 additions & 10 deletions drivers/gpu/drm/i915/intel_sdvo.c
Original file line number Diff line number Diff line change
Expand Up @@ -2396,16 +2396,8 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
connector->base.get_hw_state = intel_sdvo_connector_get_hw_state;

intel_connector_attach_encoder(&connector->base, &encoder->base);
ret = drm_connector_register(drm_connector);
if (ret < 0)
goto err1;

return 0;

err1:
drm_connector_cleanup(drm_connector);

return ret;
}

static void
Expand Down Expand Up @@ -2532,7 +2524,6 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
return true;

err:
drm_connector_unregister(connector);
intel_sdvo_destroy(connector);
return false;
}
Expand Down Expand Up @@ -2611,7 +2602,6 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
return true;

err:
drm_connector_unregister(connector);
intel_sdvo_destroy(connector);
return false;
}
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/i915/intel_tv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1642,5 +1642,4 @@ intel_tv_init(struct drm_device *dev)
drm_object_attach_property(&connector->base,
dev->mode_config.tv_bottom_margin_property,
intel_tv->margin[TV_MARGIN_BOTTOM]);
drm_connector_register(connector);
}

0 comments on commit 843152b

Please sign in to comment.