diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2016-10-11 10:44:24 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-10-12 15:44:13 -0400 |
commit | b0c80bd5d2e317f7596fe2badc1a3379fb3211e5 (patch) | |
tree | 61f363fdf08ef3fcb992fee032eb71ed020c75a6 | |
parent | 40492f60794aaf32576cb42d9af86eed785a6e63 (diff) |
drm/radeon: fix up dp aux tear down (v2)
Port the amdgpu fixes from Grazvydas to radeon.
v2: drop unrelated whitespace change.
bug:
https://bugs.freedesktop.org/show_bug.cgi?id=98200
Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_i2c.c | 3 |
2 files changed, 18 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 50e96d2c593d..e18839d52e3e 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
@@ -927,6 +927,16 @@ radeon_lvds_detect(struct drm_connector *connector, bool force) | |||
927 | return ret; | 927 | return ret; |
928 | } | 928 | } |
929 | 929 | ||
930 | static void radeon_connector_unregister(struct drm_connector *connector) | ||
931 | { | ||
932 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | ||
933 | |||
934 | if (radeon_connector->ddc_bus->has_aux) { | ||
935 | drm_dp_aux_unregister(&radeon_connector->ddc_bus->aux); | ||
936 | radeon_connector->ddc_bus->has_aux = false; | ||
937 | } | ||
938 | } | ||
939 | |||
930 | static void radeon_connector_destroy(struct drm_connector *connector) | 940 | static void radeon_connector_destroy(struct drm_connector *connector) |
931 | { | 941 | { |
932 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | 942 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
@@ -984,6 +994,7 @@ static const struct drm_connector_funcs radeon_lvds_connector_funcs = { | |||
984 | .dpms = drm_helper_connector_dpms, | 994 | .dpms = drm_helper_connector_dpms, |
985 | .detect = radeon_lvds_detect, | 995 | .detect = radeon_lvds_detect, |
986 | .fill_modes = drm_helper_probe_single_connector_modes, | 996 | .fill_modes = drm_helper_probe_single_connector_modes, |
997 | .early_unregister = radeon_connector_unregister, | ||
987 | .destroy = radeon_connector_destroy, | 998 | .destroy = radeon_connector_destroy, |
988 | .set_property = radeon_lvds_set_property, | 999 | .set_property = radeon_lvds_set_property, |
989 | }; | 1000 | }; |
@@ -1111,6 +1122,7 @@ static const struct drm_connector_funcs radeon_vga_connector_funcs = { | |||
1111 | .dpms = drm_helper_connector_dpms, | 1122 | .dpms = drm_helper_connector_dpms, |
1112 | .detect = radeon_vga_detect, | 1123 | .detect = radeon_vga_detect, |
1113 | .fill_modes = drm_helper_probe_single_connector_modes, | 1124 | .fill_modes = drm_helper_probe_single_connector_modes, |
1125 | .early_unregister = radeon_connector_unregister, | ||
1114 | .destroy = radeon_connector_destroy, | 1126 | .destroy = radeon_connector_destroy, |
1115 | .set_property = radeon_connector_set_property, | 1127 | .set_property = radeon_connector_set_property, |
1116 | }; | 1128 | }; |
@@ -1188,6 +1200,7 @@ static const struct drm_connector_funcs radeon_tv_connector_funcs = { | |||
1188 | .dpms = drm_helper_connector_dpms, | 1200 | .dpms = drm_helper_connector_dpms, |
1189 | .detect = radeon_tv_detect, | 1201 | .detect = radeon_tv_detect, |
1190 | .fill_modes = drm_helper_probe_single_connector_modes, | 1202 | .fill_modes = drm_helper_probe_single_connector_modes, |
1203 | .early_unregister = radeon_connector_unregister, | ||
1191 | .destroy = radeon_connector_destroy, | 1204 | .destroy = radeon_connector_destroy, |
1192 | .set_property = radeon_connector_set_property, | 1205 | .set_property = radeon_connector_set_property, |
1193 | }; | 1206 | }; |
@@ -1519,6 +1532,7 @@ static const struct drm_connector_funcs radeon_dvi_connector_funcs = { | |||
1519 | .detect = radeon_dvi_detect, | 1532 | .detect = radeon_dvi_detect, |
1520 | .fill_modes = drm_helper_probe_single_connector_modes, | 1533 | .fill_modes = drm_helper_probe_single_connector_modes, |
1521 | .set_property = radeon_connector_set_property, | 1534 | .set_property = radeon_connector_set_property, |
1535 | .early_unregister = radeon_connector_unregister, | ||
1522 | .destroy = radeon_connector_destroy, | 1536 | .destroy = radeon_connector_destroy, |
1523 | .force = radeon_dvi_force, | 1537 | .force = radeon_dvi_force, |
1524 | }; | 1538 | }; |
@@ -1832,6 +1846,7 @@ static const struct drm_connector_funcs radeon_dp_connector_funcs = { | |||
1832 | .detect = radeon_dp_detect, | 1846 | .detect = radeon_dp_detect, |
1833 | .fill_modes = drm_helper_probe_single_connector_modes, | 1847 | .fill_modes = drm_helper_probe_single_connector_modes, |
1834 | .set_property = radeon_connector_set_property, | 1848 | .set_property = radeon_connector_set_property, |
1849 | .early_unregister = radeon_connector_unregister, | ||
1835 | .destroy = radeon_connector_destroy, | 1850 | .destroy = radeon_connector_destroy, |
1836 | .force = radeon_dvi_force, | 1851 | .force = radeon_dvi_force, |
1837 | }; | 1852 | }; |
@@ -1841,6 +1856,7 @@ static const struct drm_connector_funcs radeon_edp_connector_funcs = { | |||
1841 | .detect = radeon_dp_detect, | 1856 | .detect = radeon_dp_detect, |
1842 | .fill_modes = drm_helper_probe_single_connector_modes, | 1857 | .fill_modes = drm_helper_probe_single_connector_modes, |
1843 | .set_property = radeon_lvds_set_property, | 1858 | .set_property = radeon_lvds_set_property, |
1859 | .early_unregister = radeon_connector_unregister, | ||
1844 | .destroy = radeon_connector_destroy, | 1860 | .destroy = radeon_connector_destroy, |
1845 | .force = radeon_dvi_force, | 1861 | .force = radeon_dvi_force, |
1846 | }; | 1862 | }; |
@@ -1850,6 +1866,7 @@ static const struct drm_connector_funcs radeon_lvds_bridge_connector_funcs = { | |||
1850 | .detect = radeon_dp_detect, | 1866 | .detect = radeon_dp_detect, |
1851 | .fill_modes = drm_helper_probe_single_connector_modes, | 1867 | .fill_modes = drm_helper_probe_single_connector_modes, |
1852 | .set_property = radeon_lvds_set_property, | 1868 | .set_property = radeon_lvds_set_property, |
1869 | .early_unregister = radeon_connector_unregister, | ||
1853 | .destroy = radeon_connector_destroy, | 1870 | .destroy = radeon_connector_destroy, |
1854 | .force = radeon_dvi_force, | 1871 | .force = radeon_dvi_force, |
1855 | }; | 1872 | }; |
diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c index 021aa005623f..29f7817af821 100644 --- a/drivers/gpu/drm/radeon/radeon_i2c.c +++ b/drivers/gpu/drm/radeon/radeon_i2c.c | |||
@@ -982,9 +982,8 @@ void radeon_i2c_destroy(struct radeon_i2c_chan *i2c) | |||
982 | { | 982 | { |
983 | if (!i2c) | 983 | if (!i2c) |
984 | return; | 984 | return; |
985 | WARN_ON(i2c->has_aux); | ||
985 | i2c_del_adapter(&i2c->adapter); | 986 | i2c_del_adapter(&i2c->adapter); |
986 | if (i2c->has_aux) | ||
987 | drm_dp_aux_unregister(&i2c->aux); | ||
988 | kfree(i2c); | 987 | kfree(i2c); |
989 | } | 988 | } |
990 | 989 | ||