struct dpu_hw_ctl *hw_ctl[MAX_CHANNELS_PER_ENC] = { NULL };
        struct dpu_hw_mixer *hw_lm[MAX_CHANNELS_PER_ENC] = { NULL };
        int num_lm = 0, num_ctl = 0;
-       int i = 0, ret;
+       int i, j, ret;
 
        if (!drm_enc) {
                DPU_ERROR("invalid encoder\n");
                        phys->hw_pp = dpu_enc->hw_pp[i];
                        phys->hw_ctl = hw_ctl[i];
 
+                       dpu_rm_init_hw_iter(&hw_iter, drm_enc->base.id,
+                                           DPU_HW_BLK_INTF);
+                       for (j = 0; j < MAX_CHANNELS_PER_ENC; j++) {
+                               struct dpu_hw_intf *hw_intf;
+
+                               if (!dpu_rm_get_hw(&dpu_kms->rm, &hw_iter))
+                                       break;
+
+                               hw_intf = (struct dpu_hw_intf *)hw_iter.hw;
+                               if (hw_intf->idx == phys->intf_idx)
+                                       phys->hw_intf = hw_intf;
+                       }
+
+                       if (!phys->hw_intf) {
+                               DPU_ERROR_ENC(dpu_enc,
+                                             "no intf block assigned at idx: %d\n",
+                                             i);
+                               goto error;
+                       }
+
                        phys->connector = conn->state->connector;
                        if (phys->ops.mode_set)
                                phys->ops.mode_set(phys, mode, adj_mode);
 
 
 static void dpu_encoder_phys_vid_enable(struct dpu_encoder_phys *phys_enc)
 {
-       struct msm_drm_private *priv;
-       struct dpu_rm_hw_iter iter;
        struct dpu_hw_ctl *ctl;
        u32 flush_mask = 0;
 
-       if (!phys_enc || !phys_enc->parent || !phys_enc->parent->dev ||
-                       !phys_enc->parent->dev->dev_private) {
-               DPU_ERROR("invalid encoder/device\n");
-               return;
-       }
-       priv = phys_enc->parent->dev->dev_private;
-
        ctl = phys_enc->hw_ctl;
 
-       dpu_rm_init_hw_iter(&iter, phys_enc->parent->base.id, DPU_HW_BLK_INTF);
-       while (dpu_rm_get_hw(&phys_enc->dpu_kms->rm, &iter)) {
-               struct dpu_hw_intf *hw_intf = (struct dpu_hw_intf *)iter.hw;
-
-               if (hw_intf->idx == phys_enc->intf_idx) {
-                       phys_enc->hw_intf = hw_intf;
-                       break;
-               }
-       }
-
-       if (!phys_enc->hw_intf) {
-               DPU_ERROR("hw_intf not assigned\n");
-               return;
-       }
-
        DPU_DEBUG_VIDENC(phys_enc, "\n");
 
        if (WARN_ON(!phys_enc->hw_intf->ops.enable_timing))