*/
                                if (get_stream_using_link_enc(state, eng_id) == NULL)
                                        state->res_ctx.link_enc_cfg_ctx.link_enc_avail[eng_idx] = eng_id;
+
                                stream->link_enc = NULL;
+                               state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].eng_id = ENGINE_ID_UNKNOWN;
+                               state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].stream = NULL;
                                break;
                        }
                }
        return link_enc;
 }
 /* Clear all link encoder assignments. */
-static void clear_enc_assignments(struct dc_state *state)
+static void clear_enc_assignments(struct dc *dc, struct dc_state *state)
 {
        int i;
-       enum engine_id eng_id;
-       struct dc_stream_state *stream;
 
        for (i = 0; i < MAX_PIPES; i++) {
                state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].valid = false;
-               eng_id = state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].eng_id;
-               stream = state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].stream;
-               if (eng_id != ENGINE_ID_UNKNOWN)
-                       state->res_ctx.link_enc_cfg_ctx.link_enc_avail[eng_id - ENGINE_ID_DIGA] = eng_id;
-               if (stream)
-                       stream->link_enc = NULL;
+               state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].eng_id = ENGINE_ID_UNKNOWN;
+               state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].stream = NULL;
        }
-}
-
-void link_enc_cfg_init(
-               struct dc *dc,
-               struct dc_state *state)
-{
-       int i;
 
        for (i = 0; i < dc->res_pool->res_cap->num_dig_link_enc; i++) {
                if (dc->res_pool->link_encoders[i])
                else
                        state->res_ctx.link_enc_cfg_ctx.link_enc_avail[i] = ENGINE_ID_UNKNOWN;
        }
+}
 
-       clear_enc_assignments(state);
+void link_enc_cfg_init(
+               struct dc *dc,
+               struct dc_state *state)
+{
+       clear_enc_assignments(dc, state);
 
        state->res_ctx.link_enc_cfg_ctx.mode = LINK_ENC_CFG_STEADY;
 }
 
        ASSERT(state->stream_count == stream_count);
 
-       if (stream_count == 0)
-               clear_enc_assignments(state);
-
        /* Release DIG link encoder resources before running assignment algorithm. */
-       for (i = 0; i < stream_count; i++)
-               dc->res_pool->funcs->link_enc_unassign(state, streams[i]);
+       for (i = 0; i < dc->current_state->stream_count; i++)
+               dc->res_pool->funcs->link_enc_unassign(state, dc->current_state->streams[i]);
 
        for (i = 0; i < MAX_PIPES; i++)
                ASSERT(state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].valid == false);