Skip to content

Commit 93e5f0b

Browse files
committed
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 <[email protected]> Signed-off-by: Ville Syrjälä <[email protected]> Link: http://patchwork.freedesktop.org/patch/msgid/[email protected] Reviewed-by: Manasi Navare <[email protected]>
1 parent 9ddb8e1 commit 93e5f0b

File tree

1 file changed

+70
-13
lines changed

1 file changed

+70
-13
lines changed

drivers/gpu/drm/i915/intel_dp.c

Lines changed: 70 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
45404588
static 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,
45734621
bool 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

45884645
static struct edid *

0 commit comments

Comments
 (0)