All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: intel-gfx@lists.freedesktop.org
Cc: Dave Airlied <airlied@linux.ie>
Subject: [PATCH 2/2] drm/i915/lvds: Use i915.lvds_fixed_mode= as a last resort
Date: Sun, 17 Apr 2011 07:43:33 +0100	[thread overview]
Message-ID: <1303022613-18414-2-git-send-email-chris@chris-wilson.co.uk> (raw)
In-Reply-To: <1303022613-18414-1-git-send-email-chris@chris-wilson.co.uk>

If we can find no other reliable source of panel configuration data,
turn to the user and see if they have a passed a mode line (ala video=)
through the i915.lvds_fixed_mode= string.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Oliver Seitz <info@vtnd.de>
Cc: Mike Isely <isely@isely.net>
Cc: Dave Airlied <airlied@linux.ie>
---
 drivers/gpu/drm/i915/i915_drv.c   |    4 +++
 drivers/gpu/drm/i915/i915_drv.h   |    3 +-
 drivers/gpu/drm/i915/intel_lvds.c |   46 ++++++++++++++++++++++++++++---------
 3 files changed, 41 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 16a2532..4a618f6 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -67,6 +67,10 @@ module_param_named(vbt_sdvo_panel_type, i915_vbt_sdvo_panel_type, int, 0600);
 static bool i915_try_reset = true;
 module_param_named(reset, i915_try_reset, bool, 0600);
 
+char *i915_lvds_fixed_mode;
+module_param_named(lvds_fixed_mode, i915_lvds_fixed_mode, charp, 0600);
+MODULE_PARM_DESC(lvds_fixed_mode, "specify the mode line for the LVDS panel to be used in the absence of any configuration data, using the video= format");
+
 unsigned int i915_lvds_24bit = 0;
 module_param_named(lvds_24bit, i915_lvds_24bit, int, 0600);
 MODULE_PARM_DESC(lvds_24bit, "LVDS 24 bit pixel format: 0=leave untouched (default), 1=24 bit '2.0' format, 2=24 bit '2.1' format, 3=force older 18 bit format");
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 2112af3..c6cc4e2 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -977,12 +977,13 @@ extern unsigned int i915_fbpercrtc;
 extern int i915_panel_ignore_lid;
 extern unsigned int i915_powersave;
 extern unsigned int i915_semaphores;
+extern char *i915_lvds_fixed_mode;
 extern unsigned int i915_lvds_channels;
+extern unsigned int i915_lvds_24bit;
 extern unsigned int i915_lvds_downclock;
 extern unsigned int i915_panel_use_ssc;
 extern int i915_vbt_sdvo_panel_type;
 extern unsigned int i915_enable_rc6;
-extern unsigned int i915_lvds_24bit;
 
 extern int i915_suspend(struct drm_device *dev, pm_message_t state);
 extern int i915_resume(struct drm_device *dev);
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index a562bd2..32b86ea 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -924,6 +924,11 @@ bool intel_lvds_init(struct drm_device *dev)
 	 *    if none of the above, no panel
 	 * 4) make sure lid is open
 	 *    if closed, act like it's not there for now
+	 *
+	 * Finally, we allow the user to specify his own mode. We do this
+	 * last because we want to prevent the user from damaging their
+	 * hardware with a dangerous modeline. Though we may eventually
+	 * be forced to add an override for truly broken machines.
 	 */
 
 	/*
@@ -982,19 +987,38 @@ bool intel_lvds_init(struct drm_device *dev)
 	 */
 
 	/* Ironlake: FIXME if still fail, not try pipe mode now */
-	if (HAS_PCH_SPLIT(dev))
-		goto failed;
+	if (!HAS_PCH_SPLIT(dev)) {
+		lvds = I915_READ(LVDS);
+		pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0;
+		crtc = intel_get_crtc_for_pipe(dev, pipe);
+
+		if (crtc && (lvds & LVDS_PORT_EN)) {
+			intel_lvds->fixed_mode = intel_crtc_mode_get(dev, crtc);
+			if (intel_lvds->fixed_mode) {
+				intel_lvds->fixed_mode->type |=
+					DRM_MODE_TYPE_PREFERRED;
+				goto out;
+			}
+		}
+	}
 
-	lvds = I915_READ(LVDS);
-	pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0;
-	crtc = intel_get_crtc_for_pipe(dev, pipe);
+	/* No panel cnnfiguration data, and nothing already driving the panel
+	 * at its preferred mode. Check to see if the user provided this vital
+	 * bit of information...
+	 */
+	if (i915_lvds_fixed_mode) {
+		struct drm_cmdline_mode mode;
 
-	if (crtc && (lvds & LVDS_PORT_EN)) {
-		intel_lvds->fixed_mode = intel_crtc_mode_get(dev, crtc);
-		if (intel_lvds->fixed_mode) {
-			intel_lvds->fixed_mode->type |=
-				DRM_MODE_TYPE_PREFERRED;
-			goto out;
+		if (drm_mode_parse_command_line_for_connector(i915_lvds_fixed_mode,
+							      connector,
+							      &mode)) {
+			intel_lvds->fixed_mode =
+				drm_mode_create_from_cmdline_mode(dev, &mode);
+			if (intel_lvds->fixed_mode) {
+				intel_lvds->fixed_mode->type |=
+					DRM_MODE_TYPE_PREFERRED;
+				goto out;
+			}
 		}
 	}
 
-- 
1.7.4.1

  reply	other threads:[~2011-04-17  6:43 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-17  6:43 [PATCH 1/2] drm: Export the command-line mode parser Chris Wilson
2011-04-17  6:43 ` Chris Wilson [this message]
2011-04-18 16:46   ` [PATCH 2/2] drm/i915/lvds: Use i915.lvds_fixed_mode= as a last resort Mike Isely
2011-04-18 17:46     ` Mike Isely
2011-04-20 19:48   ` Mike Isely
2011-04-20 19:56     ` Chris Wilson
2011-04-20 20:09       ` Mike Isely
2011-04-21 22:30         ` Mike Isely
2011-04-21 22:37           ` Chris Wilson
2011-04-21 22:46             ` Mike Isely
2011-05-04 22:14               ` Mike Isely
2011-05-04 22:18                 ` [PATCH] drm/i915: Fix unset margins flag in drm_mode_parse_command_line_for_connector Mike Isely
2011-05-05  2:40                   ` Robert Lowery

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=1303022613-18414-2-git-send-email-chris@chris-wilson.co.uk \
    --to=chris@chris-wilson.co.uk \
    --cc=airlied@linux.ie \
    --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.