drm/i915: Only ignore eDP ports that are connected
[deliverable/linux.git] / drivers / gpu / drm / i915 / intel_display.c
index fd140c3984080f69504d27028f0320fbc3265464..08b173cd8e3cf9620c4a605717696e54b0e027ab 100644 (file)
@@ -14702,6 +14702,8 @@ static void intel_setup_outputs(struct drm_device *dev)
                if (I915_READ(PCH_DP_D) & DP_DETECTED)
                        intel_dp_init(dev, PCH_DP_D, PORT_D);
        } else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
+               bool has_edp;
+
                /*
                 * The DP_DETECTED bit is the latched state of the DDC
                 * SDA pin at boot. However since eDP doesn't require DDC
@@ -14711,19 +14713,17 @@ static void intel_setup_outputs(struct drm_device *dev)
                 * eDP ports. Consult the VBT as well as DP_DETECTED to
                 * detect eDP ports.
                 */
-               if (I915_READ(VLV_HDMIB) & SDVO_DETECTED &&
-                   !intel_dp_is_edp(dev, PORT_B))
+               has_edp = intel_dp_is_edp(dev, PORT_B);
+               if (I915_READ(VLV_DP_B) & DP_DETECTED || has_edp)
+                       has_edp &= intel_dp_init(dev, VLV_DP_B, PORT_B);
+               if (I915_READ(VLV_HDMIB) & SDVO_DETECTED && !has_edp)
                        intel_hdmi_init(dev, VLV_HDMIB, PORT_B);
-               if (I915_READ(VLV_DP_B) & DP_DETECTED ||
-                   intel_dp_is_edp(dev, PORT_B))
-                       intel_dp_init(dev, VLV_DP_B, PORT_B);
 
-               if (I915_READ(VLV_HDMIC) & SDVO_DETECTED &&
-                   !intel_dp_is_edp(dev, PORT_C))
+               has_edp = intel_dp_is_edp(dev, PORT_C);
+               if (I915_READ(VLV_DP_C) & DP_DETECTED || has_edp)
+                       has_edp &= intel_dp_init(dev, VLV_DP_C, PORT_C);
+               if (I915_READ(VLV_HDMIC) & SDVO_DETECTED && !has_edp)
                        intel_hdmi_init(dev, VLV_HDMIC, PORT_C);
-               if (I915_READ(VLV_DP_C) & DP_DETECTED ||
-                   intel_dp_is_edp(dev, PORT_C))
-                       intel_dp_init(dev, VLV_DP_C, PORT_C);
 
                if (IS_CHERRYVIEW(dev)) {
                        /* eDP not supported on port D, so don't check VBT */
This page took 0.030887 seconds and 5 git commands to generate.