aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h1
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c1
-rw-r--r--drivers/gpu/drm/i915/intel_display.c14
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c1
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h8
-rw-r--r--drivers/gpu/drm/i915/intel_dsi.c1
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c1
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c1
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c1
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c1
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c1
11 files changed, 29 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 49889003feb2..d33199452c11 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2546,6 +2546,7 @@ extern void intel_modeset_suspend_hw(struct drm_device *dev);
2546extern void intel_modeset_init(struct drm_device *dev); 2546extern void intel_modeset_init(struct drm_device *dev);
2547extern void intel_modeset_gem_init(struct drm_device *dev); 2547extern void intel_modeset_gem_init(struct drm_device *dev);
2548extern void intel_modeset_cleanup(struct drm_device *dev); 2548extern void intel_modeset_cleanup(struct drm_device *dev);
2549extern void intel_connector_unregister(struct intel_connector *);
2549extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state); 2550extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state);
2550extern void intel_modeset_setup_hw_state(struct drm_device *dev, 2551extern void intel_modeset_setup_hw_state(struct drm_device *dev,
2551 bool force_restore); 2552 bool force_restore);
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 5b444a4b625c..9864aa1ccbe8 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -833,6 +833,7 @@ void intel_crt_init(struct drm_device *dev)
833 crt->base.get_hw_state = intel_crt_get_hw_state; 833 crt->base.get_hw_state = intel_crt_get_hw_state;
834 } 834 }
835 intel_connector->get_hw_state = intel_connector_get_hw_state; 835 intel_connector->get_hw_state = intel_connector_get_hw_state;
836 intel_connector->unregister = intel_connector_unregister;
836 837
837 drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); 838 drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);
838 839
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index abdeda1098ae..fd860077d0fe 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11409,6 +11409,14 @@ void intel_modeset_gem_init(struct drm_device *dev)
11409 intel_setup_overlay(dev); 11409 intel_setup_overlay(dev);
11410} 11410}
11411 11411
11412void intel_connector_unregister(struct intel_connector *intel_connector)
11413{
11414 struct drm_connector *connector = &intel_connector->base;
11415
11416 intel_panel_destroy_backlight(connector);
11417 drm_sysfs_connector_remove(connector);
11418}
11419
11412void intel_modeset_cleanup(struct drm_device *dev) 11420void intel_modeset_cleanup(struct drm_device *dev)
11413{ 11421{
11414 struct drm_i915_private *dev_priv = dev->dev_private; 11422 struct drm_i915_private *dev_priv = dev->dev_private;
@@ -11453,8 +11461,10 @@ void intel_modeset_cleanup(struct drm_device *dev)
11453 11461
11454 /* destroy the backlight and sysfs files before encoders/connectors */ 11462 /* destroy the backlight and sysfs files before encoders/connectors */
11455 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 11463 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
11456 intel_panel_destroy_backlight(connector); 11464 struct intel_connector *intel_connector;
11457 drm_sysfs_connector_remove(connector); 11465
11466 intel_connector = to_intel_connector(connector);
11467 intel_connector->unregister(intel_connector);
11458 } 11468 }
11459 11469
11460 drm_mode_config_cleanup(dev); 11470 drm_mode_config_cleanup(dev);
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index e5aaae3f8e19..eeb8e7b42f8a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -3799,6 +3799,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
3799 intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; 3799 intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
3800 else 3800 else
3801 intel_connector->get_hw_state = intel_connector_get_hw_state; 3801 intel_connector->get_hw_state = intel_connector_get_hw_state;
3802 intel_connector->unregister = intel_connector_unregister;
3802 3803
3803 intel_dp->aux_ch_ctl_reg = intel_dp->output_reg + 0x10; 3804 intel_dp->aux_ch_ctl_reg = intel_dp->output_reg + 0x10;
3804 if (HAS_DDI(dev)) { 3805 if (HAS_DDI(dev)) {
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index bff5d0a3f584..a4ffc021c317 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -187,6 +187,14 @@ struct intel_connector {
187 * and active (i.e. dpms ON state). */ 187 * and active (i.e. dpms ON state). */
188 bool (*get_hw_state)(struct intel_connector *); 188 bool (*get_hw_state)(struct intel_connector *);
189 189
190 /*
191 * Removes all interfaces through which the connector is accessible
192 * - like sysfs, debugfs entries -, so that no new operations can be
193 * started on the connector. Also makes sure all currently pending
194 * operations finish before returing.
195 */
196 void (*unregister)(struct intel_connector *);
197
190 /* Panel info for eDP and LVDS */ 198 /* Panel info for eDP and LVDS */
191 struct intel_panel panel; 199 struct intel_panel panel;
192 200
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index 6bffbdf149a8..3ee1db1407b0 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -586,6 +586,7 @@ bool intel_dsi_init(struct drm_device *dev)
586 intel_encoder->get_config = intel_dsi_get_config; 586 intel_encoder->get_config = intel_dsi_get_config;
587 587
588 intel_connector->get_hw_state = intel_connector_get_hw_state; 588 intel_connector->get_hw_state = intel_connector_get_hw_state;
589 intel_connector->unregister = intel_connector_unregister;
589 590
590 for (i = 0; i < ARRAY_SIZE(intel_dsi_devices); i++) { 591 for (i = 0; i < ARRAY_SIZE(intel_dsi_devices); i++) {
591 dsi = &intel_dsi_devices[i]; 592 dsi = &intel_dsi_devices[i];
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index eeff998e52ef..86eeb8b7d435 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -477,6 +477,7 @@ void intel_dvo_init(struct drm_device *dev)
477 intel_encoder->compute_config = intel_dvo_compute_config; 477 intel_encoder->compute_config = intel_dvo_compute_config;
478 intel_encoder->mode_set = intel_dvo_mode_set; 478 intel_encoder->mode_set = intel_dvo_mode_set;
479 intel_connector->get_hw_state = intel_dvo_connector_get_hw_state; 479 intel_connector->get_hw_state = intel_dvo_connector_get_hw_state;
480 intel_connector->unregister = intel_connector_unregister;
480 481
481 /* Now, try to find a controller */ 482 /* Now, try to find a controller */
482 for (i = 0; i < ARRAY_SIZE(intel_dvo_devices); i++) { 483 for (i = 0; i < ARRAY_SIZE(intel_dvo_devices); i++) {
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index c1cbe7f0437f..98d68ab04de4 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1236,6 +1236,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
1236 intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; 1236 intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
1237 else 1237 else
1238 intel_connector->get_hw_state = intel_connector_get_hw_state; 1238 intel_connector->get_hw_state = intel_connector_get_hw_state;
1239 intel_connector->unregister = intel_connector_unregister;
1239 1240
1240 intel_hdmi_add_properties(intel_hdmi, connector); 1241 intel_hdmi_add_properties(intel_hdmi, connector);
1241 1242
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 398460862be6..fecff3c2b9e1 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -958,6 +958,7 @@ void intel_lvds_init(struct drm_device *dev)
958 intel_encoder->get_hw_state = intel_lvds_get_hw_state; 958 intel_encoder->get_hw_state = intel_lvds_get_hw_state;
959 intel_encoder->get_config = intel_lvds_get_config; 959 intel_encoder->get_config = intel_lvds_get_config;
960 intel_connector->get_hw_state = intel_connector_get_hw_state; 960 intel_connector->get_hw_state = intel_connector_get_hw_state;
961 intel_connector->unregister = intel_connector_unregister;
961 962
962 intel_connector_attach_encoder(intel_connector, intel_encoder); 963 intel_connector_attach_encoder(intel_connector, intel_encoder);
963 intel_encoder->type = INTEL_OUTPUT_LVDS; 964 intel_encoder->type = INTEL_OUTPUT_LVDS;
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 95bdfb3c431c..cbc2feeda59d 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -2397,6 +2397,7 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
2397 connector->base.base.doublescan_allowed = 0; 2397 connector->base.base.doublescan_allowed = 0;
2398 connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB; 2398 connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB;
2399 connector->base.get_hw_state = intel_sdvo_connector_get_hw_state; 2399 connector->base.get_hw_state = intel_sdvo_connector_get_hw_state;
2400 connector->base.unregister = intel_connector_unregister;
2400 2401
2401 intel_connector_attach_encoder(&connector->base, &encoder->base); 2402 intel_connector_attach_encoder(&connector->base, &encoder->base);
2402 drm_sysfs_connector_add(&connector->base.base); 2403 drm_sysfs_connector_add(&connector->base.base);
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index ccd02eca35f0..b64fc1c6ff3f 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1634,6 +1634,7 @@ intel_tv_init(struct drm_device *dev)
1634 intel_encoder->disable = intel_disable_tv; 1634 intel_encoder->disable = intel_disable_tv;
1635 intel_encoder->get_hw_state = intel_tv_get_hw_state; 1635 intel_encoder->get_hw_state = intel_tv_get_hw_state;
1636 intel_connector->get_hw_state = intel_connector_get_hw_state; 1636 intel_connector->get_hw_state = intel_connector_get_hw_state;
1637 intel_connector->unregister = intel_connector_unregister;
1637 1638
1638 intel_connector_attach_encoder(intel_connector, intel_encoder); 1639 intel_connector_attach_encoder(intel_connector, intel_encoder);
1639 intel_encoder->type = INTEL_OUTPUT_TVOUT; 1640 intel_encoder->type = INTEL_OUTPUT_TVOUT;