* @vsync_event_work:          worker to handle vsync event for autorefresh
  * @topology:                   topology of the display
  * @idle_timeout:              idle timeout duration in milliseconds
+ * @dp:                                msm_dp pointer, for DP encoders
  */
 struct dpu_encoder_virt {
        struct drm_encoder base;
        struct msm_display_topology topology;
 
        u32 idle_timeout;
+
+       struct msm_dp *dp;
 };
 
 #define to_dpu_encoder_virt(x) container_of(x, struct dpu_encoder_virt, base)
 
        trace_dpu_enc_mode_set(DRMID(drm_enc));
 
-       if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS && priv->dp)
-               msm_dp_display_mode_set(priv->dp, drm_enc, mode, adj_mode);
+       if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS)
+               msm_dp_display_mode_set(dpu_enc->dp, drm_enc, mode, adj_mode);
 
        list_for_each_entry(conn_iter, connector_list, head)
                if (conn_iter->encoder == drm_enc)
 
        _dpu_encoder_virt_enable_helper(drm_enc);
 
-       if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS && priv->dp) {
-               ret = msm_dp_display_enable(priv->dp,
-                                               drm_enc);
+       if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS) {
+               ret = msm_dp_display_enable(dpu_enc->dp, drm_enc);
                if (ret) {
                        DPU_ERROR_ENC(dpu_enc, "dp display enable failed: %d\n",
                                ret);
        /* wait for idle */
        dpu_encoder_wait_for_event(drm_enc, MSM_ENC_TX_COMPLETE);
 
-       if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS && priv->dp) {
-               if (msm_dp_display_pre_disable(priv->dp, drm_enc))
+       if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS) {
+               if (msm_dp_display_pre_disable(dpu_enc->dp, drm_enc))
                        DPU_ERROR_ENC(dpu_enc, "dp display push idle failed\n");
        }
 
 
        DPU_DEBUG_ENC(dpu_enc, "encoder disabled\n");
 
-       if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS && priv->dp) {
-               if (msm_dp_display_disable(priv->dp, drm_enc))
+       if (drm_enc->encoder_type == DRM_MODE_ENCODER_TMDS) {
+               if (msm_dp_display_disable(dpu_enc->dp, drm_enc))
                        DPU_ERROR_ENC(dpu_enc, "dp display disable failed\n");
        }
 
                timer_setup(&dpu_enc->vsync_event_timer,
                                dpu_encoder_vsync_event_handler,
                                0);
-
+       else if (disp_info->intf_type == DRM_MODE_ENCODER_TMDS)
+               dpu_enc->dp = priv->dp;
 
        INIT_DELAYED_WORK(&dpu_enc->delayed_off_work,
                        dpu_encoder_off_work);