diff mbox

drm/i915: honor forced connector modes v2

Message ID 20140220204840.GC17020@nuc-i3427.alporthouse.com (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson Feb. 20, 2014, 8:48 p.m. UTC
On Thu, Feb 20, 2014 at 12:28:07PM -0800, Jesse Barnes wrote:
> In the move over to use BIOS connector configs, we lost the ability to
> force a specific set of connectors on or off.  Try to remedy that by
> dropping back to the old behavior if we detect a hard coded connector
> config.
> 
> v2: don't deref connector state for disabled connectors (Jesse)
> 
> Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>

Borrowing this idea, but extending it to only bail if we need to turn
stuff on (i.e. helps with video=LVDS:d etc):
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
index 19be4bfbcc59..6feacf574697 100644
--- a/drivers/gpu/drm/i915/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/intel_fbdev.c
@@ -312,8 +312,18 @@  static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
 			continue;
 		}
 
+		if (connector->force == DRM_FORCE_OFF) {
+			DRM_DEBUG_KMS("connector %d is disabled by user, skipping\n",
+				      connector->base.id);
+			enabled[i] = false;
+			continue;
+		}
+
 		encoder = connector->encoder;
 		if (!encoder || WARN_ON(!encoder->crtc)) {
+			if (connector->force > DRM_FORCE_OFF)
+				goto bail;
+
 			DRM_DEBUG_KMS("connector %d has no encoder or crtc, skipping\n",
 				      connector->base.id);
 			enabled[i] = false;
@@ -327,12 +337,9 @@  static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
 		 * with a single CRTC, since our cloning support may not
 		 * match the BIOS.
 		 */
-		for (j = 0; j < fb_helper->connector_count; j++) {
-			if (crtcs[j] == new_crtc) {
-				any_enabled = false;
-				goto out;
-			}
-		}
+		for (j = 0; j < fb_helper->connector_count; j++)
+			if (crtcs[j] == new_crtc)
+				goto bail;
 
 		DRM_DEBUG_KMS("looking for cmdline mode on connector %d\n",
 			      fb_conn->connector->base.id);
@@ -375,8 +382,8 @@  static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
 		any_enabled = true;
 	}
 
-out:
 	if (!any_enabled) {
+bail:
 		memcpy(enabled, save_enabled, dev->mode_config.num_connector);
 		kfree(save_enabled);
 		return false;