.is_dig_enabled = dce110_is_dig_enabled,
        .destroy = dce110_link_encoder_destroy,
        .get_max_link_cap = dce110_link_encoder_get_max_link_cap,
+       .get_dig_frontend = dce110_get_dig_frontend,
 };
 
 static enum bp_result link_transmitter_control(
 
 }
 
+unsigned int dce110_get_dig_frontend(struct link_encoder *enc)
+{
+       struct dce110_link_encoder *enc110 = TO_DCE110_LINK_ENC(enc);
+       u32 value;
+       enum engine_id result;
+
+       REG_GET(DIG_BE_CNTL, DIG_FE_SOURCE_SELECT, &value);
+
+       switch (value) {
+       case DCE110_DIG_FE_SOURCE_SELECT_DIGA:
+               result = ENGINE_ID_DIGA;
+               break;
+       case DCE110_DIG_FE_SOURCE_SELECT_DIGB:
+               result = ENGINE_ID_DIGB;
+               break;
+       case DCE110_DIG_FE_SOURCE_SELECT_DIGC:
+               result = ENGINE_ID_DIGC;
+               break;
+       case DCE110_DIG_FE_SOURCE_SELECT_DIGD:
+               result = ENGINE_ID_DIGD;
+               break;
+       case DCE110_DIG_FE_SOURCE_SELECT_DIGE:
+               result = ENGINE_ID_DIGE;
+               break;
+       case DCE110_DIG_FE_SOURCE_SELECT_DIGF:
+               result = ENGINE_ID_DIGF;
+               break;
+       case DCE110_DIG_FE_SOURCE_SELECT_DIGG:
+               result = ENGINE_ID_DIGG;
+               break;
+       default:
+               // invalid source select DIG
+               result = ENGINE_ID_UNKNOWN;
+       }
+
+       return result;
+}
+
 void dce110_link_encoder_set_dp_phy_pattern_training_pattern(
        struct link_encoder *enc,
        uint32_t index)
        .disable_hpd = dce110_link_encoder_disable_hpd,
        .is_dig_enabled = dce110_is_dig_enabled,
        .destroy = dce110_link_encoder_destroy,
-       .get_max_link_cap = dce110_link_encoder_get_max_link_cap
+       .get_max_link_cap = dce110_link_encoder_get_max_link_cap,
+       .get_dig_frontend = dce110_get_dig_frontend
 };
 
 void dce60_link_encoder_construct(