From 0fc3d020f3086b5c6ecef1fed1aaedef7aa52b01 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 14 Sep 2012 09:49:00 +0100 Subject: Skip adding unknown special modes In light of the discussion on how to add stereo modes it was revealed that we would happily add modes with unknown and unhandled strange flags. Adam Jackson mentioned that he has plans to fix that with some upcoming work, but as a first step we can simply eradicate them whilst pondering how to support the stereoscopic vision of the future. Signed-off-by: Chris Wilson --- src/intel_display.c | 9 +++++++-- src/sna/sna_display.c | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/intel_display.c b/src/intel_display.c index 0372f9ff..bf160492 100644 --- a/src/intel_display.c +++ b/src/intel_display.c @@ -52,6 +52,8 @@ #include "intel_glamor.h" +#define KNOWN_MODE_FLAGS ((1<<14)-1) + struct intel_mode { int fd; uint32_t fb_id; @@ -316,7 +318,7 @@ mode_from_kmode(ScrnInfoPtr scrn, mode->VTotal = kmode->vtotal; mode->VScan = kmode->vscan; - mode->Flags = kmode->flags; //& FLAG_BITS; + mode->Flags = kmode->flags; mode->name = strdup(kmode->name); if (kmode->type & DRM_MODE_TYPE_DRIVER) @@ -324,6 +326,9 @@ mode_from_kmode(ScrnInfoPtr scrn, if (kmode->type & DRM_MODE_TYPE_PREFERRED) mode->type |= M_T_PREFERRED; + if (mode->status == MODE_OK && kmode->flags & ~KNOWN_MODE_FLAGS) + mode->status = MODE_BAD; /* unknown flags => unhandled */ + xf86SetModeCrtc (mode, scrn->adjustFlags); } @@ -347,7 +352,7 @@ mode_to_kmode(ScrnInfoPtr scrn, kmode->vtotal = mode->VTotal; kmode->vscan = mode->VScan; - kmode->flags = mode->Flags; //& FLAG_BITS; + kmode->flags = mode->Flags; if (mode->name) strncpy(kmode->name, mode->name, DRM_DISPLAY_MODE_LEN); kmode->name[DRM_DISPLAY_MODE_LEN-1] = 0; diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index a9c54409..36122e2b 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -51,6 +51,8 @@ #include "intel_options.h" +#define KNOWN_MODE_FLAGS ((1<<14)-1) + #if 0 #define __DBG DBG #else @@ -549,7 +551,7 @@ mode_from_kmode(ScrnInfoPtr scrn, mode->VTotal = kmode->vtotal; mode->VScan = kmode->vscan; - mode->Flags = kmode->flags; //& FLAG_BITS; + mode->Flags = kmode->flags; mode->name = strdup(kmode->name); if (kmode->type & DRM_MODE_TYPE_DRIVER) @@ -557,6 +559,9 @@ mode_from_kmode(ScrnInfoPtr scrn, if (kmode->type & DRM_MODE_TYPE_PREFERRED) mode->type |= M_T_PREFERRED; + if (mode->status == MODE_OK && kmode->flags & ~KNOWN_MODE_FLAGS) + mode->status = MODE_BAD; /* unknown flags => unhandled */ + xf86SetModeCrtc (mode, scrn->adjustFlags); } @@ -578,7 +583,7 @@ mode_to_kmode(struct drm_mode_modeinfo *kmode, DisplayModePtr mode) kmode->vtotal = mode->VTotal; kmode->vscan = mode->VScan; - kmode->flags = mode->Flags; //& FLAG_BITS; + kmode->flags = mode->Flags; if (mode->name) strncpy(kmode->name, mode->name, DRM_DISPLAY_MODE_LEN); kmode->name[DRM_DISPLAY_MODE_LEN-1] = 0; -- cgit v1.2.1