enum clock_source_id clock_source,
        const struct dc_link_settings *link_settings)
 {
+       link->cur_link_settings = *link_settings;
        link->dc->hwss.enable_dp_link_output(link, link_res, signal,
                        clock_source, link_settings);
-       link->cur_link_settings = *link_settings;
        dp_receiver_power_ctrl(link, true);
 }
 
 {
        struct dc  *dc = link->ctx->dc;
 
+       if (!link->wa_flags.dp_keep_receiver_powered)
+               dp_receiver_power_ctrl(link, false);
+
        dc->hwss.disable_link_output(link, link_res, signal);
        /* Clear current link setting.*/
        memset(&link->cur_link_settings, 0,
 
        if (dmcu != NULL && dmcu->funcs->unlock_phy)
                dmcu->funcs->unlock_phy(dmcu);
 
+       dp_source_sequence_trace(link, DPCD_SOURCE_SEQ_AFTER_ENABLE_LINK_PHY);
 }
 
 void dce110_disable_link_output(struct dc_link *link,
        if (signal == SIGNAL_TYPE_EDP &&
                        link->dc->hwss.edp_backlight_control)
                link->dc->hwss.edp_backlight_control(link, false);
-       else if (dc_is_dp_signal(signal) && dmcu != NULL && dmcu->funcs->lock_phy)
+       else if (dmcu != NULL && dmcu->funcs->lock_phy)
                dmcu->funcs->lock_phy(dmcu);
 
        link_hwss->disable_link_output(link, link_res, signal);
        if (signal == SIGNAL_TYPE_EDP &&
                        link->dc->hwss.edp_backlight_control)
                link->dc->hwss.edp_power_control(link, false);
-       else if (dc_is_dp_signal(signal) && dmcu != NULL && dmcu->funcs->lock_phy)
+       else if (dmcu != NULL && dmcu->funcs->lock_phy)
                dmcu->funcs->unlock_phy(dmcu);
+       dp_source_sequence_trace(link, DPCD_SOURCE_SEQ_AFTER_DISABLE_LINK_PHY);
 }
 
 static const struct hw_sequencer_funcs dce110_funcs = {