summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
diff options
context:
space:
mode:
authorxhdu <Duke.Du@amd.com>2017-03-21 11:05:32 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 17:20:54 -0400
commit8c8953139c4b8e1be14d0b1a53dc1fd607727b59 (patch)
treeb6d8a28ea4a6577285862b254246f31713cb251a /drivers/gpu/drm/amd/display/dc/core/dc_sink.c
parent3c8c9d6cd1f9c1d6ce53091a0b41fcf2ffc7e16f (diff)
drm/amd/display: Add audio/video ContainerId implementation
Leave hardcoded if no ContainerId provided by DM. Signed-off-by: Duke Du <Duke.Du@amd.com> Acked-by: Harry Wentland <Harry.Wentland@amd.com> Reviewed-by: Charlene Liu <Charlene.Liu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/core/dc_sink.c')
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_sink.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
index 8a204731301d..da9955675fbf 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
@@ -45,7 +45,10 @@ struct sink {
static void destruct(struct sink *sink)
{
-
+ if (sink->protected.public.dc_container_id) {
+ dm_free(sink->protected.public.dc_container_id);
+ sink->protected.public.dc_container_id = NULL;
+ }
}
static bool construct(struct sink *sink, const struct dc_sink_init_data *init_params)
@@ -63,6 +66,7 @@ static bool construct(struct sink *sink, const struct dc_sink_init_data *init_pa
sink->protected.public.dongle_max_pix_clk = init_params->dongle_max_pix_clk;
sink->protected.public.converter_disable_audio =
init_params->converter_disable_audio;
+ sink->protected.public.dc_container_id = NULL;
return true;
}
@@ -113,6 +117,39 @@ alloc_fail:
return NULL;
}
+bool dc_sink_get_container_id(struct dc_sink *dc_sink, struct dc_container_id *container_id)
+{
+ if (dc_sink && container_id && dc_sink->dc_container_id) {
+ memmove(&container_id->guid, &dc_sink->dc_container_id->guid,
+ sizeof(container_id->guid));
+ memmove(&container_id->portId, &dc_sink->dc_container_id->portId,
+ sizeof(container_id->portId));
+ container_id->manufacturerName = dc_sink->dc_container_id->manufacturerName;
+ container_id->productCode = dc_sink->dc_container_id->productCode;
+ return true;
+ }
+ return false;
+}
+
+bool dc_sink_set_container_id(struct dc_sink *dc_sink, const struct dc_container_id *container_id)
+{
+ if (dc_sink && container_id) {
+ if (!dc_sink->dc_container_id)
+ dc_sink->dc_container_id = dm_alloc(sizeof(*dc_sink->dc_container_id));
+
+ if (dc_sink->dc_container_id) {
+ memmove(&dc_sink->dc_container_id->guid, &container_id->guid,
+ sizeof(container_id->guid));
+ memmove(&dc_sink->dc_container_id->portId, &container_id->portId,
+ sizeof(container_id->portId));
+ dc_sink->dc_container_id->manufacturerName = container_id->manufacturerName;
+ dc_sink->dc_container_id->productCode = container_id->productCode;
+ return true;
+ }
+ }
+ return false;
+}
+
/*******************************************************************************
* Protected functions - visible only inside of DC (not visible in DM)
******************************************************************************/