Keep all the platform output selection in intel_output_setup(), and don't
scatter it around. As a useful side effect, do not try to enable LVDS on
HSW or VLV.

Some checks are done in a slightly different order than before, and on some
platforms VGA is now initialized before LVDS.

Signed-off-by: Jani Nikula <jani.nik...@intel.com>

---

I took this out of the VLV series to give it the attention it needs.
---
 drivers/gpu/drm/i915/intel_display.c |   25 ++++++++++++++++++++-----
 drivers/gpu/drm/i915/intel_lvds.c    |   24 ------------------------
 2 files changed, 20 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index d75c6a0..a1fb320 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -8198,12 +8198,19 @@ static void intel_setup_outputs(struct drm_device *dev)
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_encoder *encoder;
        bool dpd_is_edp = false;
-       bool has_lvds;
 
-       has_lvds = intel_lvds_init(dev);
-       if (!has_lvds && !HAS_PCH_SPLIT(dev)) {
-               /* disable the panel fitter on everything but LVDS */
-               I915_WRITE(PFIT_CONTROL, 0);
+       if (!HAS_PCH_SPLIT(dev)) {
+               bool has_lvds = false;
+
+               /* Prior to PCH split LVDS was only attached to mobile products,
+                * except for the inglorious 830gm */
+               if (IS_MOBILE(dev) && !IS_I830(dev))
+                       has_lvds = intel_lvds_init(dev);
+
+               if (!has_lvds) {
+                       /* disable the panel fitter on everything but LVDS */
+                       I915_WRITE(PFIT_CONTROL, 0);
+               }
        }
 
        if (!(HAS_DDI(dev) && (I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES)))
@@ -8230,6 +8237,14 @@ static void intel_setup_outputs(struct drm_device *dev)
                        intel_ddi_init(dev, PORT_D);
        } else if (HAS_PCH_SPLIT(dev)) {
                int found;
+
+               if (I915_READ(PCH_LVDS) & LVDS_DETECTED) {
+                       if (dev_priv->edp.support)
+                               DRM_DEBUG_KMS("disable LVDS for eDP support\n");
+                       else
+                               intel_lvds_init(dev);
+               }
+
                dpd_is_edp = intel_dpd_is_edp(dev);
 
                if (has_edp_a(dev))
diff --git a/drivers/gpu/drm/i915/intel_lvds.c 
b/drivers/gpu/drm/i915/intel_lvds.c
index 7e4ec63..3c76e91 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -1024,18 +1024,6 @@ static bool compute_is_dual_link_lvds(struct 
intel_lvds_encoder *lvds_encoder)
        return (val & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP;
 }
 
-static bool intel_lvds_supported(struct drm_device *dev)
-{
-       /* With the introduction of the PCH we gained a dedicated
-        * LVDS presence pin, use it. */
-       if (HAS_PCH_SPLIT(dev))
-               return true;
-
-       /* Otherwise LVDS was only attached to mobile products,
-        * except for the inglorious 830gm */
-       return IS_MOBILE(dev) && !IS_I830(dev);
-}
-
 /**
  * intel_lvds_init - setup LVDS connectors on this device
  * @dev: drm device
@@ -1060,9 +1048,6 @@ bool intel_lvds_init(struct drm_device *dev)
        int pipe;
        u8 pin;
 
-       if (!intel_lvds_supported(dev))
-               return false;
-
        /* Skip init on machines we know falsely report LVDS */
        if (dmi_check_system(intel_no_lvds))
                return false;
@@ -1073,15 +1058,6 @@ bool intel_lvds_init(struct drm_device *dev)
                return false;
        }
 
-       if (HAS_PCH_SPLIT(dev)) {
-               if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0)
-                       return false;
-               if (dev_priv->edp.support) {
-                       DRM_DEBUG_KMS("disable LVDS for eDP support\n");
-                       return false;
-               }
-       }
-
        lvds_encoder = kzalloc(sizeof(struct intel_lvds_encoder), GFP_KERNEL);
        if (!lvds_encoder)
                return false;
-- 
1.7.10.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to