Skip to content

Commit

Permalink
drm/i915/bios: make child device order the priority order
Browse files Browse the repository at this point in the history
Make the child device order the priority order in sanitizing DDC pin and
AUX CH. First come, first served.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/34ab98880386a095422521ad39f4c080eeb3989a.1559308269.git.jani.nikula@intel.com
  • Loading branch information
Jani Nikula committed Jun 5, 2019
1 parent 3633e51 commit 36a0f92
Showing 1 changed file with 15 additions and 17 deletions.
32 changes: 15 additions & 17 deletions drivers/gpu/drm/i915/intel_bios.c
Original file line number Diff line number Diff line change
Expand Up @@ -1242,8 +1242,7 @@ static u8 translate_iboost(u8 val)
static void sanitize_ddc_pin(struct drm_i915_private *dev_priv,
enum port port)
{
const struct ddi_vbt_port_info *info =
&dev_priv->vbt.ddi_port_info[port];
struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port];
enum port p;

if (!info->alternate_ddc_pin)
Expand All @@ -1258,29 +1257,28 @@ static void sanitize_ddc_pin(struct drm_i915_private *dev_priv,

DRM_DEBUG_KMS("port %c trying to use the same DDC pin (0x%x) as port %c, "
"disabling port %c DVI/HDMI support\n",
port_name(p), i->alternate_ddc_pin,
port_name(port), port_name(p));
port_name(port), info->alternate_ddc_pin,
port_name(p), port_name(port));

/*
* If we have multiple ports supposedly sharing the
* pin, then dvi/hdmi couldn't exist on the shared
* port. Otherwise they share the same ddc bin and
* system couldn't communicate with them separately.
*
* Due to parsing the ports in child device order,
* a later device will always clobber an earlier one.
* Give child device order the priority, first come first
* served.
*/
i->supports_dvi = false;
i->supports_hdmi = false;
i->alternate_ddc_pin = 0;
info->supports_dvi = false;
info->supports_hdmi = false;
info->alternate_ddc_pin = 0;
}
}

static void sanitize_aux_ch(struct drm_i915_private *dev_priv,
enum port port)
{
const struct ddi_vbt_port_info *info =
&dev_priv->vbt.ddi_port_info[port];
struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port];
enum port p;

if (!info->alternate_aux_channel)
Expand All @@ -1295,20 +1293,20 @@ static void sanitize_aux_ch(struct drm_i915_private *dev_priv,

DRM_DEBUG_KMS("port %c trying to use the same AUX CH (0x%x) as port %c, "
"disabling port %c DP support\n",
port_name(p), i->alternate_aux_channel,
port_name(port), port_name(p));
port_name(port), info->alternate_aux_channel,
port_name(p), port_name(port));

/*
* If we have multiple ports supposedlt sharing the
* aux channel, then DP couldn't exist on the shared
* port. Otherwise they share the same aux channel
* and system couldn't communicate with them separately.
*
* Due to parsing the ports in child device order,
* a later device will always clobber an earlier one.
* Give child device order the priority, first come first
* served.
*/
i->supports_dp = false;
i->alternate_aux_channel = 0;
info->supports_dp = false;
info->alternate_aux_channel = 0;
}
}

Expand Down

0 comments on commit 36a0f92

Please sign in to comment.