Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93e5f0b6 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm/i915: Make intel_digital_port_connected() work for any port



Add the missing port A handling to intel_digital_port_connected()
and also separate SPT from the CPT/LPT code a bit.

Cc: Manasi Navare <manasi.d.navare@intel.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170615171252.11921-1-ville.syrjala@linux.intel.com


Reviewed-by: default avatarManasi Navare <manasi.d.navare@intel.com>
parent 9ddb8e17
Loading
Loading
Loading
Loading
+70 −13
Original line number Original line Diff line number Diff line
@@ -4444,8 +4444,6 @@ static bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
	u32 bit;
	u32 bit;


	switch (port->port) {
	switch (port->port) {
	case PORT_A:
		return true;
	case PORT_B:
	case PORT_B:
		bit = SDE_PORTB_HOTPLUG;
		bit = SDE_PORTB_HOTPLUG;
		break;
		break;
@@ -4469,8 +4467,6 @@ static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,
	u32 bit;
	u32 bit;


	switch (port->port) {
	switch (port->port) {
	case PORT_A:
		return true;
	case PORT_B:
	case PORT_B:
		bit = SDE_PORTB_HOTPLUG_CPT;
		bit = SDE_PORTB_HOTPLUG_CPT;
		break;
		break;
@@ -4480,12 +4476,28 @@ static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,
	case PORT_D:
	case PORT_D:
		bit = SDE_PORTD_HOTPLUG_CPT;
		bit = SDE_PORTD_HOTPLUG_CPT;
		break;
		break;
	default:
		MISSING_CASE(port->port);
		return false;
	}

	return I915_READ(SDEISR) & bit;
}

static bool spt_digital_port_connected(struct drm_i915_private *dev_priv,
				       struct intel_digital_port *port)
{
	u32 bit;

	switch (port->port) {
	case PORT_A:
		bit = SDE_PORTA_HOTPLUG_SPT;
		break;
	case PORT_E:
	case PORT_E:
		bit = SDE_PORTE_HOTPLUG_SPT;
		bit = SDE_PORTE_HOTPLUG_SPT;
		break;
		break;
	default:
	default:
		MISSING_CASE(port->port);
		return cpt_digital_port_connected(dev_priv, port);
		return false;
	}
	}


	return I915_READ(SDEISR) & bit;
	return I915_READ(SDEISR) & bit;
@@ -4537,6 +4549,42 @@ static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
	return I915_READ(PORT_HOTPLUG_STAT) & bit;
	return I915_READ(PORT_HOTPLUG_STAT) & bit;
}
}


static bool ilk_digital_port_connected(struct drm_i915_private *dev_priv,
				       struct intel_digital_port *port)
{
	if (port->port == PORT_A)
		return I915_READ(DEISR) & DE_DP_A_HOTPLUG;
	else
		return ibx_digital_port_connected(dev_priv, port);
}

static bool snb_digital_port_connected(struct drm_i915_private *dev_priv,
				       struct intel_digital_port *port)
{
	if (port->port == PORT_A)
		return I915_READ(DEISR) & DE_DP_A_HOTPLUG;
	else
		return cpt_digital_port_connected(dev_priv, port);
}

static bool ivb_digital_port_connected(struct drm_i915_private *dev_priv,
				       struct intel_digital_port *port)
{
	if (port->port == PORT_A)
		return I915_READ(DEISR) & DE_DP_A_HOTPLUG_IVB;
	else
		return cpt_digital_port_connected(dev_priv, port);
}

static bool bdw_digital_port_connected(struct drm_i915_private *dev_priv,
				       struct intel_digital_port *port)
{
	if (port->port == PORT_A)
		return I915_READ(GEN8_DE_PORT_ISR) & GEN8_PORT_DP_A_HOTPLUG;
	else
		return cpt_digital_port_connected(dev_priv, port);
}

static bool bxt_digital_port_connected(struct drm_i915_private *dev_priv,
static bool bxt_digital_port_connected(struct drm_i915_private *dev_priv,
				       struct intel_digital_port *intel_dig_port)
				       struct intel_digital_port *intel_dig_port)
{
{
@@ -4573,18 +4621,27 @@ static bool bxt_digital_port_connected(struct drm_i915_private *dev_priv,
bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
				  struct intel_digital_port *port)
				  struct intel_digital_port *port)
{
{
	if (HAS_PCH_IBX(dev_priv))
	if (HAS_GMCH_DISPLAY(dev_priv)) {
		return ibx_digital_port_connected(dev_priv, port);
		if (IS_GM45(dev_priv))
	else if (HAS_PCH_SPLIT(dev_priv))
		return cpt_digital_port_connected(dev_priv, port);
	else if (IS_GEN9_LP(dev_priv))
		return bxt_digital_port_connected(dev_priv, port);
	else if (IS_GM45(dev_priv))
			return gm45_digital_port_connected(dev_priv, port);
			return gm45_digital_port_connected(dev_priv, port);
		else
		else
			return g4x_digital_port_connected(dev_priv, port);
			return g4x_digital_port_connected(dev_priv, port);
	}
	}


	if (IS_GEN5(dev_priv))
		return ilk_digital_port_connected(dev_priv, port);
	else if (IS_GEN6(dev_priv))
		return snb_digital_port_connected(dev_priv, port);
	else if (IS_GEN7(dev_priv))
		return ivb_digital_port_connected(dev_priv, port);
	else if (IS_GEN8(dev_priv))
		return bdw_digital_port_connected(dev_priv, port);
	else if (IS_GEN9_LP(dev_priv))
		return bxt_digital_port_connected(dev_priv, port);
	else
		return spt_digital_port_connected(dev_priv, port);
}

static struct edid *
static struct edid *
intel_dp_get_edid(struct intel_dp *intel_dp)
intel_dp_get_edid(struct intel_dp *intel_dp)
{
{