drm/i915: don't read LVDS regs at compute_config time
[deliverable/linux.git] / drivers / gpu / drm / i915 / intel_lvds.c
index cba04ddc8b01dddb5101ce8a18cdfcb2dcc3c429..a3126e0fd11edd46b9b6f85c7970f9aaccf99b1d 100644 (file)
@@ -51,6 +51,7 @@ struct intel_lvds_encoder {
 
        bool is_dual_link;
        u32 reg;
+       u32 a3_power;
 
        struct intel_lvds_connector *attached_connector;
 };
@@ -170,8 +171,11 @@ static void intel_pre_enable_lvds(struct intel_encoder *encoder)
 
        /* It would be nice to set 24 vs 18-bit mode (LVDS_A3_POWER_UP)
         * appropriately here, but we need to look more thoroughly into how
-        * panels behave in the two modes.
+        * panels behave in the two modes. For now, let's just maintain the
+        * value we got from the BIOS.
         */
+        temp &= ~LVDS_A3_POWER_MASK;
+        temp |= lvds_encoder->a3_power;
 
        /* Set the dithering flag on LVDS as needed, note that there is no
         * special lvds dither control bit on pch-split platforms, dithering is
@@ -269,7 +273,6 @@ static bool intel_lvds_compute_config(struct intel_encoder *intel_encoder,
                                      struct intel_crtc_config *pipe_config)
 {
        struct drm_device *dev = intel_encoder->base.dev;
-       struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_lvds_encoder *lvds_encoder =
                to_lvds_encoder(&intel_encoder->base);
        struct intel_connector *intel_connector =
@@ -284,8 +287,7 @@ static bool intel_lvds_compute_config(struct intel_encoder *intel_encoder,
                return false;
        }
 
-       if ((I915_READ(lvds_encoder->reg) & LVDS_A3_POWER_MASK) ==
-           LVDS_A3_POWER_UP)
+       if (lvds_encoder->a3_power == LVDS_A3_POWER_UP)
                lvds_bpp = 8*3;
        else
                lvds_bpp = 6*3;
@@ -1086,6 +1088,9 @@ out:
        DRM_DEBUG_KMS("detected %s-link lvds configuration\n",
                      lvds_encoder->is_dual_link ? "dual" : "single");
 
+       lvds_encoder->a3_power = I915_READ(lvds_encoder->reg) &
+                                LVDS_A3_POWER_MASK;
+
        /*
         * Unlock registers and just
         * leave them unlocked
This page took 0.025598 seconds and 5 git commands to generate.