}
 }
 
-static const union child_device_config *
+static const struct child_device_config *
 child_device_ptr(const struct bdb_general_definitions *p_defs, int i)
 {
        return (const void *) &p_defs->devices[i * p_defs->child_dev_size];
 {
        struct sdvo_device_mapping *p_mapping;
        const struct bdb_general_definitions *p_defs;
-       const struct old_child_dev_config *child; /* legacy */
+       const struct child_device_config *child;
        int i, child_device_num, count;
        u16     block_size;
 
         * device size matches that of the *legacy* child device config
         * struct. Thus, SDVO mapping will be skipped for newer VBT.
         */
-       if (p_defs->child_dev_size != sizeof(*child)) {
+       if (p_defs->child_dev_size != sizeof(struct old_child_dev_config)) {
                DRM_DEBUG_KMS("Unsupported child device size for SDVO mapping.\n");
                return;
        }
                p_defs->child_dev_size;
        count = 0;
        for (i = 0; i < child_device_num; i++) {
-               child = &child_device_ptr(p_defs, i)->old;
+               child = child_device_ptr(p_defs, i);
                if (!child->device_type) {
                        /* skip the device block if device type is invalid */
                        continue;
 static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
                           const struct bdb_header *bdb)
 {
-       union child_device_config *it, *child = NULL;
+       struct child_device_config *it, *child = NULL;
        struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port];
        uint8_t hdmi_level_shift;
        int i, j;
                        if (dvo_ports[port][j] == -1)
                                break;
 
-                       if (it->common.dvo_port == dvo_ports[port][j]) {
+                       if (it->dvo_port == dvo_ports[port][j]) {
                                if (child) {
                                        DRM_DEBUG_KMS("More than one child device for port %c in VBT, using the first.\n",
                                                      port_name(port));
        if (!child)
                return;
 
-       aux_channel = child->common.aux_channel;
-       ddc_pin = child->common.ddc_pin;
+       aux_channel = child->aux_channel;
+       ddc_pin = child->ddc_pin;
 
-       is_dvi = child->common.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
-       is_dp = child->common.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
-       is_crt = child->common.device_type & DEVICE_TYPE_ANALOG_OUTPUT;
-       is_hdmi = is_dvi && (child->common.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
-       is_edp = is_dp && (child->common.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
+       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;
+       is_hdmi = is_dvi && (child->device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
+       is_edp = is_dp && (child->device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
 
        info->supports_dvi = is_dvi;
        info->supports_hdmi = is_hdmi;
 
        if (bdb->version >= 158) {
                /* The VBT HDMI level shift values match the table we have. */
-               hdmi_level_shift = child->common.hdmi_level_shifter_value;
+               hdmi_level_shift = child->hdmi_level_shifter_value;
                DRM_DEBUG_KMS("VBT HDMI level shift for port %c: %d\n",
                              port_name(port),
                              hdmi_level_shift);
        }
 
        /* Parse the I_boost config for SKL and above */
-       if (bdb->version >= 196 && child->common.iboost) {
-               info->dp_boost_level = translate_iboost(child->common.iboost_level & 0xF);
+       if (bdb->version >= 196 && child->iboost) {
+               info->dp_boost_level = translate_iboost(child->iboost_level & 0xF);
                DRM_DEBUG_KMS("VBT (e)DP boost level for port %c: %d\n",
                              port_name(port), info->dp_boost_level);
-               info->hdmi_boost_level = translate_iboost(child->common.iboost_level >> 4);
+               info->hdmi_boost_level = translate_iboost(child->iboost_level >> 4);
                DRM_DEBUG_KMS("VBT HDMI boost level for port %c: %d\n",
                              port_name(port), info->hdmi_boost_level);
        }
                     const struct bdb_header *bdb)
 {
        const struct bdb_general_definitions *p_defs;
-       const union child_device_config *p_child;
-       union child_device_config *child_dev_ptr;
+       const struct child_device_config *p_child;
+       struct child_device_config *child_dev_ptr;
        int i, child_device_num, count;
        u8 expected_size;
        u16 block_size;
        /* get the number of child device that is present */
        for (i = 0; i < child_device_num; i++) {
                p_child = child_device_ptr(p_defs, i);
-               if (!p_child->common.device_type) {
+               if (!p_child->device_type) {
                        /* skip the device block if device type is invalid */
                        continue;
                }
        count = 0;
        for (i = 0; i < child_device_num; i++) {
                p_child = child_device_ptr(p_defs, i);
-               if (!p_child->common.device_type) {
+               if (!p_child->device_type) {
                        /* skip the device block if device type is invalid */
                        continue;
                }
                 */
                if (bdb->version < 196) {
                        /* Set default values for bits added from v196 */
-                       child_dev_ptr->common.iboost = 0;
-                       child_dev_ptr->common.hpd_invert = 0;
+                       child_dev_ptr->iboost = 0;
+                       child_dev_ptr->hpd_invert = 0;
                }
 
                if (bdb->version < 192)
-                       child_dev_ptr->common.lspcon = 0;
+                       child_dev_ptr->lspcon = 0;
        }
        return;
 }
  */
 bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv)
 {
-       union child_device_config *p_child;
+       const struct child_device_config *child;
        int i;
 
        if (!dev_priv->vbt.int_tv_support)
                return true;
 
        for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
-               p_child = dev_priv->vbt.child_dev + i;
+               child = dev_priv->vbt.child_dev + i;
                /*
                 * If the device type is not TV, continue.
                 */
-               switch (p_child->old.device_type) {
+               switch (child->device_type) {
                case DEVICE_TYPE_INT_TV:
                case DEVICE_TYPE_TV:
                case DEVICE_TYPE_TV_SVIDEO_COMPOSITE:
                /* Only when the addin_offset is non-zero, it is regarded
                 * as present.
                 */
-               if (p_child->old.addin_offset)
+               if (child->addin_offset)
                        return true;
        }
 
  */
 bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin)
 {
+       const struct child_device_config *child;
        int i;
 
        if (!dev_priv->vbt.child_dev_num)
                return true;
 
        for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
-               union child_device_config *uchild = dev_priv->vbt.child_dev + i;
-               struct old_child_dev_config *child = &uchild->old;
+               child = dev_priv->vbt.child_dev + i;
 
                /* If the device type is not LFP, continue.
                 * We have to check both the new identifiers as well as the
  */
 bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port)
 {
+       const struct child_device_config *child;
        static const struct {
                u16 dp, hdmi;
        } port_mapping[] = {
                return false;
 
        for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
-               const union child_device_config *p_child =
-                       &dev_priv->vbt.child_dev[i];
-               if ((p_child->common.dvo_port == port_mapping[port].dp ||
-                    p_child->common.dvo_port == port_mapping[port].hdmi) &&
-                   (p_child->common.device_type & (DEVICE_TYPE_TMDS_DVI_SIGNALING |
-                                                   DEVICE_TYPE_DISPLAYPORT_OUTPUT)))
+               child = dev_priv->vbt.child_dev + i;
+
+               if ((child->dvo_port == port_mapping[port].dp ||
+                    child->dvo_port == port_mapping[port].hdmi) &&
+                   (child->device_type & (DEVICE_TYPE_TMDS_DVI_SIGNALING |
+                                          DEVICE_TYPE_DISPLAYPORT_OUTPUT)))
                        return true;
        }
 
  */
 bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port)
 {
-       union child_device_config *p_child;
+       const struct child_device_config *child;
        static const short port_mapping[] = {
                [PORT_B] = DVO_PORT_DPB,
                [PORT_C] = DVO_PORT_DPC,
                return false;
 
        for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
-               p_child = dev_priv->vbt.child_dev + i;
+               child = dev_priv->vbt.child_dev + i;
 
-               if (p_child->common.dvo_port == port_mapping[port] &&
-                   (p_child->common.device_type & DEVICE_TYPE_eDP_BITS) ==
+               if (child->dvo_port == port_mapping[port] &&
+                   (child->device_type & DEVICE_TYPE_eDP_BITS) ==
                    (DEVICE_TYPE_eDP & DEVICE_TYPE_eDP_BITS))
                        return true;
        }
        return false;
 }
 
-static bool child_dev_is_dp_dual_mode(const union child_device_config *p_child,
+static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
                                      enum port port)
 {
        static const struct {
        if (port == PORT_A || port >= ARRAY_SIZE(port_mapping))
                return false;
 
-       if ((p_child->common.device_type & DEVICE_TYPE_DP_DUAL_MODE_BITS) !=
+       if ((child->device_type & DEVICE_TYPE_DP_DUAL_MODE_BITS) !=
            (DEVICE_TYPE_DP_DUAL_MODE & DEVICE_TYPE_DP_DUAL_MODE_BITS))
                return false;
 
-       if (p_child->common.dvo_port == port_mapping[port].dp)
+       if (child->dvo_port == port_mapping[port].dp)
                return true;
 
        /* Only accept a HDMI dvo_port as DP++ if it has an AUX channel */
-       if (p_child->common.dvo_port == port_mapping[port].hdmi &&
-           p_child->common.aux_channel != 0)
+       if (child->dvo_port == port_mapping[port].hdmi &&
+           child->aux_channel != 0)
                return true;
 
        return false;
 bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv,
                                     enum port port)
 {
+       const struct child_device_config *child;
        int i;
 
        for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
-               const union child_device_config *p_child =
-                       &dev_priv->vbt.child_dev[i];
+               child = dev_priv->vbt.child_dev + i;
 
-               if (child_dev_is_dp_dual_mode(p_child, port))
+               if (child_dev_is_dp_dual_mode(child, port))
                        return true;
        }
 
 bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
                               enum port *port)
 {
-       union child_device_config *p_child;
+       const struct child_device_config *child;
        u8 dvo_port;
        int i;
 
        for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
-               p_child = dev_priv->vbt.child_dev + i;
+               child = dev_priv->vbt.child_dev + i;
 
-               if (!(p_child->common.device_type & DEVICE_TYPE_MIPI_OUTPUT))
+               if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
                        continue;
 
-               dvo_port = p_child->common.dvo_port;
+               dvo_port = child->dvo_port;
 
                switch (dvo_port) {
                case DVO_PORT_MIPIA:
 intel_bios_is_port_hpd_inverted(struct drm_i915_private *dev_priv,
                                enum port port)
 {
+       const struct child_device_config *child;
        int i;
 
        if (WARN_ON_ONCE(!IS_GEN9_LP(dev_priv)))
                return false;
 
        for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
-               if (!dev_priv->vbt.child_dev[i].common.hpd_invert)
+               child = dev_priv->vbt.child_dev + i;
+
+               if (!child->hpd_invert)
                        continue;
 
-               switch (dev_priv->vbt.child_dev[i].common.dvo_port) {
+               switch (child->dvo_port) {
                case DVO_PORT_DPA:
                case DVO_PORT_HDMIA:
                        if (port == PORT_A)
 intel_bios_is_lspcon_present(struct drm_i915_private *dev_priv,
                                enum port port)
 {
+       const struct child_device_config *child;
        int i;
 
        if (!HAS_LSPCON(dev_priv))
                return false;
 
        for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
-               if (!dev_priv->vbt.child_dev[i].common.lspcon)
+               child = dev_priv->vbt.child_dev + i;
+
+               if (!child->lspcon)
                        continue;
 
-               switch (dev_priv->vbt.child_dev[i].common.dvo_port) {
+               switch (child->dvo_port) {
                case DVO_PORT_DPA:
                case DVO_PORT_HDMIA:
                        if (port == PORT_A)