Commit c191eca1 authored by Chris Wilson's avatar Chris Wilson Committed by Daniel Vetter

drm/i915: Move intel_connector->unregister to connector->early_unregister

We now have a connector->func that serves the same purpose as our own
intel_connector->unregister vfunc allowing us to unwrap ourselves and
use drm_connector_register() (and friends) as the central function.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1466160034-12173-2-git-send-email-chris@chris-wilson.co.uk
parent bee7fb15
...@@ -3673,7 +3673,7 @@ extern void intel_modeset_init_hw(struct drm_device *dev); ...@@ -3673,7 +3673,7 @@ extern void intel_modeset_init_hw(struct drm_device *dev);
extern void intel_modeset_init(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_gem_init(struct drm_device *dev);
extern void intel_modeset_cleanup(struct drm_device *dev); extern void intel_modeset_cleanup(struct drm_device *dev);
extern void intel_connector_unregister(struct intel_connector *); extern void intel_connector_unregister(struct drm_connector *);
extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state); extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state);
extern void intel_display_resume(struct drm_device *dev); extern void intel_display_resume(struct drm_device *dev);
extern void i915_redisable_vga(struct drm_device *dev); extern void i915_redisable_vga(struct drm_device *dev);
......
...@@ -743,6 +743,7 @@ static const struct drm_connector_funcs intel_crt_connector_funcs = { ...@@ -743,6 +743,7 @@ static const struct drm_connector_funcs intel_crt_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms, .dpms = drm_atomic_helper_connector_dpms,
.detect = intel_crt_detect, .detect = intel_crt_detect,
.fill_modes = drm_helper_probe_single_connector_modes, .fill_modes = drm_helper_probe_single_connector_modes,
.early_unregister = intel_connector_unregister,
.destroy = intel_crt_destroy, .destroy = intel_crt_destroy,
.set_property = intel_crt_set_property, .set_property = intel_crt_set_property,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
...@@ -875,7 +876,6 @@ void intel_crt_init(struct drm_device *dev) ...@@ -875,7 +876,6 @@ void intel_crt_init(struct drm_device *dev)
crt->base.get_hw_state = intel_crt_get_hw_state; crt->base.get_hw_state = intel_crt_get_hw_state;
} }
intel_connector->get_hw_state = intel_connector_get_hw_state; intel_connector->get_hw_state = intel_connector_get_hw_state;
intel_connector->unregister = intel_connector_unregister;
drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);
......
...@@ -16219,18 +16219,14 @@ void intel_modeset_gem_init(struct drm_device *dev) ...@@ -16219,18 +16219,14 @@ void intel_modeset_gem_init(struct drm_device *dev)
intel_backlight_register(dev); intel_backlight_register(dev);
} }
void intel_connector_unregister(struct intel_connector *intel_connector) void intel_connector_unregister(struct drm_connector *connector)
{ {
struct drm_connector *connector = &intel_connector->base;
intel_panel_destroy_backlight(connector); intel_panel_destroy_backlight(connector);
drm_connector_unregister(connector);
} }
void intel_modeset_cleanup(struct drm_device *dev) void intel_modeset_cleanup(struct drm_device *dev)
{ {
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_connector *connector;
intel_disable_gt_powersave(dev_priv); intel_disable_gt_powersave(dev_priv);
...@@ -16256,9 +16252,7 @@ void intel_modeset_cleanup(struct drm_device *dev) ...@@ -16256,9 +16252,7 @@ void intel_modeset_cleanup(struct drm_device *dev)
/* flush any delayed tasks or pending work */ /* flush any delayed tasks or pending work */
flush_scheduled_work(); flush_scheduled_work();
/* destroy the backlight and sysfs files before encoders/connectors */ drm_connector_unregister_all(dev);
for_each_intel_connector(dev, connector)
connector->unregister(connector);
drm_mode_config_cleanup(dev); drm_mode_config_cleanup(dev);
......
...@@ -1177,7 +1177,6 @@ static void intel_aux_reg_init(struct intel_dp *intel_dp) ...@@ -1177,7 +1177,6 @@ static void intel_aux_reg_init(struct intel_dp *intel_dp)
static void static void
intel_dp_aux_fini(struct intel_dp *intel_dp) intel_dp_aux_fini(struct intel_dp *intel_dp)
{ {
drm_dp_aux_unregister(&intel_dp->aux);
kfree(intel_dp->aux.name); kfree(intel_dp->aux.name);
} }
...@@ -1212,15 +1211,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp, struct intel_connector *connector) ...@@ -1212,15 +1211,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp, struct intel_connector *connector)
return 0; return 0;
} }
static void
intel_dp_connector_unregister(struct intel_connector *intel_connector)
{
struct intel_dp *intel_dp = intel_attached_dp(&intel_connector->base);
intel_dp_aux_fini(intel_dp);
intel_connector_unregister(intel_connector);
}
static int static int
intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates) intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
{ {
...@@ -4456,6 +4446,13 @@ intel_dp_set_property(struct drm_connector *connector, ...@@ -4456,6 +4446,13 @@ intel_dp_set_property(struct drm_connector *connector,
return 0; return 0;
} }
static void
intel_dp_connector_unregister(struct drm_connector *connector)
{
drm_dp_aux_unregister(&intel_attached_dp(connector)->aux);
intel_connector_unregister(connector);
}
static void static void
intel_dp_connector_destroy(struct drm_connector *connector) intel_dp_connector_destroy(struct drm_connector *connector)
{ {
...@@ -4466,6 +4463,8 @@ intel_dp_connector_destroy(struct drm_connector *connector) ...@@ -4466,6 +4463,8 @@ intel_dp_connector_destroy(struct drm_connector *connector)
if (!IS_ERR_OR_NULL(intel_connector->edid)) if (!IS_ERR_OR_NULL(intel_connector->edid))
kfree(intel_connector->edid); kfree(intel_connector->edid);
intel_dp_aux_fini(intel_attached_dp(connector));
/* Can't call is_edp() since the encoder may have been destroyed /* Can't call is_edp() since the encoder may have been destroyed
* already. */ * already. */
if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
...@@ -4572,6 +4571,7 @@ static const struct drm_connector_funcs intel_dp_connector_funcs = { ...@@ -4572,6 +4571,7 @@ static const struct drm_connector_funcs intel_dp_connector_funcs = {
.fill_modes = drm_helper_probe_single_connector_modes, .fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_dp_set_property, .set_property = intel_dp_set_property,
.atomic_get_property = intel_connector_atomic_get_property, .atomic_get_property = intel_connector_atomic_get_property,
.early_unregister = intel_dp_connector_unregister,
.destroy = intel_dp_connector_destroy, .destroy = intel_dp_connector_destroy,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
...@@ -5487,7 +5487,6 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, ...@@ -5487,7 +5487,6 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
else else
intel_connector->get_hw_state = intel_connector_get_hw_state; intel_connector->get_hw_state = intel_connector_get_hw_state;
intel_connector->unregister = intel_dp_connector_unregister;
/* Set up the hotplug pin. */ /* Set up the hotplug pin. */
switch (port) { switch (port) {
......
...@@ -336,6 +336,7 @@ static const struct drm_connector_funcs intel_dp_mst_connector_funcs = { ...@@ -336,6 +336,7 @@ static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
.fill_modes = drm_helper_probe_single_connector_modes, .fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_dp_mst_set_property, .set_property = intel_dp_mst_set_property,
.atomic_get_property = intel_connector_atomic_get_property, .atomic_get_property = intel_connector_atomic_get_property,
.early_unregister = intel_connector_unregister,
.destroy = intel_dp_mst_connector_destroy, .destroy = intel_dp_mst_connector_destroy,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
...@@ -455,7 +456,6 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo ...@@ -455,7 +456,6 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
drm_connector_init(dev, connector, &intel_dp_mst_connector_funcs, DRM_MODE_CONNECTOR_DisplayPort); drm_connector_init(dev, connector, &intel_dp_mst_connector_funcs, DRM_MODE_CONNECTOR_DisplayPort);
drm_connector_helper_add(connector, &intel_dp_mst_connector_helper_funcs); drm_connector_helper_add(connector, &intel_dp_mst_connector_helper_funcs);
intel_connector->unregister = intel_connector_unregister;
intel_connector->get_hw_state = intel_dp_mst_get_hw_state; intel_connector->get_hw_state = intel_dp_mst_get_hw_state;
intel_connector->mst_port = intel_dp; intel_connector->mst_port = intel_dp;
intel_connector->port = port; intel_connector->port = port;
...@@ -489,7 +489,7 @@ static void intel_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr, ...@@ -489,7 +489,7 @@ static void intel_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
struct intel_connector *intel_connector = to_intel_connector(connector); struct intel_connector *intel_connector = to_intel_connector(connector);
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
intel_connector->unregister(intel_connector); drm_connector_unregister(connector);
/* need to nuke the connector */ /* need to nuke the connector */
drm_modeset_lock_all(dev); drm_modeset_lock_all(dev);
......
...@@ -242,14 +242,6 @@ struct intel_connector { ...@@ -242,14 +242,6 @@ struct intel_connector {
* and active (i.e. dpms ON state). */ * and active (i.e. dpms ON state). */
bool (*get_hw_state)(struct intel_connector *); bool (*get_hw_state)(struct intel_connector *);
/*
* Removes all interfaces through which the connector is accessible
* - like sysfs, debugfs entries -, so that no new operations can be
* started on the connector. Also makes sure all currently pending
* operations finish before returing.
*/
void (*unregister)(struct intel_connector *);
/* Panel info for eDP and LVDS */ /* Panel info for eDP and LVDS */
struct intel_panel panel; struct intel_panel panel;
......
...@@ -1384,6 +1384,7 @@ static const struct drm_connector_helper_funcs intel_dsi_connector_helper_funcs ...@@ -1384,6 +1384,7 @@ static const struct drm_connector_helper_funcs intel_dsi_connector_helper_funcs
static const struct drm_connector_funcs intel_dsi_connector_funcs = { static const struct drm_connector_funcs intel_dsi_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms, .dpms = drm_atomic_helper_connector_dpms,
.detect = intel_dsi_detect, .detect = intel_dsi_detect,
.early_unregister = intel_connector_unregister,
.destroy = intel_dsi_connector_destroy, .destroy = intel_dsi_connector_destroy,
.fill_modes = drm_helper_probe_single_connector_modes, .fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_dsi_set_property, .set_property = intel_dsi_set_property,
...@@ -1460,7 +1461,6 @@ void intel_dsi_init(struct drm_device *dev) ...@@ -1460,7 +1461,6 @@ void intel_dsi_init(struct drm_device *dev)
intel_encoder->get_config = intel_dsi_get_config; intel_encoder->get_config = intel_dsi_get_config;
intel_connector->get_hw_state = intel_connector_get_hw_state; intel_connector->get_hw_state = intel_connector_get_hw_state;
intel_connector->unregister = intel_connector_unregister;
/* /*
* On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI
......
...@@ -341,6 +341,7 @@ static void intel_dvo_destroy(struct drm_connector *connector) ...@@ -341,6 +341,7 @@ static void intel_dvo_destroy(struct drm_connector *connector)
static const struct drm_connector_funcs intel_dvo_connector_funcs = { static const struct drm_connector_funcs intel_dvo_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms, .dpms = drm_atomic_helper_connector_dpms,
.detect = intel_dvo_detect, .detect = intel_dvo_detect,
.early_unregister = intel_connector_unregister,
.destroy = intel_dvo_destroy, .destroy = intel_dvo_destroy,
.fill_modes = drm_helper_probe_single_connector_modes, .fill_modes = drm_helper_probe_single_connector_modes,
.atomic_get_property = intel_connector_atomic_get_property, .atomic_get_property = intel_connector_atomic_get_property,
...@@ -447,7 +448,6 @@ void intel_dvo_init(struct drm_device *dev) ...@@ -447,7 +448,6 @@ void intel_dvo_init(struct drm_device *dev)
intel_encoder->compute_config = intel_dvo_compute_config; intel_encoder->compute_config = intel_dvo_compute_config;
intel_encoder->pre_enable = intel_dvo_pre_enable; intel_encoder->pre_enable = intel_dvo_pre_enable;
intel_connector->get_hw_state = intel_dvo_connector_get_hw_state; intel_connector->get_hw_state = intel_dvo_connector_get_hw_state;
intel_connector->unregister = intel_connector_unregister;
/* Now, try to find a controller */ /* Now, try to find a controller */
for (i = 0; i < ARRAY_SIZE(intel_dvo_devices); i++) { for (i = 0; i < ARRAY_SIZE(intel_dvo_devices); i++) {
......
...@@ -1774,6 +1774,7 @@ static const struct drm_connector_funcs intel_hdmi_connector_funcs = { ...@@ -1774,6 +1774,7 @@ static const struct drm_connector_funcs intel_hdmi_connector_funcs = {
.fill_modes = drm_helper_probe_single_connector_modes, .fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_hdmi_set_property, .set_property = intel_hdmi_set_property,
.atomic_get_property = intel_connector_atomic_get_property, .atomic_get_property = intel_connector_atomic_get_property,
.early_unregister = intel_connector_unregister,
.destroy = intel_hdmi_destroy, .destroy = intel_hdmi_destroy,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
...@@ -1906,7 +1907,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, ...@@ -1906,7 +1907,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
else else
intel_connector->get_hw_state = intel_connector_get_hw_state; intel_connector->get_hw_state = intel_connector_get_hw_state;
intel_connector->unregister = intel_connector_unregister;
intel_hdmi_add_properties(intel_hdmi, connector); intel_hdmi_add_properties(intel_hdmi, connector);
......
...@@ -555,6 +555,7 @@ static const struct drm_connector_funcs intel_lvds_connector_funcs = { ...@@ -555,6 +555,7 @@ static const struct drm_connector_funcs intel_lvds_connector_funcs = {
.fill_modes = drm_helper_probe_single_connector_modes, .fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_lvds_set_property, .set_property = intel_lvds_set_property,
.atomic_get_property = intel_connector_atomic_get_property, .atomic_get_property = intel_connector_atomic_get_property,
.early_unregister = intel_connector_unregister,
.destroy = intel_lvds_destroy, .destroy = intel_lvds_destroy,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
...@@ -991,7 +992,6 @@ void intel_lvds_init(struct drm_device *dev) ...@@ -991,7 +992,6 @@ void intel_lvds_init(struct drm_device *dev)
intel_encoder->get_hw_state = intel_lvds_get_hw_state; intel_encoder->get_hw_state = intel_lvds_get_hw_state;
intel_encoder->get_config = intel_lvds_get_config; intel_encoder->get_config = intel_lvds_get_config;
intel_connector->get_hw_state = intel_connector_get_hw_state; intel_connector->get_hw_state = intel_connector_get_hw_state;
intel_connector->unregister = intel_connector_unregister;
intel_connector_attach_encoder(intel_connector, intel_encoder); intel_connector_attach_encoder(intel_connector, intel_encoder);
intel_encoder->type = INTEL_OUTPUT_LVDS; intel_encoder->type = INTEL_OUTPUT_LVDS;
......
...@@ -2177,12 +2177,23 @@ intel_sdvo_set_property(struct drm_connector *connector, ...@@ -2177,12 +2177,23 @@ intel_sdvo_set_property(struct drm_connector *connector,
#undef CHECK_PROPERTY #undef CHECK_PROPERTY
} }
static void
intel_sdvo_connector_unregister(struct drm_connector *connector)
{
struct intel_sdvo *sdvo = intel_attached_sdvo(connector);
sysfs_remove_link(&connector->kdev->kobj,
sdvo->ddc.dev.kobj.name);
intel_connector_unregister(connector);
}
static const struct drm_connector_funcs intel_sdvo_connector_funcs = { static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms, .dpms = drm_atomic_helper_connector_dpms,
.detect = intel_sdvo_detect, .detect = intel_sdvo_detect,
.fill_modes = drm_helper_probe_single_connector_modes, .fill_modes = drm_helper_probe_single_connector_modes,
.set_property = intel_sdvo_set_property, .set_property = intel_sdvo_set_property,
.atomic_get_property = intel_connector_atomic_get_property, .atomic_get_property = intel_connector_atomic_get_property,
.early_unregister = intel_sdvo_connector_unregister,
.destroy = intel_sdvo_destroy, .destroy = intel_sdvo_destroy,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
...@@ -2345,20 +2356,6 @@ intel_sdvo_get_slave_addr(struct drm_device *dev, struct intel_sdvo *sdvo) ...@@ -2345,20 +2356,6 @@ intel_sdvo_get_slave_addr(struct drm_device *dev, struct intel_sdvo *sdvo)
return 0x72; return 0x72;
} }
static void
intel_sdvo_connector_unregister(struct intel_connector *intel_connector)
{
struct drm_connector *drm_connector;
struct intel_sdvo *sdvo_encoder;
drm_connector = &intel_connector->base;
sdvo_encoder = intel_attached_sdvo(&intel_connector->base);
sysfs_remove_link(&drm_connector->kdev->kobj,
sdvo_encoder->ddc.dev.kobj.name);
intel_connector_unregister(intel_connector);
}
static int static int
intel_sdvo_connector_init(struct intel_sdvo_connector *connector, intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
struct intel_sdvo *encoder) struct intel_sdvo *encoder)
...@@ -2381,7 +2378,6 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector, ...@@ -2381,7 +2378,6 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
connector->base.base.doublescan_allowed = 0; connector->base.base.doublescan_allowed = 0;
connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB; connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB;
connector->base.get_hw_state = intel_sdvo_connector_get_hw_state; connector->base.get_hw_state = intel_sdvo_connector_get_hw_state;
connector->base.unregister = intel_sdvo_connector_unregister;
intel_connector_attach_encoder(&connector->base, &encoder->base); intel_connector_attach_encoder(&connector->base, &encoder->base);
ret = drm_connector_register(drm_connector); ret = drm_connector_register(drm_connector);
......
...@@ -1501,6 +1501,7 @@ intel_tv_set_property(struct drm_connector *connector, struct drm_property *prop ...@@ -1501,6 +1501,7 @@ intel_tv_set_property(struct drm_connector *connector, struct drm_property *prop
static const struct drm_connector_funcs intel_tv_connector_funcs = { static const struct drm_connector_funcs intel_tv_connector_funcs = {
.dpms = drm_atomic_helper_connector_dpms, .dpms = drm_atomic_helper_connector_dpms,
.detect = intel_tv_detect, .detect = intel_tv_detect,
.early_unregister = intel_connector_unregister,
.destroy = intel_tv_destroy, .destroy = intel_tv_destroy,
.set_property = intel_tv_set_property, .set_property = intel_tv_set_property,
.atomic_get_property = intel_connector_atomic_get_property, .atomic_get_property = intel_connector_atomic_get_property,
...@@ -1599,7 +1600,6 @@ intel_tv_init(struct drm_device *dev) ...@@ -1599,7 +1600,6 @@ intel_tv_init(struct drm_device *dev)
intel_encoder->disable = intel_disable_tv; intel_encoder->disable = intel_disable_tv;
intel_encoder->get_hw_state = intel_tv_get_hw_state; intel_encoder->get_hw_state = intel_tv_get_hw_state;
intel_connector->get_hw_state = intel_connector_get_hw_state; intel_connector->get_hw_state = intel_connector_get_hw_state;
intel_connector->unregister = intel_connector_unregister;
intel_connector_attach_encoder(intel_connector, intel_encoder); intel_connector_attach_encoder(intel_connector, intel_encoder);
intel_encoder->type = INTEL_OUTPUT_TVOUT; intel_encoder->type = INTEL_OUTPUT_TVOUT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment