summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorHette Visser2010-09-24 11:51:30 +0200
committerChris Wilson2010-09-24 15:22:13 +0200
commit27d64339a8d8465484286a2da93f5f6c36be5c3d (patch)
tree2e91c2660fda807d2732a7fbb275e765a72a64db /drivers/gpu/drm
parentsome clean up to intel-gtt.c (diff)
downloadkernel-qcow2-linux-27d64339a8d8465484286a2da93f5f6c36be5c3d.tar.gz
kernel-qcow2-linux-27d64339a8d8465484286a2da93f5f6c36be5c3d.tar.xz
kernel-qcow2-linux-27d64339a8d8465484286a2da93f5f6c36be5c3d.zip
drm/i915/dp: Wait for PP_CONTROL to take effect.
This patch fixes the black screen bug on Dell e6510, by adding two delays to give the eDP panel time to turn on before we continue with the next write. 300ms is rather arbitray and a rather long sleep, we need to find a way of refining this value. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=29278 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 117eb9988250..d19334aa66ad 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -784,6 +784,11 @@ static bool ironlake_edp_panel_on (struct drm_device *dev)
pp |= POWER_TARGET_ON;
I915_WRITE(PCH_PP_CONTROL, pp);
+ /* Ouch. We need to wait here for some panels, like Dell e6510
+ * https://bugs.freedesktop.org/show_bug.cgi?id=29278i
+ */
+ msleep(300);
+
if (wait_for(I915_READ(PCH_PP_STATUS) & PP_ON, 5000))
DRM_ERROR("panel on wait timed out: 0x%08x\n",
I915_READ(PCH_PP_STATUS));
@@ -819,6 +824,11 @@ static void ironlake_edp_panel_off (struct drm_device *dev)
pp |= PANEL_POWER_RESET; /* restore panel reset bit */
I915_WRITE(PCH_PP_CONTROL, pp);
POSTING_READ(PCH_PP_CONTROL);
+
+ /* Ouch. We need to wait here for some panels, like Dell e6510
+ * https://bugs.freedesktop.org/show_bug.cgi?id=29278i
+ */
+ msleep(300);
}
static void ironlake_edp_panel_vdd_on(struct drm_device *dev)