aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2018-08-27 04:08:18 -0400
committerHans Verkuil <hans.verkuil@cisco.com>2018-08-31 04:20:40 -0400
commite86e894751f0420fbe05d834e02a6777c4b4ac3f (patch)
tree7fe43fbf396b379b22050ef106c1ebd24f95e178
parent46094b2baeeb5e5fe113243e689a69d56f428ec8 (diff)
drm/amdgpu: add DisplayPort CEC-Tunneling-over-AUX support
Add DisplayPort CEC-Tunneling-over-AUX support to amdgpu. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/de9586bb-151e-bae9-b8e3-14db107a60df@xs4all.nl
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c9
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c2
2 files changed, 10 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 11d6dd23eeb8..af6adffba788 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -896,6 +896,7 @@ amdgpu_dm_update_connector_after_detect(struct amdgpu_dm_connector *aconnector)
896 aconnector->dc_sink = sink; 896 aconnector->dc_sink = sink;
897 if (sink->dc_edid.length == 0) { 897 if (sink->dc_edid.length == 0) {
898 aconnector->edid = NULL; 898 aconnector->edid = NULL;
899 drm_dp_cec_unset_edid(&aconnector->dm_dp_aux.aux);
899 } else { 900 } else {
900 aconnector->edid = 901 aconnector->edid =
901 (struct edid *) sink->dc_edid.raw_edid; 902 (struct edid *) sink->dc_edid.raw_edid;
@@ -903,10 +904,13 @@ amdgpu_dm_update_connector_after_detect(struct amdgpu_dm_connector *aconnector)
903 904
904 drm_connector_update_edid_property(connector, 905 drm_connector_update_edid_property(connector,
905 aconnector->edid); 906 aconnector->edid);
907 drm_dp_cec_set_edid(&aconnector->dm_dp_aux.aux,
908 aconnector->edid);
906 } 909 }
907 amdgpu_dm_add_sink_to_freesync_module(connector, aconnector->edid); 910 amdgpu_dm_add_sink_to_freesync_module(connector, aconnector->edid);
908 911
909 } else { 912 } else {
913 drm_dp_cec_unset_edid(&aconnector->dm_dp_aux.aux);
910 amdgpu_dm_remove_sink_from_freesync_module(connector); 914 amdgpu_dm_remove_sink_from_freesync_module(connector);
911 drm_connector_update_edid_property(connector, NULL); 915 drm_connector_update_edid_property(connector, NULL);
912 aconnector->num_modes = 0; 916 aconnector->num_modes = 0;
@@ -1061,8 +1065,10 @@ static void handle_hpd_rx_irq(void *param)
1061 (dc_link->type == dc_connection_mst_branch)) 1065 (dc_link->type == dc_connection_mst_branch))
1062 dm_handle_hpd_rx_irq(aconnector); 1066 dm_handle_hpd_rx_irq(aconnector);
1063 1067
1064 if (dc_link->type != dc_connection_mst_branch) 1068 if (dc_link->type != dc_connection_mst_branch) {
1069 drm_dp_cec_irq(&aconnector->dm_dp_aux.aux);
1065 mutex_unlock(&aconnector->hpd_lock); 1070 mutex_unlock(&aconnector->hpd_lock);
1071 }
1066} 1072}
1067 1073
1068static void register_hpd_handlers(struct amdgpu_device *adev) 1074static void register_hpd_handlers(struct amdgpu_device *adev)
@@ -2731,6 +2737,7 @@ static void amdgpu_dm_connector_destroy(struct drm_connector *connector)
2731 dm->backlight_dev = NULL; 2737 dm->backlight_dev = NULL;
2732 } 2738 }
2733#endif 2739#endif
2740 drm_dp_cec_unregister_connector(&aconnector->dm_dp_aux.aux);
2734 drm_connector_unregister(connector); 2741 drm_connector_unregister(connector);
2735 drm_connector_cleanup(connector); 2742 drm_connector_cleanup(connector);
2736 kfree(connector); 2743 kfree(connector);
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index 9a300732ba37..18a3a6e5ffa0 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -496,6 +496,8 @@ void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
496 aconnector->dm_dp_aux.ddc_service = aconnector->dc_link->ddc; 496 aconnector->dm_dp_aux.ddc_service = aconnector->dc_link->ddc;
497 497
498 drm_dp_aux_register(&aconnector->dm_dp_aux.aux); 498 drm_dp_aux_register(&aconnector->dm_dp_aux.aux);
499 drm_dp_cec_register_connector(&aconnector->dm_dp_aux.aux,
500 aconnector->base.name, dm->adev->dev);
499 aconnector->mst_mgr.cbs = &dm_mst_cbs; 501 aconnector->mst_mgr.cbs = &dm_mst_cbs;
500 drm_dp_mst_topology_mgr_init( 502 drm_dp_mst_topology_mgr_init(
501 &aconnector->mst_mgr, 503 &aconnector->mst_mgr,