@@ -4444,8 +4444,6 @@ static bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
44444444 u32 bit ;
44454445
44464446 switch (port -> port ) {
4447- case PORT_A :
4448- return true;
44494447 case PORT_B :
44504448 bit = SDE_PORTB_HOTPLUG ;
44514449 break ;
@@ -4469,8 +4467,6 @@ static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,
44694467 u32 bit ;
44704468
44714469 switch (port -> port ) {
4472- case PORT_A :
4473- return true;
44744470 case PORT_B :
44754471 bit = SDE_PORTB_HOTPLUG_CPT ;
44764472 break ;
@@ -4480,12 +4476,28 @@ static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,
44804476 case PORT_D :
44814477 bit = SDE_PORTD_HOTPLUG_CPT ;
44824478 break ;
4479+ default :
4480+ MISSING_CASE (port -> port );
4481+ return false;
4482+ }
4483+
4484+ return I915_READ (SDEISR ) & bit ;
4485+ }
4486+
4487+ static bool spt_digital_port_connected (struct drm_i915_private * dev_priv ,
4488+ struct intel_digital_port * port )
4489+ {
4490+ u32 bit ;
4491+
4492+ switch (port -> port ) {
4493+ case PORT_A :
4494+ bit = SDE_PORTA_HOTPLUG_SPT ;
4495+ break ;
44834496 case PORT_E :
44844497 bit = SDE_PORTE_HOTPLUG_SPT ;
44854498 break ;
44864499 default :
4487- MISSING_CASE (port -> port );
4488- return false;
4500+ return cpt_digital_port_connected (dev_priv , port );
44894501 }
44904502
44914503 return I915_READ (SDEISR ) & bit ;
@@ -4537,6 +4549,42 @@ static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
45374549 return I915_READ (PORT_HOTPLUG_STAT ) & bit ;
45384550}
45394551
4552+ static bool ilk_digital_port_connected (struct drm_i915_private * dev_priv ,
4553+ struct intel_digital_port * port )
4554+ {
4555+ if (port -> port == PORT_A )
4556+ return I915_READ (DEISR ) & DE_DP_A_HOTPLUG ;
4557+ else
4558+ return ibx_digital_port_connected (dev_priv , port );
4559+ }
4560+
4561+ static bool snb_digital_port_connected (struct drm_i915_private * dev_priv ,
4562+ struct intel_digital_port * port )
4563+ {
4564+ if (port -> port == PORT_A )
4565+ return I915_READ (DEISR ) & DE_DP_A_HOTPLUG ;
4566+ else
4567+ return cpt_digital_port_connected (dev_priv , port );
4568+ }
4569+
4570+ static bool ivb_digital_port_connected (struct drm_i915_private * dev_priv ,
4571+ struct intel_digital_port * port )
4572+ {
4573+ if (port -> port == PORT_A )
4574+ return I915_READ (DEISR ) & DE_DP_A_HOTPLUG_IVB ;
4575+ else
4576+ return cpt_digital_port_connected (dev_priv , port );
4577+ }
4578+
4579+ static bool bdw_digital_port_connected (struct drm_i915_private * dev_priv ,
4580+ struct intel_digital_port * port )
4581+ {
4582+ if (port -> port == PORT_A )
4583+ return I915_READ (GEN8_DE_PORT_ISR ) & GEN8_PORT_DP_A_HOTPLUG ;
4584+ else
4585+ return cpt_digital_port_connected (dev_priv , port );
4586+ }
4587+
45404588static bool bxt_digital_port_connected (struct drm_i915_private * dev_priv ,
45414589 struct intel_digital_port * intel_dig_port )
45424590{
@@ -4573,16 +4621,25 @@ static bool bxt_digital_port_connected(struct drm_i915_private *dev_priv,
45734621bool intel_digital_port_connected (struct drm_i915_private * dev_priv ,
45744622 struct intel_digital_port * port )
45754623{
4576- if (HAS_PCH_IBX (dev_priv ))
4577- return ibx_digital_port_connected (dev_priv , port );
4578- else if (HAS_PCH_SPLIT (dev_priv ))
4579- return cpt_digital_port_connected (dev_priv , port );
4624+ if (HAS_GMCH_DISPLAY (dev_priv )) {
4625+ if (IS_GM45 (dev_priv ))
4626+ return gm45_digital_port_connected (dev_priv , port );
4627+ else
4628+ return g4x_digital_port_connected (dev_priv , port );
4629+ }
4630+
4631+ if (IS_GEN5 (dev_priv ))
4632+ return ilk_digital_port_connected (dev_priv , port );
4633+ else if (IS_GEN6 (dev_priv ))
4634+ return snb_digital_port_connected (dev_priv , port );
4635+ else if (IS_GEN7 (dev_priv ))
4636+ return ivb_digital_port_connected (dev_priv , port );
4637+ else if (IS_GEN8 (dev_priv ))
4638+ return bdw_digital_port_connected (dev_priv , port );
45804639 else if (IS_GEN9_LP (dev_priv ))
45814640 return bxt_digital_port_connected (dev_priv , port );
4582- else if (IS_GM45 (dev_priv ))
4583- return gm45_digital_port_connected (dev_priv , port );
45844641 else
4585- return g4x_digital_port_connected (dev_priv , port );
4642+ return spt_digital_port_connected (dev_priv , port );
45864643}
45874644
45884645static struct edid *
0 commit comments