drm/i915: Use encoder->devdata more
[platform/kernel/linux-starfive.git] / drivers / gpu / drm / i915 / display / intel_bios.c
index 2013159..8cf2392 100644 (file)
@@ -2520,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;
@@ -2531,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;
@@ -2585,7 +2585,7 @@ 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) &&
@@ -2598,7 +2598,14 @@ intel_bios_encoder_supports_dsi(const struct intel_bios_encoder_data *devdata)
        return devdata->child.device_type & DEVICE_TYPE_MIPI_OUTPUT;
 }
 
-static int _intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata)
+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;
@@ -2606,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;
@@ -2664,37 +2671,37 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata,
        drm_dbg_kms(&i915->drm,
                    "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,
-                   HAS_LSPCON(i915) && child->lspcon,
+                   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",
@@ -3393,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;
+
+               if (dvo_port_to_port(i915, child->dvo_port) == port)
+                       return true;
+       }
 
-       return devdata && intel_bios_encoder_supports_edp(devdata);
+       return false;
 }
 
 static bool intel_bios_encoder_supports_dp_dual_mode(const struct intel_bios_encoder_data *devdata)
@@ -3568,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) {
@@ -3714,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;
@@ -3739,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;
@@ -3747,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)
-{
-       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)
+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];
-
        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)
@@ -3784,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)
 {