All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthew Garrett <mjg@redhat.com>
To: intel-gfx@lists.freedesktop.org
Cc: Matthew Garrett <mjg@redhat.com>
Subject: [PATCH] gpu/drm/i915: Don't disable panel for modesetting if pfit hasn't changed
Date: Tue, 18 May 2010 13:53:16 -0400	[thread overview]
Message-ID: <1274205196-10927-1-git-send-email-mjg@redhat.com> (raw)

It seems to be possible to program a new mode without disabling the panel
if the panel fitter setup doesn't change. Add support for that.

Signed-off-by: Matthew Garrett <mjg@redhat.com>
---
 drivers/gpu/drm/i915/intel_lvds.c |   22 ++++++++++++++++++++--
 1 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index b66806a..1da0030 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -84,6 +84,16 @@ static u32 intel_lvds_get_max_backlight(struct drm_device *dev)
 		BACKLIGHT_MODULATION_FREQ_SHIFT) * 2;
 }
 
+static void intel_lvds_lock_panel(struct drm_device *dev, bool lock)
+{
+	struct drm_i915_private *dev_priv = dev->dev_private;
+
+	if (lock)
+		I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) & 0x3);
+	else
+		I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) | (0xabcd << 16));
+}
+
 /**
  * Sets the power state for the panel.
  */
@@ -555,6 +565,8 @@ static void intel_lvds_prepare(struct drm_encoder *encoder)
 {
 	struct drm_device *dev = encoder->dev;
 	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);
+	struct intel_lvds_priv *lvds_priv = intel_encoder->dev_priv;
 	u32 reg;
 
 	if (HAS_PCH_SPLIT(dev))
@@ -566,7 +578,10 @@ static void intel_lvds_prepare(struct drm_encoder *encoder)
 	dev_priv->backlight_duty_cycle = (dev_priv->saveBLC_PWM_CTL &
 				       BACKLIGHT_DUTY_CYCLE_MASK);
 
-	intel_lvds_set_power(dev, false);
+	if (lvds_priv->pfit_control == I915_READ(PFIT_CONTROL))
+		intel_lvds_lock_panel(dev, false);
+	else
+		intel_lvds_set_power(dev, false);
 }
 
 static void intel_lvds_commit( struct drm_encoder *encoder)
@@ -578,7 +593,10 @@ static void intel_lvds_commit( struct drm_encoder *encoder)
 		dev_priv->backlight_duty_cycle =
 			intel_lvds_get_max_backlight(dev);
 
-	intel_lvds_set_power(dev, true);
+	if ((I915_READ(PP_CONTROL) & (0xabcd << 16)) == (0xabcd << 16))
+		intel_lvds_lock_panel(dev, true);
+	else
+		intel_lvds_set_power(dev, true);
 }
 
 static void intel_lvds_mode_set(struct drm_encoder *encoder,
-- 
1.6.5.2

             reply	other threads:[~2010-05-18 18:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-18 17:53 Matthew Garrett [this message]
2010-05-18 20:12 ` [PATCH] gpu/drm/i915: Don't disable panel for modesetting if pfit hasn't changed Jesse Barnes
2010-09-08 16:44   ` Matthew Garrett
2010-09-08 16:56     ` [PATCH] gpu/drm/i915: Dont disable panel for modesetting if pfit hasnt changed Chris Wilson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1274205196-10927-1-git-send-email-mjg@redhat.com \
    --to=mjg@redhat.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.