#define I915_ENGINE_WEDGED_TIMEOUT  (60 * HZ)  /* Reset but no recovery? */
 
 struct ddi_vbt_port_info {
+       /* Non-NULL if port present. */
+       const struct child_device_config *child;
+
        int max_tmds_clock;
 
        /*
 #define HDMI_LEVEL_SHIFT_UNKNOWN       0xff
        u8 hdmi_level_shift;
 
-       u8 present:1;
        u8 supports_dvi:1;
        u8 supports_hdmi:1;
        u8 supports_dp:1;
 
        for (p = PORT_A; p < I915_MAX_PORTS; p++) {
                struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p];
 
-               if (p == port || !i->present ||
+               if (p == port || !i->child ||
                    info->alternate_ddc_pin != i->alternate_ddc_pin)
                        continue;
 
        for (p = PORT_A; p < I915_MAX_PORTS; p++) {
                struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p];
 
-               if (p == port || !i->present ||
+               if (p == port || !i->child ||
                    info->alternate_aux_channel != i->alternate_aux_channel)
                        continue;
 
 
        info = &dev_priv->vbt.ddi_port_info[port];
 
-       if (info->present) {
+       if (info->child) {
                DRM_DEBUG_KMS("More than one child device for port %c in VBT, using the first.\n",
                              port_name(port));
                return;
        }
 
-       info->present = true;
-
        is_dvi = child->device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
        is_dp = child->device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
        is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
                DRM_DEBUG_KMS("VBT DP max link rate for port %c: %d\n",
                              port_name(port), info->dp_max_link_rate);
        }
+
+       info->child = child;
 }
 
 static void parse_ddi_ports(struct drm_i915_private *dev_priv, u8 bdb_version)