dc_sink
if (aconnector->dc_sink) {
if (aconnector->dc_sink->sink_signal != SIGNAL_TYPE_VIRTUAL &&
aconnector->dc_sink->sink_signal != SIGNAL_TYPE_NONE) {
aconnector->dc_sink->edid_caps.display_name);
if (aconnector->dc_link && aconnector->dc_sink &&
if (!aconnector->dc_sink || !connector->state || !connector->encoder)
if (acrtc_state->stream->sink != aconnector->dc_sink)
struct dc_sink *sink;
sink = amdgpu_dm_connector->dc_sink ?
amdgpu_dm_connector->dc_sink :
if (aconnector->dc_sink)
struct dc_sink *sink = NULL;
struct dc_sink *prev_sink = NULL;
struct dc_sink *sink)
struct dc_sink *rsink = l->remote_sinks[rs];
apply_delay_after_dpcd_poweroff(adev, aconnector->dc_sink);
if (aconnector->dc_sink)
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = NULL;
DEFINE_FREE(sink_release, struct dc_sink *, if (_T) dc_sink_release(_T))
struct dc_sink *sink __free(sink_release) = NULL;
if (aconnector->dc_sink) {
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = sink;
dc_sink_retain(aconnector->dc_sink);
if (!aconnector->dc_sink) {
aconnector->dc_sink = aconnector->dc_em_sink;
dc_sink_retain(aconnector->dc_sink);
if (aconnector->dc_sink == sink) {
aconnector->connector_id, aconnector->dc_sink, sink);
if (aconnector->dc_sink) {
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = sink;
dc_sink_retain(aconnector->dc_sink);
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = NULL;
static bool are_sinks_equal(const struct dc_sink *sink1, const struct dc_sink *sink2)
apply_delay_after_dpcd_poweroff(adev, aconnector->dc_sink);
apply_delay_after_dpcd_poweroff(adev, aconnector->dc_sink);
const struct dc_sink *dc_sink)
const struct dc_edid_caps *edid_caps = &dc_sink->edid_caps;
static struct dc_sink *
struct dc_sink *sink = NULL;
struct dc_sink *sink, struct dc_stream_state *stream,
struct dc_sink *sink, struct dc_stream_state *stream,
struct dc_sink *sink, struct dc_stream_state *stream,
struct dc_sink *sink = NULL;
if (!aconnector || !aconnector->dc_sink) {
sink = aconnector->dc_sink;
if (aconnector->dc_sink) {
edid_caps = &aconnector->dc_sink->edid_caps;
(!aconnector->dc_sink || aconnector->dc_sink->edid_caps.analog))
return (aconnector->dc_sink ? connector_status_connected :
if (aconnector->dc_sink)
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = NULL;
struct dc_sink *dc_em_sink = aconnector->dc_em_sink;
aconnector->dc_sink = aconnector->dc_link->local_sink ?
if (aconnector->dc_sink)
dc_sink_retain(aconnector->dc_sink);
struct dc_sink *dc_sink;
dc_sink = to_amdgpu_dm_connector(connector)->dc_sink;
if (dc_sink == NULL && aconnector->base.force != DRM_FORCE_ON_DIGITAL &&
if (!amdgpu_dm_connector->dc_sink || !amdgpu_dm_connector->dc_link)
if (!dc_supports_vrr(amdgpu_dm_connector->dc_sink->ctx->dce_version))
amdgpu_dm_connector->dc_sink->edid_caps.analog)
if (amdgpu_dm_connector->dc_sink &&
amdgpu_dm_connector->dc_sink->edid_caps.analog &&
connector->dpms == DRM_MODE_DPMS_ON && aconnector->dc_sink != NULL) {
struct dc_sink *dc_sink;
struct dc_sink *dc_em_sink;
struct dc_sink *hdmi_prev_sink;
hdcp_cap = dc_link_is_hdcp14(aconnector->dc_link, aconnector->dc_sink->sink_signal);
hdcp2_cap = dc_link_is_hdcp22(aconnector->dc_link, aconnector->dc_sink->sink_signal);
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
pipe_ctx->stream->sink == aconnector->dc_sink)
struct dc_sink *sink = NULL;
if (aconnector->dc_sink)
sink = aconnector->dc_sink;
struct dc_sink *sink)
struct dc_sink *sink)
if (!aconnector || !aconnector->dc_sink || !aconnector->mst_output_port)
if (!aconnector->dc_sink->dsc_caps.dsc_dec_caps.is_dsc_supported)
if (aconnector->dc_sink) {
aconnector->dc_sink);
dc_sink_release(aconnector->dc_sink);
if (!aconnector || !aconnector->dc_sink || !aconnector->mst_output_port)
if (!aconnector->dc_sink->dsc_caps.dsc_dec_caps.is_dsc_supported)
aconnector->dc_sink->dsc_caps.dsc_dec_caps.branch_overall_throughput_0_mps;
aconnector->dc_sink->dsc_caps.dsc_dec_caps.branch_overall_throughput_1_mps;
struct dc_sink *dc_sink = aconnector->dc_sink;
if (dc_sink) {
dc_link_remove_remote_sink(dc_link, dc_sink);
dc_sink, dc_link->sink_count);
dc_sink_release(dc_sink);
aconnector->dc_sink = NULL;
struct dc_sink *dc_sink = aconnector->dc_sink;
&dc_sink->dsc_caps.dsc_dec_caps))
if (!aconnector->dc_sink) {
struct dc_sink *dc_sink;
dc_sink = dc_link_add_remote_sink(
if (!dc_sink) {
dc_sink,
dc_sink->priv = aconnector;
aconnector->dc_sink = dc_sink;
if (aconnector->dc_sink && aconnector->dc_sink->sink_signal == SIGNAL_TYPE_VIRTUAL) {
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = NULL;
if (!aconnector->dc_sink) {
struct dc_sink *dc_sink;
dc_sink = dc_link_add_remote_sink(
if (!dc_sink) {
dc_sink, aconnector->dc_link->sink_count);
dc_sink->priv = aconnector;
aconnector->dc_sink = dc_sink;
if (aconnector->dc_sink && connector->state) {
if (aconnector->dc_sink) {
memset(&aconnector->dc_sink->dsc_caps,
0, sizeof(aconnector->dc_sink->dsc_caps));
if (connection_status == connector_status_disconnected && aconnector->dc_sink) {
dc_link_remove_remote_sink(aconnector->dc_link, aconnector->dc_sink);
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = NULL;
struct dc_sink *sink;
const struct dc_sink *sink,
struct dc_sink *sink = stream->sink;
struct dc_sink *dc_link_add_remote_sink(
void dc_link_remove_remote_sink(struct dc_link *link, struct dc_sink *sink)
static bool dc_sink_construct(struct dc_sink *sink, const struct dc_sink_init_data *init_params)
void dc_sink_retain(struct dc_sink *sink)
struct dc_sink *sink = container_of(kref, struct dc_sink, refcount);
void dc_sink_release(struct dc_sink *sink)
struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params)
struct dc_sink *sink = kzalloc_obj(*sink);
struct dc_sink *sink)
void update_stream_signal(struct dc_stream_state *stream, struct dc_sink *sink)
struct dc_sink *dc_sink_data)
struct dc_sink *remote_sinks[MAX_SINKS_PER_LINK];
struct dc_sink *local_sink;
const struct dc_sink *sink,
struct dc_sink *dc_link_add_remote_sink(
struct dc_sink *sink);
void dc_sink_retain(struct dc_sink *sink);
void dc_sink_release(struct dc_sink *sink);
struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params);
struct dc_sink *sink;
struct dc_stream_state *dc_create_stream_for_sink(struct dc_sink *dc_sink);
void update_stream_signal(struct dc_stream_state *stream, struct dc_sink *sink);
struct dc_sink *dc_sink_data);
struct dc_sink;
struct dc_sink *sink);
struct dc_sink *sink);
struct dc_sink;
struct dc_sink *(*add_remote_sink)(
void (*remove_remote_sink)(struct dc_link *link, struct dc_sink *sink);
static bool link_add_remote_sink_helper(struct dc_link *dc_link, struct dc_sink *sink)
struct dc_sink *link_add_remote_sink(
struct dc_sink *dc_sink;
dc_sink = dc_sink_create(init_data);
if (!dc_sink)
memmove(dc_sink->dc_edid.raw_edid, edid, len);
dc_sink->dc_edid.length = len;
dc_sink))
&dc_sink->dc_edid,
&dc_sink->edid_caps);
dc_sink->dc_edid.length = 0;
return dc_sink;
dc_sink_release(dc_sink);
void link_remove_remote_sink(struct dc_link *link, struct dc_sink *sink)
struct dc_sink *sink)
static void link_disconnect_remap(struct dc_sink *prev_sink, struct dc_link *link)
struct dc_sink *sink,
static void verify_link_capability(struct dc_link *link, struct dc_sink *sink,
struct dc_sink *sink = NULL;
struct dc_sink *prev_sink = NULL;
struct dc_sink *link_add_remote_sink(
void link_remove_remote_sink(struct dc_link *link, struct dc_sink *sink);