All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel.vetter@ffwll.ch>
To: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: [PATCH 4/8] drm/i915: track is_dual_link in intel_lvds
Date: Mon,  5 Nov 2012 13:28:23 +0100	[thread overview]
Message-ID: <1352118507-6933-5-git-send-email-daniel.vetter@ffwll.ch> (raw)
In-Reply-To: <1352118507-6933-1-git-send-email-daniel.vetter@ffwll.ch>

Yeah, all users (both the clock selection special cases and the lvds
pin pair stuff) are still in common code, but this will change.

v2: Rebase on top of Jani Nikula's panel rework.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/i915/intel_lvds.c | 43 +++++++++++++++++++++++++++------------
 1 file changed, 30 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 2303984..e4ae3a6 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -52,6 +52,7 @@ struct intel_lvds_encoder {
 	u32 pfit_control;
 	u32 pfit_pgm_ratios;
 	bool pfit_dirty;
+	bool is_dual_link;
 
 	struct intel_lvds_connector *attached_connector;
 };
@@ -920,6 +921,23 @@ static const struct dmi_system_id intel_dual_link_lvds[] = {
 
 bool is_dual_link_lvds(struct drm_device *dev)
 {
+	struct intel_encoder *encoder;
+	struct intel_lvds_encoder *lvds_encoder;
+
+	list_for_each_entry(encoder, &dev->mode_config.encoder_list,
+			    base.head) {
+		if (encoder->type == INTEL_OUTPUT_LVDS) {
+			lvds_encoder = to_lvds_encoder(&encoder->base);
+
+			return lvds_encoder->is_dual_link;
+		}
+	}
+
+	return false;
+}
+
+static bool __is_dual_link_lvds(struct drm_device *dev)
+{
 	unsigned int val;
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	u32 lvds_reg;
@@ -937,19 +955,15 @@ bool is_dual_link_lvds(struct drm_device *dev)
 	if (dmi_check_system(intel_dual_link_lvds))
 		return true;
 
-	if (dev_priv->lvds_val)
-		val = dev_priv->lvds_val;
-	else {
-		/* BIOS should set the proper LVDS register value at boot, but
-		 * in reality, it doesn't set the value when the lid is closed;
-		 * we need to check "the value to be set" in VBT when LVDS
-		 * register is uninitialized.
-		 */
-		val = I915_READ(lvds_reg);
-		if (!(val & ~(LVDS_PIPE_MASK | LVDS_DETECTED)))
-			val = dev_priv->bios_lvds_val;
-		dev_priv->lvds_val = val;
-	}
+	/* BIOS should set the proper LVDS register value at boot, but
+	 * in reality, it doesn't set the value when the lid is closed;
+	 * we need to check "the value to be set" in VBT when LVDS
+	 * register is uninitialized.
+	 */
+	val = I915_READ(lvds_reg);
+	if (!(val & ~(LVDS_PIPE_MASK | LVDS_DETECTED)))
+		val = dev_priv->bios_lvds_val;
+
 	return (val & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP;
 }
 
@@ -1148,6 +1162,8 @@ bool intel_lvds_init(struct drm_device *dev)
 		goto failed;
 
 out:
+	lvds_encoder->is_dual_link = __is_dual_link_lvds(dev);
+
 	/*
 	 * Unlock registers and just
 	 * leave them unlocked
@@ -1164,6 +1180,7 @@ out:
 		DRM_DEBUG_KMS("lid notifier registration failed\n");
 		lvds_connector->lid_notifier.notifier_call = NULL;
 	}
+
 	drm_sysfs_connector_add(connector);
 
 	intel_panel_init(&intel_connector->panel, fixed_mode);
-- 
1.7.11.7

  parent reply	other threads:[~2012-11-05 12:37 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-05 12:28 [PATCH 0/8] lvds cleanup Daniel Vetter
2012-11-05 12:28 ` [PATCH 1/8] drm/i915: add encoder->pre_pll_enable callback Daniel Vetter
2012-11-16 16:05   ` Paulo Zanoni
2012-11-16 16:21     ` Daniel Vetter
2012-11-16 16:59       ` Paulo Zanoni
2012-11-05 12:28 ` [PATCH 2/8] drm/i915: replace ad-hoc dual-link lvds checks Daniel Vetter
2012-11-16 16:37   ` Paulo Zanoni
2012-11-16 16:56     ` Daniel Vetter
2012-11-16 17:07       ` Paulo Zanoni
2012-11-16 17:17         ` Daniel Vetter
2012-11-05 12:28 ` [PATCH 3/8] drm/i915: move is_dual_link_lvds to intel_lvds.c Daniel Vetter
2012-11-16 17:18   ` Paulo Zanoni
2012-11-05 12:28 ` Daniel Vetter [this message]
2012-11-16 17:41   ` [PATCH 4/8] drm/i915: track is_dual_link in intel_lvds Paulo Zanoni
2012-11-05 12:28 ` [PATCH 5/8] drm/i915: add intel_lvds->reg Daniel Vetter
2012-11-16 17:46   ` Paulo Zanoni
2012-11-05 12:28 ` [PATCH 6/8] drm/i915: move intel_update_lvds to intel_lvds->pre_pll_enable Daniel Vetter
2012-11-16 18:07   ` Paulo Zanoni
2012-11-05 12:28 ` [PATCH 7/8] drm/i915: enable intel_lvds->pre_pll_enable for ilk+, too Daniel Vetter
2012-11-16 18:17   ` Paulo Zanoni
2012-11-05 12:28 ` [PATCH 8/8] drm/i915: rip out pre-DDI stuff from haswell_crtc_mode_set Daniel Vetter
2012-11-16 18:28   ` Paulo Zanoni
2012-11-16 18:33     ` Daniel Vetter
2012-11-16 16:09 ` [PATCH 0/8] lvds cleanup Paulo Zanoni
2012-11-20 13:38   ` Daniel Vetter

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=1352118507-6933-5-git-send-email-daniel.vetter@ffwll.ch \
    --to=daniel.vetter@ffwll.ch \
    --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.