#include "i915_drv.h"
 #include "intel_dp.h"
 
+
 #define DP_LINK_STATUS_SIZE    6
 #define DP_LINK_CHECK_TIMEOUT  (10 * 1000)
 
        if (dp_priv->dpms_mode == DRM_MODE_DPMS_ON)
                intel_dp_check_link_status(intel_output);
 }
-
+/*
+ * Enumerate the child dev array parsed from VBT to check whether
+ * the given DP is present.
+ * If it is present, return 1.
+ * If it is not present, return false.
+ * If no child dev is parsed from VBT, it is assumed that the given
+ * DP is present.
+ */
+int dp_is_present_in_vbt(struct drm_device *dev, int dp_reg)
+{
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       struct child_device_config *p_child;
+       int i, dp_port, ret;
+
+       if (!dev_priv->child_dev_num)
+               return 1;
+
+       dp_port = 0;
+       if (dp_reg == DP_B || PCH_DP_B)
+               dp_port = PORT_IDPB;
+       else if (dp_reg == DP_C || PCH_DP_C)
+               dp_port = PORT_IDPC;
+       else if (dp_reg == DP_D || PCH_DP_D)
+               dp_port = PORT_IDPD;
+
+       ret = 0;
+       for (i = 0; i < dev_priv->child_dev_num; i++) {
+               p_child = dev_priv->child_dev + i;
+               /*
+                * If the device type is not DP, continue.
+                */
+               if (p_child->device_type != DEVICE_TYPE_DP &&
+                       p_child->device_type != DEVICE_TYPE_eDP)
+                       continue;
+               /* Find the eDP port */
+               if (dp_reg == DP_A && p_child->device_type == DEVICE_TYPE_eDP) {
+                       ret = 1;
+                       break;
+               }
+               /* Find the DP port */
+               if (p_child->dvo_port == dp_port) {
+                       ret = 1;
+                       break;
+               }
+       }
+       return ret;
+}
 void
 intel_dp_init(struct drm_device *dev, int output_reg)
 {
        struct intel_dp_priv *dp_priv;
        const char *name = NULL;
 
+       if (!dp_is_present_in_vbt(dev, output_reg)) {
+               DRM_DEBUG_KMS("DP is not present. Ignore it\n");
+               return;
+       }
        intel_output = kcalloc(sizeof(struct intel_output) + 
                               sizeof(struct intel_dp_priv), 1, GFP_KERNEL);
        if (!intel_output)