drm/i915: Use encoder->devdata more
[platform/kernel/linux-starfive.git] / drivers / gpu / drm / i915 / display / intel_bios.c
index 572a4e3..8cf2392 100644 (file)
  *
  */
 
-#include <drm/drm_edid.h>
 #include <drm/display/drm_dp_helper.h>
 #include <drm/display/drm_dsc_helper.h>
-
-#include "display/intel_display.h"
-#include "display/intel_display_types.h"
-#include "display/intel_gmbus.h"
+#include <drm/drm_edid.h>
 
 #include "i915_drv.h"
 #include "i915_reg.h"
+#include "intel_display.h"
+#include "intel_display_types.h"
+#include "intel_gmbus.h"
 
 #define _INTEL_BIOS_PRIVATE
 #include "intel_vbt_defs.h"
@@ -620,14 +619,14 @@ static void dump_pnp_id(struct drm_i915_private *i915,
 
 static int opregion_get_panel_type(struct drm_i915_private *i915,
                                   const struct intel_bios_encoder_data *devdata,
-                                  const struct edid *edid)
+                                  const struct drm_edid *drm_edid, bool use_fallback)
 {
        return intel_opregion_get_panel_type(i915);
 }
 
 static int vbt_get_panel_type(struct drm_i915_private *i915,
                              const struct intel_bios_encoder_data *devdata,
-                             const struct edid *edid)
+                             const struct drm_edid *drm_edid, bool use_fallback)
 {
        const struct bdb_lvds_options *lvds_options;
 
@@ -652,12 +651,13 @@ static int vbt_get_panel_type(struct drm_i915_private *i915,
 
 static int pnpid_get_panel_type(struct drm_i915_private *i915,
                                const struct intel_bios_encoder_data *devdata,
-                               const struct edid *edid)
+                               const struct drm_edid *drm_edid, bool use_fallback)
 {
        const struct bdb_lvds_lfp_data *data;
        const struct bdb_lvds_lfp_data_ptrs *ptrs;
        const struct lvds_pnp_id *edid_id;
        struct lvds_pnp_id edid_id_nodate;
+       const struct edid *edid = drm_edid_raw(drm_edid); /* FIXME */
        int i, best = -1;
 
        if (!edid)
@@ -701,9 +701,9 @@ static int pnpid_get_panel_type(struct drm_i915_private *i915,
 
 static int fallback_get_panel_type(struct drm_i915_private *i915,
                                   const struct intel_bios_encoder_data *devdata,
-                                  const struct edid *edid)
+                                  const struct drm_edid *drm_edid, bool use_fallback)
 {
-       return 0;
+       return use_fallback ? 0 : -1;
 }
 
 enum panel_type {
@@ -715,13 +715,13 @@ enum panel_type {
 
 static int get_panel_type(struct drm_i915_private *i915,
                          const struct intel_bios_encoder_data *devdata,
-                         const struct edid *edid)
+                         const struct drm_edid *drm_edid, bool use_fallback)
 {
        struct {
                const char *name;
                int (*get_panel_type)(struct drm_i915_private *i915,
                                      const struct intel_bios_encoder_data *devdata,
-                                     const struct edid *edid);
+                                     const struct drm_edid *drm_edid, bool use_fallback);
                int panel_type;
        } panel_types[] = {
                [PANEL_TYPE_OPREGION] = {
@@ -744,7 +744,8 @@ static int get_panel_type(struct drm_i915_private *i915,
        int i;
 
        for (i = 0; i < ARRAY_SIZE(panel_types); i++) {
-               panel_types[i].panel_type = panel_types[i].get_panel_type(i915, devdata, edid);
+               panel_types[i].panel_type = panel_types[i].get_panel_type(i915, devdata,
+                                                                         drm_edid, use_fallback);
 
                drm_WARN_ON(&i915->drm, panel_types[i].panel_type > 0xf &&
                            panel_types[i].panel_type != 0xff);
@@ -1032,6 +1033,7 @@ parse_lfp_backlight(struct drm_i915_private *i915,
        }
 
        panel->vbt.backlight.type = INTEL_BACKLIGHT_DISPLAY_DDI;
+       panel->vbt.backlight.controller = 0;
        if (i915->display.vbt.version >= 191) {
                size_t exp_size;
 
@@ -1200,9 +1202,7 @@ child_device_ptr(const struct bdb_general_definitions *defs, int i)
 static void
 parse_sdvo_device_mapping(struct drm_i915_private *i915)
 {
-       struct sdvo_device_mapping *mapping;
        const struct intel_bios_encoder_data *devdata;
-       const struct child_device_config *child;
        int count = 0;
 
        /*
@@ -1215,7 +1215,8 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
        }
 
        list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
-               child = &devdata->child;
+               const struct child_device_config *child = &devdata->child;
+               struct sdvo_device_mapping *mapping;
 
                if (child->slave_addr != SLAVE_ADDR1 &&
                    child->slave_addr != SLAVE_ADDR2) {
@@ -2073,7 +2074,6 @@ parse_compression_parameters(struct drm_i915_private *i915)
 {
        const struct bdb_compression_parameters *params;
        struct intel_bios_encoder_data *devdata;
-       const struct child_device_config *child;
        u16 block_size;
        int index;
 
@@ -2098,7 +2098,7 @@ parse_compression_parameters(struct drm_i915_private *i915)
        }
 
        list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
-               child = &devdata->child;
+               const struct child_device_config *child = &devdata->child;
 
                if (!child->compression_enable)
                        continue;
@@ -2224,14 +2224,14 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
 
 static enum port get_port_by_ddc_pin(struct drm_i915_private *i915, u8 ddc_pin)
 {
-       const struct intel_bios_encoder_data *devdata;
        enum port port;
 
        if (!ddc_pin)
                return PORT_NONE;
 
        for_each_port(port) {
-               devdata = i915->display.vbt.ports[port];
+               const struct intel_bios_encoder_data *devdata =
+                       i915->display.vbt.ports[port];
 
                if (devdata && ddc_pin == devdata->child.ddc_pin)
                        return port;
@@ -2290,14 +2290,14 @@ static void sanitize_ddc_pin(struct intel_bios_encoder_data *devdata,
 
 static enum port get_port_by_aux_ch(struct drm_i915_private *i915, u8 aux_ch)
 {
-       const struct intel_bios_encoder_data *devdata;
        enum port port;
 
        if (!aux_ch)
                return PORT_NONE;
 
        for_each_port(port) {
-               devdata = i915->display.vbt.ports[port];
+               const struct intel_bios_encoder_data *devdata =
+                       i915->display.vbt.ports[port];
 
                if (devdata && aux_ch == devdata->child.aux_channel)
                        return port;
@@ -2466,6 +2466,22 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
                                          dvo_port);
 }
 
+static enum port
+dsi_dvo_port_to_port(struct drm_i915_private *i915, u8 dvo_port)
+{
+       switch (dvo_port) {
+       case DVO_PORT_MIPIA:
+               return PORT_A;
+       case DVO_PORT_MIPIC:
+               if (DISPLAY_VER(i915) >= 11)
+                       return PORT_B;
+               else
+                       return PORT_C;
+       default:
+               return PORT_NONE;
+       }
+}
+
 static int parse_bdb_230_dp_max_link_rate(const int vbt_max_link_rate)
 {
        switch (vbt_max_link_rate) {
@@ -2504,7 +2520,7 @@ static int parse_bdb_216_dp_max_link_rate(const int vbt_max_link_rate)
        }
 }
 
-static int _intel_bios_dp_max_link_rate(const struct intel_bios_encoder_data *devdata)
+int intel_bios_dp_max_link_rate(const struct intel_bios_encoder_data *devdata)
 {
        if (!devdata || devdata->i915->display.vbt.version < 216)
                return 0;
@@ -2515,7 +2531,7 @@ static int _intel_bios_dp_max_link_rate(const struct intel_bios_encoder_data *de
                return parse_bdb_216_dp_max_link_rate(devdata->child.dp_max_link_rate);
 }
 
-static int _intel_bios_dp_max_lane_count(const struct intel_bios_encoder_data *devdata)
+int intel_bios_dp_max_lane_count(const struct intel_bios_encoder_data *devdata)
 {
        if (!devdata || devdata->i915->display.vbt.version < 244)
                return 0;
@@ -2569,14 +2585,27 @@ intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata)
        return devdata->child.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
 }
 
-static bool
+bool
 intel_bios_encoder_supports_edp(const struct intel_bios_encoder_data *devdata)
 {
        return intel_bios_encoder_supports_dp(devdata) &&
                devdata->child.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR;
 }
 
-static int _intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata)
+static bool
+intel_bios_encoder_supports_dsi(const struct intel_bios_encoder_data *devdata)
+{
+       return devdata->child.device_type & DEVICE_TYPE_MIPI_OUTPUT;
+}
+
+bool
+intel_bios_encoder_is_lspcon(const struct intel_bios_encoder_data *devdata)
+{
+       return devdata && HAS_LSPCON(devdata->i915) && devdata->child.lspcon;
+}
+
+/* This is an index in the HDMI/DVI DDI buffer translation table, or -1 */
+int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata)
 {
        if (!devdata || devdata->i915->display.vbt.version < 158)
                return -1;
@@ -2584,7 +2613,7 @@ static int _intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *de
        return devdata->child.hdmi_level_shifter_value;
 }
 
-static int _intel_bios_max_tmds_clock(const struct intel_bios_encoder_data *devdata)
+int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata)
 {
        if (!devdata || devdata->i915->display.vbt.version < 204)
                return 0;
@@ -2626,7 +2655,7 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata,
 {
        struct drm_i915_private *i915 = devdata->i915;
        const struct child_device_config *child = &devdata->child;
-       bool is_dvi, is_hdmi, is_dp, is_edp, is_crt, supports_typec_usb, supports_tbt;
+       bool is_dvi, is_hdmi, is_dp, is_edp, is_dsi, is_crt, supports_typec_usb, supports_tbt;
        int dp_boost_level, dp_max_link_rate, hdmi_boost_level, hdmi_level_shift, max_tmds_clock;
 
        is_dvi = intel_bios_encoder_supports_dvi(devdata);
@@ -2634,44 +2663,45 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata,
        is_crt = intel_bios_encoder_supports_crt(devdata);
        is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
        is_edp = intel_bios_encoder_supports_edp(devdata);
+       is_dsi = intel_bios_encoder_supports_dsi(devdata);
 
        supports_typec_usb = intel_bios_encoder_supports_typec_usb(devdata);
        supports_tbt = intel_bios_encoder_supports_tbt(devdata);
 
        drm_dbg_kms(&i915->drm,
-                   "Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d\n",
-                   port_name(port), is_crt, is_dvi, is_hdmi, is_dp, is_edp,
-                   HAS_LSPCON(i915) && child->lspcon,
+                   "Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d DSI:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d\n",
+                   port_name(port), is_crt, is_dvi, is_hdmi, is_dp, is_edp, is_dsi,
+                   intel_bios_encoder_is_lspcon(devdata),
                    supports_typec_usb, supports_tbt,
                    devdata->dsc != NULL);
 
-       hdmi_level_shift = _intel_bios_hdmi_level_shift(devdata);
+       hdmi_level_shift = intel_bios_hdmi_level_shift(devdata);
        if (hdmi_level_shift >= 0) {
                drm_dbg_kms(&i915->drm,
                            "Port %c VBT HDMI level shift: %d\n",
                            port_name(port), hdmi_level_shift);
        }
 
-       max_tmds_clock = _intel_bios_max_tmds_clock(devdata);
+       max_tmds_clock = intel_bios_hdmi_max_tmds_clock(devdata);
        if (max_tmds_clock)
                drm_dbg_kms(&i915->drm,
                            "Port %c VBT HDMI max TMDS clock: %d kHz\n",
                            port_name(port), max_tmds_clock);
 
        /* I_boost config for SKL and above */
-       dp_boost_level = intel_bios_encoder_dp_boost_level(devdata);
+       dp_boost_level = intel_bios_dp_boost_level(devdata);
        if (dp_boost_level)
                drm_dbg_kms(&i915->drm,
                            "Port %c VBT (e)DP boost level: %d\n",
                            port_name(port), dp_boost_level);
 
-       hdmi_boost_level = intel_bios_encoder_hdmi_boost_level(devdata);
+       hdmi_boost_level = intel_bios_hdmi_boost_level(devdata);
        if (hdmi_boost_level)
                drm_dbg_kms(&i915->drm,
                            "Port %c VBT HDMI boost level: %d\n",
                            port_name(port), hdmi_boost_level);
 
-       dp_max_link_rate = _intel_bios_dp_max_link_rate(devdata);
+       dp_max_link_rate = intel_bios_dp_max_link_rate(devdata);
        if (dp_max_link_rate)
                drm_dbg_kms(&i915->drm,
                            "Port %c VBT DP max link rate: %d\n",
@@ -2693,6 +2723,8 @@ static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
        enum port port;
 
        port = dvo_port_to_port(i915, child->dvo_port);
+       if (port == PORT_NONE && DISPLAY_VER(i915) >= 11)
+               port = dsi_dvo_port_to_port(i915, child->dvo_port);
        if (port == PORT_NONE)
                return;
 
@@ -3183,14 +3215,26 @@ out:
        kfree(oprom_vbt);
 }
 
-void intel_bios_init_panel(struct drm_i915_private *i915,
-                          struct intel_panel *panel,
-                          const struct intel_bios_encoder_data *devdata,
-                          const struct edid *edid)
+static void intel_bios_init_panel(struct drm_i915_private *i915,
+                                 struct intel_panel *panel,
+                                 const struct intel_bios_encoder_data *devdata,
+                                 const struct drm_edid *drm_edid,
+                                 bool use_fallback)
 {
-       init_vbt_panel_defaults(panel);
+       /* already have it? */
+       if (panel->vbt.panel_type >= 0) {
+               drm_WARN_ON(&i915->drm, !use_fallback);
+               return;
+       }
 
-       panel->vbt.panel_type = get_panel_type(i915, devdata, edid);
+       panel->vbt.panel_type = get_panel_type(i915, devdata,
+                                              drm_edid, use_fallback);
+       if (panel->vbt.panel_type < 0) {
+               drm_WARN_ON(&i915->drm, use_fallback);
+               return;
+       }
+
+       init_vbt_panel_defaults(panel);
 
        parse_panel_options(i915, panel);
        parse_generic_dtd(i915, panel);
@@ -3205,6 +3249,21 @@ void intel_bios_init_panel(struct drm_i915_private *i915,
        parse_mipi_sequence(i915, panel);
 }
 
+void intel_bios_init_panel_early(struct drm_i915_private *i915,
+                                struct intel_panel *panel,
+                                const struct intel_bios_encoder_data *devdata)
+{
+       intel_bios_init_panel(i915, panel, devdata, NULL, false);
+}
+
+void intel_bios_init_panel_late(struct drm_i915_private *i915,
+                               struct intel_panel *panel,
+                               const struct intel_bios_encoder_data *devdata,
+                               const struct drm_edid *drm_edid)
+{
+       intel_bios_init_panel(i915, panel, devdata, drm_edid, true);
+}
+
 /**
  * intel_bios_driver_remove - Free any resources allocated by intel_bios_init()
  * @i915: i915 device instance
@@ -3252,7 +3311,6 @@ void intel_bios_fini_panel(struct intel_panel *panel)
 bool intel_bios_is_tv_present(struct drm_i915_private *i915)
 {
        const struct intel_bios_encoder_data *devdata;
-       const struct child_device_config *child;
 
        if (!i915->display.vbt.int_tv_support)
                return false;
@@ -3261,7 +3319,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
                return true;
 
        list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
-               child = &devdata->child;
+               const struct child_device_config *child = &devdata->child;
 
                /*
                 * If the device type is not TV, continue.
@@ -3295,13 +3353,12 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
 bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
 {
        const struct intel_bios_encoder_data *devdata;
-       const struct child_device_config *child;
 
        if (list_empty(&i915->display.vbt.display_devices))
                return true;
 
        list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
-               child = &devdata->child;
+               const struct child_device_config *child = &devdata->child;
 
                /* If the device type is not LFP, continue.
                 * We have to check both the new identifiers as well as the
@@ -3343,25 +3400,22 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
  */
 bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
 {
+       const struct intel_bios_encoder_data *devdata;
+
        if (WARN_ON(!has_ddi_port_info(i915)))
                return true;
 
-       return i915->display.vbt.ports[port];
-}
+       if (!is_port_valid(i915, port))
+               return false;
 
-/**
- * intel_bios_is_port_edp - is the device in given port eDP
- * @i915:      i915 device instance
- * @port:      port to check
- *
- * Return true if the device in %port is eDP.
- */
-bool intel_bios_is_port_edp(struct drm_i915_private *i915, enum port port)
-{
-       const struct intel_bios_encoder_data *devdata =
-               intel_bios_encoder_data_lookup(i915, port);
+       list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+               const struct child_device_config *child = &devdata->child;
 
-       return devdata && intel_bios_encoder_supports_edp(devdata);
+               if (dvo_port_to_port(i915, child->dvo_port) == port)
+                       return true;
+       }
+
+       return false;
 }
 
 static bool intel_bios_encoder_supports_dp_dual_mode(const struct intel_bios_encoder_data *devdata)
@@ -3403,30 +3457,24 @@ bool intel_bios_is_dsi_present(struct drm_i915_private *i915,
                               enum port *port)
 {
        const struct intel_bios_encoder_data *devdata;
-       const struct child_device_config *child;
-       u8 dvo_port;
 
        list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
-               child = &devdata->child;
+               const struct child_device_config *child = &devdata->child;
+               u8 dvo_port = child->dvo_port;
 
                if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
                        continue;
 
-               dvo_port = child->dvo_port;
-
-               if (dvo_port == DVO_PORT_MIPIA ||
-                   (dvo_port == DVO_PORT_MIPIB && DISPLAY_VER(i915) >= 11) ||
-                   (dvo_port == DVO_PORT_MIPIC && DISPLAY_VER(i915) < 11)) {
-                       if (port)
-                               *port = dvo_port - DVO_PORT_MIPIA;
-                       return true;
-               } else if (dvo_port == DVO_PORT_MIPIB ||
-                          dvo_port == DVO_PORT_MIPIC ||
-                          dvo_port == DVO_PORT_MIPID) {
+               if (dsi_dvo_port_to_port(i915, dvo_port) == PORT_NONE) {
                        drm_dbg_kms(&i915->drm,
                                    "VBT has unsupported DSI port %c\n",
                                    port_name(dvo_port - DVO_PORT_MIPIA));
+                       continue;
                }
+
+               if (port)
+                       *port = dsi_dvo_port_to_port(i915, dvo_port);
+               return true;
        }
 
        return false;
@@ -3503,15 +3551,14 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
 {
        struct drm_i915_private *i915 = to_i915(encoder->base.dev);
        const struct intel_bios_encoder_data *devdata;
-       const struct child_device_config *child;
 
        list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
-               child = &devdata->child;
+               const struct child_device_config *child = &devdata->child;
 
                if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
                        continue;
 
-               if (child->dvo_port - DVO_PORT_MIPIA == encoder->port) {
+               if (dsi_dvo_port_to_port(i915, child->dvo_port) == encoder->port) {
                        if (!devdata->dsc)
                                return false;
 
@@ -3525,62 +3572,10 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
        return false;
 }
 
-/**
- * intel_bios_is_port_hpd_inverted - is HPD inverted for %port
- * @i915:      i915 device instance
- * @port:      port to check
- *
- * Return true if HPD should be inverted for %port.
- */
-bool
-intel_bios_is_port_hpd_inverted(const struct drm_i915_private *i915,
-                               enum port port)
-{
-       const struct intel_bios_encoder_data *devdata = i915->display.vbt.ports[port];
-
-       if (drm_WARN_ON_ONCE(&i915->drm,
-                            !IS_GEMINILAKE(i915) && !IS_BROXTON(i915)))
-               return false;
-
-       return devdata && devdata->child.hpd_invert;
-}
-
-/**
- * intel_bios_is_lspcon_present - if LSPCON is attached on %port
- * @i915:      i915 device instance
- * @port:      port to check
- *
- * Return true if LSPCON is present on this port
- */
-bool
-intel_bios_is_lspcon_present(const struct drm_i915_private *i915,
-                            enum port port)
-{
-       const struct intel_bios_encoder_data *devdata = i915->display.vbt.ports[port];
-
-       return HAS_LSPCON(i915) && devdata && devdata->child.lspcon;
-}
-
-/**
- * intel_bios_is_lane_reversal_needed - if lane reversal needed on port
- * @i915:       i915 device instance
- * @port:       port to check
- *
- * Return true if port requires lane reversal
- */
-bool
-intel_bios_is_lane_reversal_needed(const struct drm_i915_private *i915,
-                                  enum port port)
-{
-       const struct intel_bios_encoder_data *devdata = i915->display.vbt.ports[port];
-
-       return devdata && devdata->child.lane_reversal;
-}
-
 enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *i915,
+                                  const struct intel_bios_encoder_data *devdata,
                                   enum port port)
 {
-       const struct intel_bios_encoder_data *devdata = i915->display.vbt.ports[port];
        enum aux_ch aux_ch;
 
        if (!devdata || !devdata->child.aux_channel) {
@@ -3671,24 +3666,8 @@ enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *i915,
        return aux_ch;
 }
 
-int intel_bios_max_tmds_clock(struct intel_encoder *encoder)
-{
-       struct drm_i915_private *i915 = to_i915(encoder->base.dev);
-       const struct intel_bios_encoder_data *devdata = i915->display.vbt.ports[encoder->port];
-
-       return _intel_bios_max_tmds_clock(devdata);
-}
-
-/* This is an index in the HDMI/DVI DDI buffer translation table, or -1 */
-int intel_bios_hdmi_level_shift(struct intel_encoder *encoder)
-{
-       struct drm_i915_private *i915 = to_i915(encoder->base.dev);
-       const struct intel_bios_encoder_data *devdata = i915->display.vbt.ports[encoder->port];
 
-       return _intel_bios_hdmi_level_shift(devdata);
-}
-
-int intel_bios_encoder_dp_boost_level(const struct intel_bios_encoder_data *devdata)
+int intel_bios_dp_boost_level(const struct intel_bios_encoder_data *devdata)
 {
        if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost)
                return 0;
@@ -3696,7 +3675,7 @@ int intel_bios_encoder_dp_boost_level(const struct intel_bios_encoder_data *devd
        return translate_iboost(devdata->child.dp_iboost_level);
 }
 
-int intel_bios_encoder_hdmi_boost_level(const struct intel_bios_encoder_data *devdata)
+int intel_bios_hdmi_boost_level(const struct intel_bios_encoder_data *devdata)
 {
        if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost)
                return 0;
@@ -3704,31 +3683,12 @@ int intel_bios_encoder_hdmi_boost_level(const struct intel_bios_encoder_data *de
        return translate_iboost(devdata->child.hdmi_iboost_level);
 }
 
-int intel_bios_dp_max_link_rate(struct intel_encoder *encoder)
+int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata)
 {
-       struct drm_i915_private *i915 = to_i915(encoder->base.dev);
-       const struct intel_bios_encoder_data *devdata = i915->display.vbt.ports[encoder->port];
-
-       return _intel_bios_dp_max_link_rate(devdata);
-}
-
-int intel_bios_dp_max_lane_count(struct intel_encoder *encoder)
-{
-       struct drm_i915_private *i915 = to_i915(encoder->base.dev);
-       const struct intel_bios_encoder_data *devdata = i915->display.vbt.ports[encoder->port];
-
-       return _intel_bios_dp_max_lane_count(devdata);
-}
-
-int intel_bios_alternate_ddc_pin(struct intel_encoder *encoder)
-{
-       struct drm_i915_private *i915 = to_i915(encoder->base.dev);
-       const struct intel_bios_encoder_data *devdata = i915->display.vbt.ports[encoder->port];
-
        if (!devdata || !devdata->child.ddc_pin)
                return 0;
 
-       return map_ddc_pin(i915, devdata->child.ddc_pin);
+       return map_ddc_pin(devdata->i915, devdata->child.ddc_pin);
 }
 
 bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata)
@@ -3741,6 +3701,16 @@ bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devda
        return devdata->i915->display.vbt.version >= 209 && devdata->child.tbt;
 }
 
+bool intel_bios_encoder_lane_reversal(const struct intel_bios_encoder_data *devdata)
+{
+       return devdata && devdata->child.lane_reversal;
+}
+
+bool intel_bios_encoder_hpd_invert(const struct intel_bios_encoder_data *devdata)
+{
+       return devdata && devdata->child.hpd_invert;
+}
+
 const struct intel_bios_encoder_data *
 intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port)
 {