aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c8
-rw-r--r--drivers/gpu/drm/i915/intel_display.c20
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c18
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c14
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h1
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c9
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c5
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c23
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c16
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c9
-rw-r--r--drivers/gpu/drm/i915/vlv_dsi.c12
11 files changed, 33 insertions, 102 deletions
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 0c6bf82bb059..ab3d6b074222 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -849,12 +849,6 @@ out:
849 return status; 849 return status;
850} 850}
851 851
852static void intel_crt_destroy(struct drm_connector *connector)
853{
854 drm_connector_cleanup(connector);
855 kfree(connector);
856}
857
858static int intel_crt_get_modes(struct drm_connector *connector) 852static int intel_crt_get_modes(struct drm_connector *connector)
859{ 853{
860 struct drm_device *dev = connector->dev; 854 struct drm_device *dev = connector->dev;
@@ -909,7 +903,7 @@ static const struct drm_connector_funcs intel_crt_connector_funcs = {
909 .fill_modes = drm_helper_probe_single_connector_modes, 903 .fill_modes = drm_helper_probe_single_connector_modes,
910 .late_register = intel_connector_register, 904 .late_register = intel_connector_register,
911 .early_unregister = intel_connector_unregister, 905 .early_unregister = intel_connector_unregister,
912 .destroy = intel_crt_destroy, 906 .destroy = intel_connector_destroy,
913 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 907 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
914 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, 908 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
915}; 909};
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 6a7fe89f3145..fd27b9b0b4d8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6365,7 +6365,7 @@ struct intel_connector *intel_connector_alloc(void)
6365 * This should only be used after intel_connector_alloc has returned 6365 * This should only be used after intel_connector_alloc has returned
6366 * successfully, and before drm_connector_init returns successfully. 6366 * successfully, and before drm_connector_init returns successfully.
6367 * Otherwise the destroy callbacks for the connector and the state should 6367 * Otherwise the destroy callbacks for the connector and the state should
6368 * take care of proper cleanup/free 6368 * take care of proper cleanup/free (see intel_connector_destroy).
6369 */ 6369 */
6370void intel_connector_free(struct intel_connector *connector) 6370void intel_connector_free(struct intel_connector *connector)
6371{ 6371{
@@ -6373,6 +6373,24 @@ void intel_connector_free(struct intel_connector *connector)
6373 kfree(connector); 6373 kfree(connector);
6374} 6374}
6375 6375
6376/*
6377 * Connector type independent destroy hook for drm_connector_funcs.
6378 */
6379void intel_connector_destroy(struct drm_connector *connector)
6380{
6381 struct intel_connector *intel_connector = to_intel_connector(connector);
6382
6383 kfree(intel_connector->detect_edid);
6384
6385 if (!IS_ERR_OR_NULL(intel_connector->edid))
6386 kfree(intel_connector->edid);
6387
6388 intel_panel_fini(&intel_connector->panel);
6389
6390 drm_connector_cleanup(connector);
6391 kfree(connector);
6392}
6393
6376/* Simple connector->get_hw_state implementation for encoders that support only 6394/* Simple connector->get_hw_state implementation for encoders that support only
6377 * one connector and no cloning and hence the encoder state determines the state 6395 * one connector and no cloning and hence the encoder state determines the state
6378 * of the connector. */ 6396 * of the connector. */
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index d12f987a6c43..0855b9785f7b 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5251,22 +5251,6 @@ intel_dp_connector_unregister(struct drm_connector *connector)
5251 intel_connector_unregister(connector); 5251 intel_connector_unregister(connector);
5252} 5252}
5253 5253
5254static void
5255intel_dp_connector_destroy(struct drm_connector *connector)
5256{
5257 struct intel_connector *intel_connector = to_intel_connector(connector);
5258
5259 kfree(intel_connector->detect_edid);
5260
5261 if (!IS_ERR_OR_NULL(intel_connector->edid))
5262 kfree(intel_connector->edid);
5263
5264 intel_panel_fini(&intel_connector->panel);
5265
5266 drm_connector_cleanup(connector);
5267 kfree(connector);
5268}
5269
5270void intel_dp_encoder_destroy(struct drm_encoder *encoder) 5254void intel_dp_encoder_destroy(struct drm_encoder *encoder)
5271{ 5255{
5272 struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder); 5256 struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
@@ -5613,7 +5597,7 @@ static const struct drm_connector_funcs intel_dp_connector_funcs = {
5613 .atomic_set_property = intel_digital_connector_atomic_set_property, 5597 .atomic_set_property = intel_digital_connector_atomic_set_property,
5614 .late_register = intel_dp_connector_register, 5598 .late_register = intel_dp_connector_register,
5615 .early_unregister = intel_dp_connector_unregister, 5599 .early_unregister = intel_dp_connector_unregister,
5616 .destroy = intel_dp_connector_destroy, 5600 .destroy = intel_connector_destroy,
5617 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 5601 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
5618 .atomic_duplicate_state = intel_digital_connector_duplicate_state, 5602 .atomic_duplicate_state = intel_digital_connector_duplicate_state,
5619}; 5603};
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 7f155b4f1a7d..bb6b8f03e9b5 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -335,24 +335,12 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force)
335 intel_connector->port); 335 intel_connector->port);
336} 336}
337 337
338static void
339intel_dp_mst_connector_destroy(struct drm_connector *connector)
340{
341 struct intel_connector *intel_connector = to_intel_connector(connector);
342
343 if (!IS_ERR_OR_NULL(intel_connector->edid))
344 kfree(intel_connector->edid);
345
346 drm_connector_cleanup(connector);
347 kfree(connector);
348}
349
350static const struct drm_connector_funcs intel_dp_mst_connector_funcs = { 338static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
351 .detect = intel_dp_mst_detect, 339 .detect = intel_dp_mst_detect,
352 .fill_modes = drm_helper_probe_single_connector_modes, 340 .fill_modes = drm_helper_probe_single_connector_modes,
353 .late_register = intel_connector_register, 341 .late_register = intel_connector_register,
354 .early_unregister = intel_connector_unregister, 342 .early_unregister = intel_connector_unregister,
355 .destroy = intel_dp_mst_connector_destroy, 343 .destroy = intel_connector_destroy,
356 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 344 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
357 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, 345 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
358}; 346};
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 8050d06c722a..4b8fec74ad49 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1510,6 +1510,7 @@ void intel_encoder_destroy(struct drm_encoder *encoder);
1510int intel_connector_init(struct intel_connector *); 1510int intel_connector_init(struct intel_connector *);
1511struct intel_connector *intel_connector_alloc(void); 1511struct intel_connector *intel_connector_alloc(void);
1512void intel_connector_free(struct intel_connector *connector); 1512void intel_connector_free(struct intel_connector *connector);
1513void intel_connector_destroy(struct drm_connector *connector);
1513bool intel_connector_get_hw_state(struct intel_connector *connector); 1514bool intel_connector_get_hw_state(struct intel_connector *connector);
1514void intel_connector_attach_encoder(struct intel_connector *connector, 1515void intel_connector_attach_encoder(struct intel_connector *connector,
1515 struct intel_encoder *encoder); 1516 struct intel_encoder *encoder);
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index 4e142ff49708..be3c0a5f447d 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -333,18 +333,11 @@ static int intel_dvo_get_modes(struct drm_connector *connector)
333 return 0; 333 return 0;
334} 334}
335 335
336static void intel_dvo_destroy(struct drm_connector *connector)
337{
338 drm_connector_cleanup(connector);
339 intel_panel_fini(&to_intel_connector(connector)->panel);
340 kfree(connector);
341}
342
343static const struct drm_connector_funcs intel_dvo_connector_funcs = { 336static const struct drm_connector_funcs intel_dvo_connector_funcs = {
344 .detect = intel_dvo_detect, 337 .detect = intel_dvo_detect,
345 .late_register = intel_connector_register, 338 .late_register = intel_connector_register,
346 .early_unregister = intel_connector_unregister, 339 .early_unregister = intel_connector_unregister,
347 .destroy = intel_dvo_destroy, 340 .destroy = intel_connector_destroy,
348 .fill_modes = drm_helper_probe_single_connector_modes, 341 .fill_modes = drm_helper_probe_single_connector_modes,
349 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 342 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
350 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, 343 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 454f570275e9..2c53efc463e6 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -2073,9 +2073,8 @@ static void intel_hdmi_destroy(struct drm_connector *connector)
2073{ 2073{
2074 if (intel_attached_hdmi(connector)->cec_notifier) 2074 if (intel_attached_hdmi(connector)->cec_notifier)
2075 cec_notifier_put(intel_attached_hdmi(connector)->cec_notifier); 2075 cec_notifier_put(intel_attached_hdmi(connector)->cec_notifier);
2076 kfree(to_intel_connector(connector)->detect_edid); 2076
2077 drm_connector_cleanup(connector); 2077 intel_connector_destroy(connector);
2078 kfree(connector);
2079} 2078}
2080 2079
2081static const struct drm_connector_funcs intel_hdmi_connector_funcs = { 2080static const struct drm_connector_funcs intel_hdmi_connector_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index f9f3b0885ba5..1fe970cf9909 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -477,27 +477,6 @@ static int intel_lvds_get_modes(struct drm_connector *connector)
477 return 1; 477 return 1;
478} 478}
479 479
480/**
481 * intel_lvds_destroy - unregister and free LVDS structures
482 * @connector: connector to free
483 *
484 * Unregister the DDC bus for this connector then free the driver private
485 * structure.
486 */
487static void intel_lvds_destroy(struct drm_connector *connector)
488{
489 struct intel_lvds_connector *lvds_connector =
490 to_lvds_connector(connector);
491
492 if (!IS_ERR_OR_NULL(lvds_connector->base.edid))
493 kfree(lvds_connector->base.edid);
494
495 intel_panel_fini(&lvds_connector->base.panel);
496
497 drm_connector_cleanup(connector);
498 kfree(connector);
499}
500
501static const struct drm_connector_helper_funcs intel_lvds_connector_helper_funcs = { 480static const struct drm_connector_helper_funcs intel_lvds_connector_helper_funcs = {
502 .get_modes = intel_lvds_get_modes, 481 .get_modes = intel_lvds_get_modes,
503 .mode_valid = intel_lvds_mode_valid, 482 .mode_valid = intel_lvds_mode_valid,
@@ -511,7 +490,7 @@ static const struct drm_connector_funcs intel_lvds_connector_funcs = {
511 .atomic_set_property = intel_digital_connector_atomic_set_property, 490 .atomic_set_property = intel_digital_connector_atomic_set_property,
512 .late_register = intel_connector_register, 491 .late_register = intel_connector_register,
513 .early_unregister = intel_connector_unregister, 492 .early_unregister = intel_connector_unregister,
514 .destroy = intel_lvds_destroy, 493 .destroy = intel_connector_destroy,
515 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 494 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
516 .atomic_duplicate_state = intel_digital_connector_duplicate_state, 495 .atomic_duplicate_state = intel_digital_connector_duplicate_state,
517}; 496};
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 701372e512a8..1824d94ae123 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -2058,14 +2058,6 @@ static int intel_sdvo_get_modes(struct drm_connector *connector)
2058 return !list_empty(&connector->probed_modes); 2058 return !list_empty(&connector->probed_modes);
2059} 2059}
2060 2060
2061static void intel_sdvo_destroy(struct drm_connector *connector)
2062{
2063 struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
2064
2065 drm_connector_cleanup(connector);
2066 kfree(intel_sdvo_connector);
2067}
2068
2069static int 2061static int
2070intel_sdvo_connector_atomic_get_property(struct drm_connector *connector, 2062intel_sdvo_connector_atomic_get_property(struct drm_connector *connector,
2071 const struct drm_connector_state *state, 2063 const struct drm_connector_state *state,
@@ -2228,7 +2220,7 @@ static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
2228 .atomic_set_property = intel_sdvo_connector_atomic_set_property, 2220 .atomic_set_property = intel_sdvo_connector_atomic_set_property,
2229 .late_register = intel_sdvo_connector_register, 2221 .late_register = intel_sdvo_connector_register,
2230 .early_unregister = intel_sdvo_connector_unregister, 2222 .early_unregister = intel_sdvo_connector_unregister,
2231 .destroy = intel_sdvo_destroy, 2223 .destroy = intel_connector_destroy,
2232 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 2224 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
2233 .atomic_duplicate_state = intel_sdvo_connector_duplicate_state, 2225 .atomic_duplicate_state = intel_sdvo_connector_duplicate_state,
2234}; 2226};
@@ -2583,7 +2575,7 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
2583 return true; 2575 return true;
2584 2576
2585err: 2577err:
2586 intel_sdvo_destroy(connector); 2578 intel_connector_destroy(connector);
2587 return false; 2579 return false;
2588} 2580}
2589 2581
@@ -2675,7 +2667,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
2675 return true; 2667 return true;
2676 2668
2677err: 2669err:
2678 intel_sdvo_destroy(connector); 2670 intel_connector_destroy(connector);
2679 return false; 2671 return false;
2680} 2672}
2681 2673
@@ -2745,7 +2737,7 @@ static void intel_sdvo_output_cleanup(struct intel_sdvo *intel_sdvo)
2745 &dev->mode_config.connector_list, head) { 2737 &dev->mode_config.connector_list, head) {
2746 if (intel_attached_encoder(connector) == &intel_sdvo->base) { 2738 if (intel_attached_encoder(connector) == &intel_sdvo->base) {
2747 drm_connector_unregister(connector); 2739 drm_connector_unregister(connector);
2748 intel_sdvo_destroy(connector); 2740 intel_connector_destroy(connector);
2749 } 2741 }
2750 } 2742 }
2751} 2743}
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index b5b04cb892e9..8b9ce0dc78e5 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1377,17 +1377,10 @@ intel_tv_get_modes(struct drm_connector *connector)
1377 return count; 1377 return count;
1378} 1378}
1379 1379
1380static void
1381intel_tv_destroy(struct drm_connector *connector)
1382{
1383 drm_connector_cleanup(connector);
1384 kfree(connector);
1385}
1386
1387static const struct drm_connector_funcs intel_tv_connector_funcs = { 1380static const struct drm_connector_funcs intel_tv_connector_funcs = {
1388 .late_register = intel_connector_register, 1381 .late_register = intel_connector_register,
1389 .early_unregister = intel_connector_unregister, 1382 .early_unregister = intel_connector_unregister,
1390 .destroy = intel_tv_destroy, 1383 .destroy = intel_connector_destroy,
1391 .fill_modes = drm_helper_probe_single_connector_modes, 1384 .fill_modes = drm_helper_probe_single_connector_modes,
1392 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 1385 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
1393 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, 1386 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
index 435a2c35ee8c..5accd0c360f9 100644
--- a/drivers/gpu/drm/i915/vlv_dsi.c
+++ b/drivers/gpu/drm/i915/vlv_dsi.c
@@ -1642,16 +1642,6 @@ static int intel_dsi_get_modes(struct drm_connector *connector)
1642 return 1; 1642 return 1;
1643} 1643}
1644 1644
1645static void intel_dsi_connector_destroy(struct drm_connector *connector)
1646{
1647 struct intel_connector *intel_connector = to_intel_connector(connector);
1648
1649 DRM_DEBUG_KMS("\n");
1650 intel_panel_fini(&intel_connector->panel);
1651 drm_connector_cleanup(connector);
1652 kfree(connector);
1653}
1654
1655static void intel_dsi_encoder_destroy(struct drm_encoder *encoder) 1645static void intel_dsi_encoder_destroy(struct drm_encoder *encoder)
1656{ 1646{
1657 struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); 1647 struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
@@ -1676,7 +1666,7 @@ static const struct drm_connector_helper_funcs intel_dsi_connector_helper_funcs
1676static const struct drm_connector_funcs intel_dsi_connector_funcs = { 1666static const struct drm_connector_funcs intel_dsi_connector_funcs = {
1677 .late_register = intel_connector_register, 1667 .late_register = intel_connector_register,
1678 .early_unregister = intel_connector_unregister, 1668 .early_unregister = intel_connector_unregister,
1679 .destroy = intel_dsi_connector_destroy, 1669 .destroy = intel_connector_destroy,
1680 .fill_modes = drm_helper_probe_single_connector_modes, 1670 .fill_modes = drm_helper_probe_single_connector_modes,
1681 .atomic_get_property = intel_digital_connector_atomic_get_property, 1671 .atomic_get_property = intel_digital_connector_atomic_get_property,
1682 .atomic_set_property = intel_digital_connector_atomic_set_property, 1672 .atomic_set_property = intel_digital_connector_atomic_set_property,