diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0708-drm-amd-dal-Refactor-Link-Encoder.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0708-drm-amd-dal-Refactor-Link-Encoder.patch | 1169 |
1 files changed, 0 insertions, 1169 deletions
diff --git a/common/recipes-kernel/linux/files/0708-drm-amd-dal-Refactor-Link-Encoder.patch b/common/recipes-kernel/linux/files/0708-drm-amd-dal-Refactor-Link-Encoder.patch deleted file mode 100644 index bda66a86..00000000 --- a/common/recipes-kernel/linux/files/0708-drm-amd-dal-Refactor-Link-Encoder.patch +++ /dev/null @@ -1,1169 +0,0 @@ -From b29a44047266c022dac059e93bf902cb078704ea Mon Sep 17 00:00:00 2001 -From: Chris Park <Chris.Park@amd.com> -Date: Tue, 12 Jan 2016 16:53:50 -0500 -Subject: [PATCH 0708/1110] drm/amd/dal: Refactor Link Encoder - -DCE8, 11, etc. refactored with duplicate reduction. - -Signed-off-by: Chris Park <Chris.Park@amd.com> -Acked-by: Harry Wentland <harry.wentland@amd.com> ---- - drivers/gpu/drm/amd/dal/dc/core/dc.c | 2 +- - drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 89 +++++- - drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c | 31 ++- - .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 63 ++--- - .../drm/amd/dal/dc/dce110/dce110_link_encoder.c | 306 ++++++++------------- - .../drm/amd/dal/dc/dce110/dce110_link_encoder.h | 24 +- - .../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 45 ++- - .../gpu/drm/amd/dal/dc/dce110/dce110_resource.h | 5 + - .../drm/amd/dal/dc/dce110/dce110_stream_encoder.h | 5 +- - .../amd/dal/dc/dce110/dce110_timing_generator.h | 7 +- - drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h | 37 --- - drivers/gpu/drm/amd/dal/dc/inc/link_encoder.h | 40 +++ - drivers/gpu/drm/amd/dal/include/encoder_types.h | 1 + - 13 files changed, 348 insertions(+), 307 deletions(-) - -diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c -index 14a1171..e49ec86 100644 ---- a/drivers/gpu/drm/amd/dal/dc/core/dc.c -+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c -@@ -175,7 +175,7 @@ static void init_hw(struct dc *dc) - * default signal on connector). */ - struct core_link *link = dc->links[i]; - if (link->public.connector_signal != SIGNAL_TYPE_VIRTUAL) -- dc->hwss.encoder_hw_init(link->link_enc); -+ link->link_enc->funcs->hw_init(link->link_enc); - } - - for(i = 0; i < dc->res_pool.controller_count; i++) { -diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c -index 3c96810..3f6a7bb 100644 ---- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c -+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c -@@ -817,6 +817,71 @@ static enum channel_id get_ddc_line(struct core_link *link, struct adapter_servi - return channel; - } - -+static enum transmitter translate_encoder_to_transmitter( -+ struct graphics_object_id encoder) -+{ -+ switch (encoder.id) { -+ case ENCODER_ID_INTERNAL_UNIPHY: -+ switch (encoder.enum_id) { -+ case ENUM_ID_1: -+ return TRANSMITTER_UNIPHY_A; -+ case ENUM_ID_2: -+ return TRANSMITTER_UNIPHY_B; -+ default: -+ return TRANSMITTER_UNKNOWN; -+ } -+ break; -+ case ENCODER_ID_INTERNAL_UNIPHY1: -+ switch (encoder.enum_id) { -+ case ENUM_ID_1: -+ return TRANSMITTER_UNIPHY_C; -+ case ENUM_ID_2: -+ return TRANSMITTER_UNIPHY_D; -+ default: -+ return TRANSMITTER_UNKNOWN; -+ } -+ break; -+ case ENCODER_ID_INTERNAL_UNIPHY2: -+ switch (encoder.enum_id) { -+ case ENUM_ID_1: -+ return TRANSMITTER_UNIPHY_E; -+ case ENUM_ID_2: -+ return TRANSMITTER_UNIPHY_F; -+ default: -+ return TRANSMITTER_UNKNOWN; -+ } -+ break; -+ case ENCODER_ID_INTERNAL_UNIPHY3: -+ switch (encoder.enum_id) { -+ case ENUM_ID_1: -+ return TRANSMITTER_UNIPHY_G; -+ default: -+ return TRANSMITTER_UNKNOWN; -+ } -+ break; -+ case ENCODER_ID_EXTERNAL_NUTMEG: -+ switch (encoder.enum_id) { -+ case ENUM_ID_1: -+ return TRANSMITTER_NUTMEG_CRT; -+ default: -+ return TRANSMITTER_UNKNOWN; -+ } -+ break; -+ case ENCODER_ID_EXTERNAL_TRAVIS: -+ switch (encoder.enum_id) { -+ case ENUM_ID_1: -+ return TRANSMITTER_TRAVIS_CRT; -+ case ENUM_ID_2: -+ return TRANSMITTER_TRAVIS_LCD; -+ default: -+ return TRANSMITTER_UNKNOWN; -+ } -+ break; -+ default: -+ return TRANSMITTER_UNKNOWN; -+ } -+} -+ - - static bool construct( - struct core_link *link, -@@ -921,6 +986,8 @@ static bool construct( - enc_init_data.connector = link->link_id; - enc_init_data.channel = get_ddc_line(link, as); - enc_init_data.hpd_source = get_hpd_line(link, as); -+ enc_init_data.transmitter = -+ translate_encoder_to_transmitter(enc_init_data.encoder); - link->link_enc = dc_ctx->dc->hwss.encoder_create(&enc_init_data); - - if( link->link_enc == NULL) { -@@ -1146,8 +1213,8 @@ static void enable_link_hdmi(struct core_stream *stream) - dc_service_memset(&stream->sink->link->cur_link_settings, 0, - sizeof(struct link_settings)); - -- link->ctx->dc->hwss.encoder_enable_tmds_output( -- stream->sink->link->link_enc, -+ link->link_enc->funcs->enable_tmds_output( -+ link->link_enc, - dal_clock_source_get_id(stream->clock_source), - stream->public.timing.display_color_depth, - stream->signal == SIGNAL_TYPE_HDMI_TYPE_A, -@@ -1198,8 +1265,6 @@ static enum dc_status enable_link(struct core_stream *stream) - - static void disable_link(struct core_stream *stream) - { -- struct dc *dc = stream->ctx->dc; -- - /* TODO dp_set_hw_test_pattern */ - - /* here we need to specify that encoder output settings -@@ -1217,8 +1282,10 @@ static void disable_link(struct core_stream *stream) - stream->sink->link, stream); - } - } else { -- dc->hwss.encoder_disable_output( -- stream->sink->link->link_enc, stream->signal); -+ struct link_encoder *encoder = -+ stream->sink->link->link_enc; -+ -+ encoder->funcs->disable_output(encoder, stream->signal); - } - } - -@@ -1249,14 +1316,14 @@ enum dc_status dc_link_validate_mode_timing( - - bool dc_link_set_backlight_level(const struct dc_link *public, uint32_t level) - { -- struct core_link *protected = DC_LINK_TO_CORE(public); -- struct dc_context *ctx = protected->ctx; -+ struct core_link *link = DC_LINK_TO_CORE(public); -+ struct dc_context *ctx = link->ctx; - - dal_logger_write(ctx->logger, LOG_MAJOR_BACKLIGHT, - LOG_MINOR_BACKLIGHT_INTERFACE, - "New Backlight level: %d (0x%X)\n", level, level); - -- ctx->dc->hwss.encoder_set_lcd_backlight_level(protected->link_enc, level); -+ link->link_enc->funcs->set_lcd_backlight_level(link->link_enc, level); - - return true; - } -@@ -1383,7 +1450,7 @@ static enum dc_status allocate_mst_payload(struct core_stream *stream) - return DC_OK; - - /* program DP source TX for payload */ -- dc->hwss.update_mst_stream_allocation_table( -+ link_encoder->funcs->update_mst_stream_allocation_table( - link_encoder, - &proposed_table); - -@@ -1468,7 +1535,7 @@ static enum dc_status deallocate_mst_payload(struct core_stream *stream) - proposed_table.stream_allocations[i].slot_count); - } - -- dc->hwss.update_mst_stream_allocation_table( -+ link_encoder->funcs->update_mst_stream_allocation_table( - link_encoder, - &proposed_table); - -diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c -index e9ae9e1..8f1b869 100644 ---- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c -+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c -@@ -56,16 +56,24 @@ void dp_enable_link_phy( - enum signal_type signal, - const struct link_settings *link_settings) - { -- if (dc_is_dp_sst_signal(signal)) -- link->dc->hwss.encoder_enable_dp_output( -- link->link_enc, -+ struct link_encoder *link_enc = link->link_enc; -+ -+ if (dc_is_dp_sst_signal(signal)) { -+ if (signal == SIGNAL_TYPE_EDP) { -+ link_enc->funcs->power_control(link_enc, true); -+ link_enc->funcs->backlight_control(link_enc, true); -+ } -+ -+ link_enc->funcs->enable_dp_output( -+ link_enc, - link_settings, - CLOCK_SOURCE_ID_EXTERNAL); -- else -- link->dc->hwss.encoder_enable_dp_mst_output( -- link->link_enc, -+ } else { -+ link_enc->funcs->enable_dp_mst_output( -+ link_enc, - link_settings, - CLOCK_SOURCE_ID_EXTERNAL); -+ } - - dp_receiver_power_ctrl(link, true); - } -@@ -75,7 +83,10 @@ void dp_disable_link_phy(struct core_link *link, enum signal_type signal) - if (!link->wa_flags.dp_keep_receiver_powered) - dp_receiver_power_ctrl(link, false); - -- link->dc->hwss.encoder_disable_output(link->link_enc, signal); -+ if (signal == SIGNAL_TYPE_EDP) -+ link->link_enc->funcs->backlight_control(link->link_enc, false); -+ -+ link->link_enc->funcs->disable_output(link->link_enc, signal); - - /* Clear current link setting.*/ - dc_service_memset(&link->cur_link_settings, 0, -@@ -118,7 +129,7 @@ bool dp_set_hw_training_pattern( - pattern_param.custom_pattern_size = 0; - pattern_param.dp_panel_mode = dp_get_panel_mode(link); - -- link->ctx->dc->hwss.encoder_set_dp_phy_pattern(encoder, &pattern_param); -+ encoder->funcs->dp_set_phy_pattern(encoder, &pattern_param); - - return true; - } -@@ -131,7 +142,7 @@ void dp_set_hw_lane_settings( - struct link_encoder *encoder = link->link_enc; - - /* call Encoder to set lane settings */ -- link->ctx->dc->hwss.encoder_dp_set_lane_settings(encoder, link_settings); -+ encoder->funcs->dp_set_lane_settings(encoder, link_settings); - } - - enum dp_panel_mode dp_get_panel_mode(struct core_link *link) -@@ -186,5 +197,5 @@ void dp_set_hw_test_pattern( - pattern_param.custom_pattern_size = 0; - pattern_param.dp_panel_mode = dp_get_panel_mode(link); - -- link->ctx->dc->hwss.encoder_set_dp_phy_pattern(encoder, &pattern_param); -+ encoder->funcs->dp_set_phy_pattern(encoder, &pattern_param); - } -diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c -index 59a3bce..8afd42e 100644 ---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c -+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c -@@ -46,10 +46,10 @@ - #include "dce/dce_11_0_sh_mask.h" - - struct dce110_hw_seq_reg_offsets { -- uint32_t dcfe_offset; -- uint32_t blnd_offset; -- uint32_t crtc_offset; -- uint32_t dcp_offset; -+ uint32_t dcfe; -+ uint32_t blnd; -+ uint32_t crtc; -+ uint32_t dcp; - }; - - enum crtc_stereo_mixer_mode { -@@ -99,36 +99,36 @@ enum { - - static const struct dce110_hw_seq_reg_offsets reg_offsets[] = { - { -- .dcfe_offset = (mmDCFE0_DCFE_MEM_PWR_CTRL - mmDCFE0_DCFE_MEM_PWR_CTRL), -- .blnd_offset = (mmBLND0_BLND_CONTROL - mmBLND0_BLND_CONTROL), -- .crtc_offset = (mmCRTC0_CRTC_GSL_CONTROL - mmCRTC0_CRTC_GSL_CONTROL), -- .dcp_offset = (mmDCP0_DVMM_PTE_CONTROL - mmDCP0_DVMM_PTE_CONTROL), -+ .dcfe = (mmDCFE0_DCFE_MEM_PWR_CTRL - mmDCFE_MEM_PWR_CTRL), -+ .blnd = (mmBLND0_BLND_CONTROL - mmBLND_CONTROL), -+ .crtc = (mmCRTC0_CRTC_GSL_CONTROL - mmCRTC_GSL_CONTROL), -+ .dcp = (mmDCP0_DVMM_PTE_CONTROL - mmDVMM_PTE_CONTROL), - }, - { -- .dcfe_offset = (mmDCFE1_DCFE_MEM_PWR_CTRL - mmDCFE0_DCFE_MEM_PWR_CTRL), -- .blnd_offset = (mmBLND1_BLND_CONTROL - mmBLND0_BLND_CONTROL), -- .crtc_offset = (mmCRTC1_CRTC_GSL_CONTROL - mmCRTC0_CRTC_GSL_CONTROL), -- .dcp_offset = (mmDCP1_DVMM_PTE_CONTROL - mmDCP0_DVMM_PTE_CONTROL), -+ .dcfe = (mmDCFE1_DCFE_MEM_PWR_CTRL - mmDCFE0_DCFE_MEM_PWR_CTRL), -+ .blnd = (mmBLND1_BLND_CONTROL - mmBLND0_BLND_CONTROL), -+ .crtc = (mmCRTC1_CRTC_GSL_CONTROL - mmCRTC0_CRTC_GSL_CONTROL), -+ .dcp = (mmDCP1_DVMM_PTE_CONTROL - mmDCP0_DVMM_PTE_CONTROL), - }, - { -- .dcfe_offset = (mmDCFE2_DCFE_MEM_PWR_CTRL - mmDCFE0_DCFE_MEM_PWR_CTRL), -- .blnd_offset = (mmBLND2_BLND_CONTROL - mmBLND0_BLND_CONTROL), -- .crtc_offset = (mmCRTC2_CRTC_GSL_CONTROL - mmCRTC0_CRTC_GSL_CONTROL), -- .dcp_offset = (mmDCP2_DVMM_PTE_CONTROL - mmDCP0_DVMM_PTE_CONTROL), -+ .dcfe = (mmDCFE2_DCFE_MEM_PWR_CTRL - mmDCFE0_DCFE_MEM_PWR_CTRL), -+ .blnd = (mmBLND2_BLND_CONTROL - mmBLND0_BLND_CONTROL), -+ .crtc = (mmCRTC2_CRTC_GSL_CONTROL - mmCRTC0_CRTC_GSL_CONTROL), -+ .dcp = (mmDCP2_DVMM_PTE_CONTROL - mmDCP0_DVMM_PTE_CONTROL), - } - }; - - #define HW_REG_DCFE(reg, id)\ -- (reg + reg_offsets[id].dcfe_offset) -+ (reg + reg_offsets[id].dcfe) - - #define HW_REG_BLND(reg, id)\ -- (reg + reg_offsets[id].blnd_offset) -+ (reg + reg_offsets[id].blnd) - - #define HW_REG_CRTC(reg, id)\ -- (reg + reg_offsets[id].crtc_offset) -+ (reg + reg_offsets[id].crtc) - - #define HW_REG_DCP(reg, id)\ -- (reg + reg_offsets[id].dcp_offset) -+ (reg + reg_offsets[id].dcp) - - - static void init_pte(struct dc_context *ctx); -@@ -689,7 +689,7 @@ static void enable_stream(struct core_stream *stream) - * connect DIG back_end to front_end while enable_stream and - * disconnect them during disable_stream - * BY this, it is logic clean to separate stream and link */ -- dce110_link_encoder_connect_dig_be_to_fe(link->link_enc, -+ link->link_enc->funcs->connect_dig_be_to_fe(link->link_enc, - stream->stream_enc->id, true); - - } -@@ -722,7 +722,7 @@ static void disable_stream(struct core_stream *stream) - if (dc_is_dp_signal(stream->signal)) - stream->stream_enc->funcs->dp_blank(stream->stream_enc); - -- dce110_link_encoder_connect_dig_be_to_fe( -+ link->link_enc->funcs->connect_dig_be_to_fe( - link->link_enc, - stream->stream_enc->id, - false); -@@ -854,7 +854,7 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx, - program_fmt(opp, &stream->fmt_bit_depth, &stream->clamping); - - if (stream->signal != SIGNAL_TYPE_VIRTUAL) -- dce110_link_encoder_setup( -+ stream->sink->link->link_enc->funcs->setup( - stream->sink->link->link_enc, - stream->signal); - -@@ -921,7 +921,7 @@ static void power_down_encoders(struct dc *dc) - - for (i = 0; i < dc->link_count; i++) { - if (dc->links[i]->public.connector_signal != SIGNAL_TYPE_VIRTUAL) -- dce110_link_encoder_disable_output( -+ dc->links[i]->link_enc->funcs->disable_output( - dc->links[i]->link_enc, SIGNAL_TYPE_NONE); - } - } -@@ -1758,28 +1758,19 @@ static const struct hw_sequencer_funcs dce110_funcs = { - .disable_vga = disable_vga, - .encoder_create = dce110_link_encoder_create, - .encoder_destroy = dce110_link_encoder_destroy, -- .encoder_hw_init = dce110_link_encoder_hw_init, -- .encoder_enable_tmds_output = dce110_link_encoder_enable_tmds_output, -- .encoder_enable_dp_output = dce110_link_encoder_enable_dp_output, -- .encoder_enable_dp_mst_output = -- dce110_link_encoder_enable_dp_mst_output, -- .encoder_disable_output = dce110_link_encoder_disable_output, -- .encoder_set_dp_phy_pattern = dce110_link_encoder_set_dp_phy_pattern, -- .encoder_dp_set_lane_settings = dce110_link_encoder_dp_set_lane_settings, -- .encoder_set_lcd_backlight_level = dce110_link_encoder_set_lcd_backlight_level, - .clock_gating_power_up = dal_dc_clock_gating_dce110_power_up, - .transform_power_up = dce110_transform_power_up, - .construct_resource_pool = dce110_construct_resource_pool, - .destruct_resource_pool = dce110_destruct_resource_pool, - .validate_with_context = dce110_validate_with_context, - .validate_bandwidth = dce110_validate_bandwidth, -- .enable_display_pipe_clock_gating = dce110_enable_display_pipe_clock_gating, -+ .enable_display_pipe_clock_gating = -+ dce110_enable_display_pipe_clock_gating, - .enable_display_power_gating = dce110_enable_display_power_gating, - .program_bw = dce110_program_bw, - .enable_stream = enable_stream, - .disable_stream = disable_stream, -- .update_mst_stream_allocation_table = dce110_link_encoder_update_mst_stream_allocation_table, -- .set_mst_bandwidth = set_mst_bandwidth -+ .set_mst_bandwidth = set_mst_bandwidth, - }; - - bool dce110_hw_sequencer_construct(struct dc *dc) -diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c -index 0f0ecfe..3eaced4 100644 ---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c -+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c -@@ -51,6 +51,9 @@ - #define DCE110_DIG_FE_SOURCE_SELECT_DIGA 0x1 - #define DCE110_DIG_FE_SOURCE_SELECT_DIGB 0x2 - #define DCE110_DIG_FE_SOURCE_SELECT_DIGC 0x4 -+#define DCE110_DIG_FE_SOURCE_SELECT_DIGD 0x08 -+#define DCE110_DIG_FE_SOURCE_SELECT_DIGE 0x10 -+#define DCE110_DIG_FE_SOURCE_SELECT_DIGF 0x20 - - /* all values are in milliseconds */ - /* For eDP, after power-up/power/down, -@@ -85,91 +88,30 @@ enum { - - - #define DIG_REG(reg)\ -- (reg + enc110->offsets.dig_offset) -+ (reg + enc110->offsets.dig) - - #define DP_REG(reg)\ -- (reg + enc110->offsets.dp_offset) -- --static const struct dce110_link_enc_offsets reg_offsets[] = { --{ -- .dig_offset = (mmDIG0_DIG_FE_CNTL - mmDIG0_DIG_FE_CNTL), -- .dp_offset = (mmDP0_DP_SEC_CNTL - mmDP0_DP_SEC_CNTL) --}, --{ -- .dig_offset = (mmDIG1_DIG_FE_CNTL - mmDIG0_DIG_FE_CNTL), -- .dp_offset = (mmDP1_DP_SEC_CNTL - mmDP0_DP_SEC_CNTL) --}, --{ -- .dig_offset = (mmDIG2_DIG_FE_CNTL - mmDIG0_DIG_FE_CNTL), -- .dp_offset = (mmDP2_DP_SEC_CNTL - mmDP0_DP_SEC_CNTL) --} -+ (reg + enc110->offsets.dp) -+ -+static struct link_encoder_funcs dce110_lnk_enc_funcs = { -+ .validate_output_with_stream = -+ dce110_link_encoder_validate_output_with_stream, -+ .hw_init = dce110_link_encoder_hw_init, -+ .setup = dce110_link_encoder_setup, -+ .enable_tmds_output = dce110_link_encoder_enable_tmds_output, -+ .enable_dp_output = dce110_link_encoder_enable_dp_output, -+ .enable_dp_mst_output = dce110_link_encoder_enable_dp_mst_output, -+ .disable_output = dce110_link_encoder_disable_output, -+ .dp_set_lane_settings = dce110_link_encoder_dp_set_lane_settings, -+ .dp_set_phy_pattern = dce110_link_encoder_dp_set_phy_pattern, -+ .update_mst_stream_allocation_table = -+ dce110_link_encoder_update_mst_stream_allocation_table, -+ .set_lcd_backlight_level = dce110_link_encoder_set_lcd_backlight_level, -+ .backlight_control = dce110_link_encoder_edp_backlight_control, -+ .power_control = dce110_link_encoder_edp_power_control, -+ .connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe - }; - --static enum transmitter translate_encoder_to_transmitter( -- struct graphics_object_id encoder) --{ -- switch (encoder.id) { -- case ENCODER_ID_INTERNAL_UNIPHY: -- switch (encoder.enum_id) { -- case ENUM_ID_1: -- return TRANSMITTER_UNIPHY_A; -- case ENUM_ID_2: -- return TRANSMITTER_UNIPHY_B; -- default: -- return TRANSMITTER_UNKNOWN; -- } -- break; -- case ENCODER_ID_INTERNAL_UNIPHY1: -- switch (encoder.enum_id) { -- case ENUM_ID_1: -- return TRANSMITTER_UNIPHY_C; -- case ENUM_ID_2: -- return TRANSMITTER_UNIPHY_D; -- default: -- return TRANSMITTER_UNKNOWN; -- } -- break; -- case ENCODER_ID_INTERNAL_UNIPHY2: -- switch (encoder.enum_id) { -- case ENUM_ID_1: -- return TRANSMITTER_UNIPHY_E; -- case ENUM_ID_2: -- return TRANSMITTER_UNIPHY_F; -- default: -- return TRANSMITTER_UNKNOWN; -- } -- break; -- case ENCODER_ID_INTERNAL_UNIPHY3: -- switch (encoder.enum_id) { -- case ENUM_ID_1: -- return TRANSMITTER_UNIPHY_G; -- default: -- return TRANSMITTER_UNKNOWN; -- } -- break; -- case ENCODER_ID_EXTERNAL_NUTMEG: -- switch (encoder.enum_id) { -- case ENUM_ID_1: -- return TRANSMITTER_NUTMEG_CRT; -- default: -- return TRANSMITTER_UNKNOWN; -- } -- break; -- case ENCODER_ID_EXTERNAL_TRAVIS: -- switch (encoder.enum_id) { -- case ENUM_ID_1: -- return TRANSMITTER_TRAVIS_CRT; -- case ENUM_ID_2: -- return TRANSMITTER_TRAVIS_LCD; -- default: -- return TRANSMITTER_UNKNOWN; -- } -- break; -- default: -- return TRANSMITTER_UNKNOWN; -- } --} -- - static enum bp_result link_transmitter_control( - struct dce110_link_encoder *enc110, - struct bp_transmitter_control *cntl) -@@ -503,7 +445,7 @@ static void set_dp_phy_pattern_hbr2_compliance( - - /* Setup DIG encoder in DP SST mode */ - -- dce110_link_encoder_setup(&enc110->base, SIGNAL_TYPE_DISPLAY_PORT); -+ enc110->base.funcs->setup(&enc110->base, SIGNAL_TYPE_DISPLAY_PORT); - - /* program correct panel mode*/ - { -@@ -611,6 +553,12 @@ static uint8_t get_frontend_source( - return DCE110_DIG_FE_SOURCE_SELECT_DIGB; - case ENGINE_ID_DIGC: - return DCE110_DIG_FE_SOURCE_SELECT_DIGC; -+ case ENGINE_ID_DIGD: -+ return DCE110_DIG_FE_SOURCE_SELECT_DIGD; -+ case ENGINE_ID_DIGE: -+ return DCE110_DIG_FE_SOURCE_SELECT_DIGE; -+ case ENGINE_ID_DIGF: -+ return DCE110_DIG_FE_SOURCE_SELECT_DIGF; - default: - ASSERT_CRITICAL(false); - return DCE110_DIG_FE_SOURCE_SELECT_INVALID; -@@ -651,63 +599,6 @@ static bool is_panel_powered_on(struct dce110_link_encoder *enc110) - - /* - * @brief -- * eDP only. Control the power of the eDP panel. -- */ --static void link_encoder_edp_power_control( -- struct dce110_link_encoder *enc110, -- bool power_up) --{ -- struct dc_context *ctx = enc110->base.ctx; -- struct bp_transmitter_control cntl = { 0 }; -- enum bp_result bp_result; -- -- if (dal_graphics_object_id_get_connector_id(enc110->base.connector) != -- CONNECTOR_ID_EDP) { -- BREAK_TO_DEBUGGER(); -- return; -- } -- -- if ((power_up && !is_panel_powered_on(enc110)) || -- (!power_up && is_panel_powered_on(enc110))) { -- -- /* Send VBIOS command to prompt eDP panel power */ -- -- dal_logger_write(ctx->logger, -- LOG_MAJOR_HW_TRACE, -- LOG_MINOR_HW_TRACE_RESUME_S3, -- "%s: Panel Power action: %s\n", -- __func__, (power_up ? "On":"Off")); -- -- cntl.action = power_up ? -- TRANSMITTER_CONTROL_POWER_ON : -- TRANSMITTER_CONTROL_POWER_OFF; -- cntl.transmitter = enc110->base.transmitter; -- cntl.connector_obj_id = enc110->base.connector; -- cntl.coherent = false; -- cntl.lanes_number = LANE_COUNT_FOUR; -- cntl.hpd_sel = enc110->base.hpd_source; -- -- bp_result = link_transmitter_control(enc110, &cntl); -- -- if (BP_RESULT_OK != bp_result) { -- -- dal_logger_write(ctx->logger, -- LOG_MAJOR_ERROR, -- LOG_MINOR_HW_TRACE_RESUME_S3, -- "%s: Panel Power bp_result: %d\n", -- __func__, bp_result); -- } -- } else { -- dal_logger_write(ctx->logger, -- LOG_MAJOR_HW_TRACE, -- LOG_MINOR_HW_TRACE_RESUME_S3, -- "%s: Skipping Panel Power action: %s\n", -- __func__, (power_up ? "On":"Off")); -- } --} -- --/* -- * @brief - * eDP only. - */ - static void link_encoder_edp_wait_for_hpd_ready( -@@ -778,6 +669,66 @@ static void link_encoder_edp_wait_for_hpd_ready( - } - } - -+/* -+ * @brief -+ * eDP only. Control the power of the eDP panel. -+ */ -+void dce110_link_encoder_edp_power_control( -+ struct link_encoder *enc, -+ bool power_up) -+{ -+ struct dce110_link_encoder *enc110 = TO_DCE110_LINK_ENC(enc); -+ struct dc_context *ctx = enc110->base.ctx; -+ struct bp_transmitter_control cntl = { 0 }; -+ enum bp_result bp_result; -+ -+ if (dal_graphics_object_id_get_connector_id(enc110->base.connector) != -+ CONNECTOR_ID_EDP) { -+ BREAK_TO_DEBUGGER(); -+ return; -+ } -+ -+ if ((power_up && !is_panel_powered_on(enc110)) || -+ (!power_up && is_panel_powered_on(enc110))) { -+ -+ /* Send VBIOS command to prompt eDP panel power */ -+ -+ dal_logger_write(ctx->logger, -+ LOG_MAJOR_HW_TRACE, -+ LOG_MINOR_HW_TRACE_RESUME_S3, -+ "%s: Panel Power action: %s\n", -+ __func__, (power_up ? "On":"Off")); -+ -+ cntl.action = power_up ? -+ TRANSMITTER_CONTROL_POWER_ON : -+ TRANSMITTER_CONTROL_POWER_OFF; -+ cntl.transmitter = enc110->base.transmitter; -+ cntl.connector_obj_id = enc110->base.connector; -+ cntl.coherent = false; -+ cntl.lanes_number = LANE_COUNT_FOUR; -+ cntl.hpd_sel = enc110->base.hpd_source; -+ -+ bp_result = link_transmitter_control(enc110, &cntl); -+ -+ if (BP_RESULT_OK != bp_result) { -+ -+ dal_logger_write(ctx->logger, -+ LOG_MAJOR_ERROR, -+ LOG_MINOR_HW_TRACE_RESUME_S3, -+ "%s: Panel Power bp_result: %d\n", -+ __func__, bp_result); -+ } -+ } else { -+ dal_logger_write(ctx->logger, -+ LOG_MAJOR_HW_TRACE, -+ LOG_MINOR_HW_TRACE_RESUME_S3, -+ "%s: Skipping Panel Power action: %s\n", -+ __func__, (power_up ? "On":"Off")); -+ } -+ -+ link_encoder_edp_wait_for_hpd_ready(enc110, true); -+} -+ - static void aux_initialize( - struct dce110_link_encoder *enc110) - { -@@ -819,10 +770,11 @@ static bool is_panel_backlight_on(struct dce110_link_encoder *enc110) - * @brief - * eDP only. Control the backlight of the eDP panel - */ --static void link_encoder_edp_backlight_control( -- struct dce110_link_encoder *enc110, -+void dce110_link_encoder_edp_backlight_control( -+ struct link_encoder *enc, - bool enable) - { -+ struct dce110_link_encoder *enc110 = TO_DCE110_LINK_ENC(enc); - struct dc_context *ctx = enc110->base.ctx; - struct bp_transmitter_control cntl = { 0 }; - -@@ -987,10 +939,14 @@ static bool validate_hdmi_output( - uint32_t max_hdmi_pixel_clock) - { - enum dc_color_depth max_deep_color = max_hdmi_deep_color; -- - /* expressed in KHz */ - uint32_t pixel_clock = 0; - -+ /*TODO: unhardcode*/ -+ max_tmds_clk_from_edid_in_mhz = 0; -+ max_hdmi_deep_color = COLOR_DEPTH_121212; -+ max_hdmi_pixel_clock = 600000; -+ - if (max_deep_color > enc110->base.features.max_deep_color) - max_deep_color = enc110->base.features.max_deep_color; - -@@ -1101,12 +1057,14 @@ static bool validate_wireless_output( - return false; - } - --static bool construct( -+bool dce110_link_encoder_construct( - struct dce110_link_encoder *enc110, -- const struct encoder_init_data *init_data) -+ const struct encoder_init_data *init_data, -+ const struct dce110_link_enc_offsets *offsets) - { - struct graphics_object_encoder_cap_info enc_cap_info = {0}; - -+ enc110->base.funcs = &dce110_lnk_enc_funcs; - enc110->base.ctx = init_data->ctx; - enc110->base.id = init_data->encoder; - -@@ -1120,8 +1078,7 @@ static bool construct( - - enc110->base.features.flags.raw = 0; - -- enc110->base.transmitter = translate_encoder_to_transmitter( -- init_data->encoder); -+ enc110->base.transmitter = init_data->transmitter; - - enc110->base.features.flags.bits.IS_AUDIO_CAPABLE = true; - -@@ -1157,6 +1114,8 @@ static bool construct( - * This will let DCE 8.1 share DCE 8.0 as much as possible - */ - -+ enc110->offsets = *offsets; -+ - switch (enc110->base.transmitter) { - case TRANSMITTER_UNIPHY_A: - enc110->base.preferred_engine = ENGINE_ID_DIGA; -@@ -1172,8 +1131,6 @@ static bool construct( - enc110->base.preferred_engine = ENGINE_ID_UNKNOWN; - } - -- enc110->offsets = reg_offsets[enc110->base.transmitter]; -- - dal_logger_write(init_data->ctx->logger, - LOG_MAJOR_I2C_AUX, - LOG_MINOR_I2C_AUX_CFG, -@@ -1224,32 +1181,9 @@ static bool construct( - return true; - } - --struct link_encoder *dce110_link_encoder_create( -- const struct encoder_init_data *init) --{ -- struct dce110_link_encoder *enc110 = -- dc_service_alloc(init->ctx, sizeof(struct dce110_link_encoder)); -- -- if (!enc110) -- return NULL; -- -- if (construct(enc110, init)) -- return &enc110->base; -- -- BREAK_TO_DEBUGGER(); -- dc_service_free(init->ctx, enc110); -- return NULL; --} -- --void dce110_link_encoder_destroy(struct link_encoder **enc) --{ -- dc_service_free((*enc)->ctx, TO_DCE110_LINK_ENC(*enc)); -- *enc = NULL; --} -- - bool dce110_link_encoder_validate_output_with_stream( - struct link_encoder *enc, -- const struct core_stream *stream) -+ struct core_stream *stream) - { - struct dce110_link_encoder *enc110 = TO_DCE110_LINK_ENC(enc); - bool is_valid; -@@ -1329,11 +1263,7 @@ void dce110_link_encoder_hw_init( - ASSERT(result == BP_RESULT_OK); - - } else if (enc110->base.connector.id == CONNECTOR_ID_EDP) { -- link_encoder_edp_power_control(enc110, true); -- -- link_encoder_edp_wait_for_hpd_ready( -- enc110, true); -- -+ enc->funcs->power_control(&enc110->base, true); - } - aux_initialize(enc110); - -@@ -1444,19 +1374,6 @@ void dce110_link_encoder_enable_dp_output( - struct bp_transmitter_control cntl = { 0 }; - enum bp_result result; - -- if (enc110->base.connector.id == CONNECTOR_ID_EDP) { -- /* power up eDP panel */ -- -- link_encoder_edp_power_control(enc110, true); -- -- link_encoder_edp_wait_for_hpd_ready(enc110, true); -- -- /* have to turn off the backlight -- * before power down eDP panel -- */ -- link_encoder_edp_backlight_control(enc110, true); -- } -- - /* Enable the PHY */ - - /* number_of_lanes is used for pixel clock adjust, -@@ -1544,13 +1461,6 @@ void dce110_link_encoder_disable_output( - struct bp_transmitter_control cntl = { 0 }; - enum bp_result result; - -- if (enc110->base.connector.id == CONNECTOR_ID_EDP) { -- /* have to turn off the backlight -- * before power down eDP panel */ -- link_encoder_edp_backlight_control( -- enc110, false); -- } -- - if (!is_dig_enabled(enc110) && - dal_adapter_service_should_optimize( - enc110->base.adapter_service, -@@ -1653,7 +1563,7 @@ void dce110_link_encoder_dp_set_lane_settings( - } - - /* set DP PHY test and training patterns */ --void dce110_link_encoder_set_dp_phy_pattern( -+void dce110_link_encoder_dp_set_phy_pattern( - struct link_encoder *enc, - const struct encoder_set_dp_phy_pattern_param *param) - { -diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h -index 156cdc8..df6e265 100644 ---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h -+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h -@@ -32,8 +32,8 @@ - container_of(link_encoder, struct dce110_link_encoder, base) - - struct dce110_link_enc_offsets { -- uint32_t dig_offset; -- uint32_t dp_offset; -+ int32_t dig; -+ int32_t dp; - }; - - struct dce110_link_encoder { -@@ -41,14 +41,14 @@ struct dce110_link_encoder { - struct dce110_link_enc_offsets offsets; - }; - --struct link_encoder *dce110_link_encoder_create( -- const struct encoder_init_data *init); -- --void dce110_link_encoder_destroy(struct link_encoder **enc); -+bool dce110_link_encoder_construct( -+ struct dce110_link_encoder *enc110, -+ const struct encoder_init_data *init_data, -+ const struct dce110_link_enc_offsets *offsets); - - bool dce110_link_encoder_validate_output_with_stream( - struct link_encoder *enc, -- const struct core_stream *stream); -+ struct core_stream *stream); - - /****************** HW programming ************************/ - -@@ -93,7 +93,7 @@ void dce110_link_encoder_dp_set_lane_settings( - struct link_encoder *enc, - const struct link_training_settings *link_settings); - --void dce110_link_encoder_set_dp_phy_pattern( -+void dce110_link_encoder_dp_set_phy_pattern( - struct link_encoder *enc, - const struct encoder_set_dp_phy_pattern_param *param); - -@@ -106,6 +106,14 @@ void dce110_link_encoder_set_lcd_backlight_level( - struct link_encoder *enc, - uint32_t level); - -+void dce110_link_encoder_edp_backlight_control( -+ struct link_encoder *enc, -+ bool enable); -+ -+void dce110_link_encoder_edp_power_control( -+ struct link_encoder *enc, -+ bool power_up); -+ - void dce110_link_encoder_connect_dig_be_to_fe( - struct link_encoder *enc, - enum engine_id engine, -diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c -index 8f04707..c43dd07 100644 ---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c -+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c -@@ -79,6 +79,21 @@ static const struct dce110_stream_enc_offsets dce110_str_enc_offsets[] = { - } - }; - -+static const struct dce110_link_enc_offsets dce110_lnk_enc_reg_offsets[] = { -+ { -+ .dig = (mmDIG0_DIG_FE_CNTL - mmDIG_FE_CNTL), -+ .dp = (mmDP0_DP_SEC_CNTL - mmDP_SEC_CNTL) -+ }, -+ { -+ .dig = (mmDIG1_DIG_FE_CNTL - mmDIG_FE_CNTL), -+ .dp = (mmDP1_DP_SEC_CNTL - mmDP_SEC_CNTL) -+ }, -+ { -+ .dig = (mmDIG2_DIG_FE_CNTL - mmDIG_FE_CNTL), -+ .dp = (mmDP2_DP_SEC_CNTL - mmDP_SEC_CNTL) -+ } -+}; -+ - static const struct dce110_mem_input_reg_offsets dce110_mi_reg_offsets[] = { - { - .dcp = (mmDCP0_GRPH_CONTROL - mmGRPH_CONTROL), -@@ -239,6 +254,34 @@ static struct input_pixel_processor *dce110_ipp_create( - return NULL; - } - -+struct link_encoder *dce110_link_encoder_create( -+ const struct encoder_init_data *enc_init_data) -+{ -+ struct dce110_link_encoder *enc110 = -+ dc_service_alloc( -+ enc_init_data->ctx, -+ sizeof(struct dce110_link_encoder)); -+ -+ if (!enc110) -+ return NULL; -+ -+ if (dce110_link_encoder_construct( -+ enc110, -+ enc_init_data, -+ &dce110_lnk_enc_reg_offsets[enc_init_data->transmitter])) -+ return &enc110->base; -+ -+ BREAK_TO_DEBUGGER(); -+ dc_service_free(enc_init_data->ctx, enc110); -+ return NULL; -+} -+ -+void dce110_link_encoder_destroy(struct link_encoder **enc) -+{ -+ dc_service_free((*enc)->ctx, TO_DCE110_LINK_ENC(*enc)); -+ *enc = NULL; -+} -+ - bool dce110_construct_resource_pool( - struct adapter_service *adapter_serv, - struct dc *dc, -@@ -667,7 +710,7 @@ static enum dc_status validate_mapped_resource( - if (status != DC_OK) - return status; - -- if (!dce110_link_encoder_validate_output_with_stream( -+ if (!link->link_enc->funcs->validate_output_with_stream( - link->link_enc, - stream)) - return DC_FAIL_ENC_VALIDATE; -diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h -index e113d11..e47b19d 100644 ---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h -+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h -@@ -51,5 +51,10 @@ enum dc_status dce110_validate_bandwidth( - const struct dc *dc, - struct validate_context *context); - -+struct link_encoder *dce110_link_encoder_create( -+ const struct encoder_init_data *enc_init_data); -+ -+void dce110_link_encoder_destroy(struct link_encoder **enc); -+ - #endif /* __DC_RESOURCE_DCE110_H__ */ - -diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h -index ddc16cd..7e110b4 100644 ---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h -+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h -@@ -32,13 +32,14 @@ - container_of(stream_encoder, struct dce110_stream_encoder, base) - - struct dce110_stream_enc_offsets { -- uint32_t dig; -- uint32_t dp; -+ int32_t dig; -+ int32_t dp; - }; - - struct dce110_stream_encoder { - struct stream_encoder base; - struct dce110_stream_enc_offsets offsets; -+ struct dce110_stream_enc_offsets derived_offsets; - }; - - bool dce110_stream_encoder_construct( -diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.h -index a84ab8b..e6aaacc 100644 ---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.h -+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.h -@@ -51,16 +51,17 @@ - #define CRTC_OVERSCAN_COLOR_BLACK_COLOR_R_RGB_LIMITED_RANGE 0X40 - - struct dce110_timing_generator_offsets { -- uint32_t crtc; -- uint32_t dcp; -+ int32_t crtc; -+ int32_t dcp; - - /* DCE80 use only */ -- uint32_t dmif; -+ int32_t dmif; - }; - - struct dce110_timing_generator { - struct timing_generator base; - struct dce110_timing_generator_offsets offsets; -+ struct dce110_timing_generator_offsets derived_offsets; - - enum controller_id controller_id; - -diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h -index 59ed137..46721cd 100644 ---- a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h -+++ b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h -@@ -83,39 +83,6 @@ struct hw_sequencer_funcs { - - void (*encoder_destroy)(struct link_encoder **enc); - -- void (*encoder_hw_init)( -- struct link_encoder *enc); -- -- void (*encoder_enable_tmds_output)( -- struct link_encoder *enc, -- enum clock_source_id clock_source, -- enum dc_color_depth color_depth, -- bool hdmi, -- bool dual_link, -- uint32_t pixel_clock); -- -- void (*encoder_enable_dp_output)( -- struct link_encoder *enc, -- const struct link_settings *link_settings, -- enum clock_source_id clock_source); -- -- void (*encoder_enable_dp_mst_output)( -- struct link_encoder *enc, -- const struct link_settings *link_settings, -- enum clock_source_id clock_source); -- -- void (*encoder_disable_output)( -- struct link_encoder *enc, -- enum signal_type signal); -- -- void (*encoder_set_dp_phy_pattern)( -- struct link_encoder *enc, -- const struct encoder_set_dp_phy_pattern_param *param); -- -- void (*encoder_dp_set_lane_settings)( -- struct link_encoder *enc, -- const struct link_training_settings *link_settings); -- - /* backlight control */ - void (*encoder_set_lcd_backlight_level)(struct link_encoder *enc, - uint32_t level); -@@ -162,10 +129,6 @@ struct hw_sequencer_funcs { - void (*disable_stream)( - struct core_stream *stream); - -- void (*update_mst_stream_allocation_table)( -- struct link_encoder *enc, -- const struct dp_mst_stream_allocation_table *table); -- - void (*set_mst_bandwidth)( - struct stream_encoder *enc, - struct fixed31_32 avg_time_slots_per_mtp); -diff --git a/drivers/gpu/drm/amd/dal/dc/inc/link_encoder.h b/drivers/gpu/drm/amd/dal/dc/inc/link_encoder.h -index d4a0d24..f63c479 100644 ---- a/drivers/gpu/drm/amd/dal/dc/inc/link_encoder.h -+++ b/drivers/gpu/drm/amd/dal/dc/inc/link_encoder.h -@@ -9,11 +9,13 @@ - #define LINK_ENCODER_H_ - - #include "include/encoder_types.h" -+#include "core_types.h" - - struct link_enc_status { - int dummy; /*TODO*/ - }; - struct link_encoder { -+ struct link_encoder_funcs *funcs; - struct adapter_service *adapter_service; - int32_t aux_channel_offset; - struct dc_context *ctx; -@@ -27,4 +29,42 @@ struct link_encoder { - enum hpd_source_id hpd_source; - }; - -+struct link_encoder_funcs { -+ bool (*validate_output_with_stream)(struct link_encoder *enc, -+ struct core_stream *stream); -+ void (*hw_init)(struct link_encoder *enc); -+ void (*setup)(struct link_encoder *enc, -+ enum signal_type signal); -+ void (*enable_tmds_output)(struct link_encoder *enc, -+ enum clock_source_id clock_source, -+ enum dc_color_depth color_depth, -+ bool hdmi, -+ bool dual_link, -+ uint32_t pixel_clock); -+ void (*enable_dp_output)(struct link_encoder *enc, -+ const struct link_settings *link_settings, -+ enum clock_source_id clock_source); -+ void (*enable_dp_mst_output)(struct link_encoder *enc, -+ const struct link_settings *link_settings, -+ enum clock_source_id clock_source); -+ void (*disable_output)(struct link_encoder *link_enc, -+ enum signal_type signal); -+ void (*dp_set_lane_settings)(struct link_encoder *enc, -+ const struct link_training_settings *link_settings); -+ void (*dp_set_phy_pattern)(struct link_encoder *enc, -+ const struct encoder_set_dp_phy_pattern_param *para); -+ void (*update_mst_stream_allocation_table)( -+ struct link_encoder *enc, -+ const struct dp_mst_stream_allocation_table *table); -+ void (*set_lcd_backlight_level) (struct link_encoder *enc, -+ uint32_t level); -+ void (*backlight_control) (struct link_encoder *enc, -+ bool enable); -+ void (*power_control) (struct link_encoder *enc, -+ bool power_up); -+ void (*connect_dig_be_to_fe)(struct link_encoder *enc, -+ enum engine_id engine, -+ bool connect); -+}; -+ - #endif /* LINK_ENCODER_H_ */ -diff --git a/drivers/gpu/drm/amd/dal/include/encoder_types.h b/drivers/gpu/drm/amd/dal/include/encoder_types.h -index c267d30..6a7b317 100644 ---- a/drivers/gpu/drm/amd/dal/include/encoder_types.h -+++ b/drivers/gpu/drm/amd/dal/include/encoder_types.h -@@ -39,6 +39,7 @@ struct encoder_init_data { - /* TODO: in DAL2, here was pointer to EventManagerInterface */ - struct graphics_object_id encoder; - struct dc_context *ctx; -+ enum transmitter transmitter; - }; - - struct encoder_context { --- -2.7.4 - |