@@ -3218,15 +3218,20 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
goto err;
intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
+ dev_priv->hotplug.irq_port[port] = intel_dig_port;
/*
* On BXT A0/A1, sw needs to activate DDIA HPD logic and
* interrupts to check the external panel connection.
+ * If eDP is connected on port A, set irq_port to NULL
+ * so that we do not assume an interrupt here as a
+ * 'dig_port' interrupt.
*/
- if (IS_BROXTON(dev_priv) && (INTEL_REVID(dev) < BXT_REVID_B0)
- && port == PORT_B)
- dev_priv->hotplug.irq_port[PORT_A] = intel_dig_port;
- else
- dev_priv->hotplug.irq_port[port] = intel_dig_port;
+ if (IS_BROXTON(dev) && (INTEL_REVID(dev) < BXT_REVID_B0)) {
+ if (port == PORT_B)
+ dev_priv->hotplug.irq_port[PORT_A] = intel_dig_port;
+ else if (intel_encoder->type == INTEL_OUTPUT_EDP)
+ dev_priv->hotplug.irq_port[port] = NULL;
+ }
}
/* In theory we don't need the encoder->type check, but leave it just in