xf86-video-intel: Branch 'modesetting' - 4 commits - src/i830_modes.c src/i830_randr.c

Keith Packard keithp at kemper.freedesktop.org
Thu Oct 5 09:22:57 EEST 2006


 src/i830_modes.c |   14 +++----
 src/i830_randr.c |  110 ++++++++++++++++++++++++++++++++-----------------------
 2 files changed, 72 insertions(+), 52 deletions(-)

New commits:
diff-tree 4ac81d58b7e0fbffbb4981deffe6a576be821a9b (from 16988b27258acfe3d56fc2415aa9ade1ae8d03a9)
Author: Keith Packard <keithp at neko.keithp.com>
Date:   Wed Oct 4 23:22:52 2006 -0700

    Remove mode origins, add preferred mode count.
    
    Just tracking changes in the 1.2 protocol spec.

diff --git a/src/i830_randr.c b/src/i830_randr.c
index 37bd6a1..3c594d8 100644
--- a/src/i830_randr.c
+++ b/src/i830_randr.c
@@ -603,10 +603,11 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
     int			nclone;
     RRCrtcPtr		crtcs[MAX_DISPLAY_PIPES];
     int			ncrtc;
-    int			nmode;
+    int			nmode, npreferred;
     struct _I830OutputRec   *output;
     int			i;
     int			j;
+    int			p;
     int			clone_types;
     int			crtc_types;
     int			connection;
@@ -700,6 +701,7 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
 	RROutputSetPossibleOptions (randrp->outputs[i], possibleOptions);
 	RROutputSetCurrentOptions (randrp->outputs[i], currentOptions);
         nmode = 0;
+	npreferred = 0;
 	rrmodes = NULL;
 	if (pipe >= 0) 
 	{
@@ -715,44 +717,43 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
 		if (!rrmodes)
 		    return FALSE;
 		nmode = 0;
-		for (mode = modes; mode; mode = mode->next)
+		for (p = 1; p >= 0; p--)
 		{
-		    modeInfo.nameLength = strlen (mode->name);
-		    modeInfo.mmWidth = mon->widthmm;
-		    modeInfo.mmHeight = mon->heightmm;
-
-		    modeInfo.width = mode->HDisplay;
-		    modeInfo.dotClock = mode->Clock * 1000;
-		    modeInfo.hSyncStart = mode->HSyncStart;
-		    modeInfo.hSyncEnd = mode->HSyncEnd;
-		    modeInfo.hTotal = mode->HTotal;
-		    modeInfo.hSkew = mode->HSkew;
-
-		    modeInfo.height = mode->VDisplay;
-		    modeInfo.vSyncStart = mode->VSyncStart;
-		    modeInfo.vSyncEnd = mode->VSyncEnd;
-		    modeInfo.vTotal = mode->VTotal;
-		    modeInfo.modeFlags = mode->Flags;
-		    if (mode->type & M_T_PREFERRED)
-			modeInfo.origin = RRModeOriginPreferred;
-		    else if (mode->type & M_T_DRIVER)
-			modeInfo.origin = RRModeOriginDetailed;
-		    else if (mode->type & M_T_USERDEF)
-			modeInfo.origin = RRModeOriginConfig;
-		    else if (mode->type & M_T_DEFAULT)
-			modeInfo.origin = RRModeOriginVESA;
-		    else
-			modeInfo.origin = RRModeOriginOther;
-
-		    rrmode = RRModeGet (pScreen, &modeInfo, mode->name);
-		    rrmode->devPrivate = mode;
-		    if (rrmode)
-			rrmodes[nmode++] = rrmode;
+		    for (mode = modes; mode; mode = mode->next)
+		    {
+			if ((p != 0) == ((mode->type & M_T_PREFERRED) != 0))
+			{
+			    modeInfo.nameLength = strlen (mode->name);
+			    modeInfo.mmWidth = mon->widthmm;
+			    modeInfo.mmHeight = mon->heightmm;
+	
+			    modeInfo.width = mode->HDisplay;
+			    modeInfo.dotClock = mode->Clock * 1000;
+			    modeInfo.hSyncStart = mode->HSyncStart;
+			    modeInfo.hSyncEnd = mode->HSyncEnd;
+			    modeInfo.hTotal = mode->HTotal;
+			    modeInfo.hSkew = mode->HSkew;
+	
+			    modeInfo.height = mode->VDisplay;
+			    modeInfo.vSyncStart = mode->VSyncStart;
+			    modeInfo.vSyncEnd = mode->VSyncEnd;
+			    modeInfo.vTotal = mode->VTotal;
+			    modeInfo.modeFlags = mode->Flags;
+	
+			    rrmode = RRModeGet (pScreen, &modeInfo, mode->name);
+			    rrmode->devPrivate = mode;
+			    if (rrmode)
+			    {
+				rrmodes[nmode++] = rrmode;
+				npreferred += p;
+			    }
+			}
+		    }
 		}
 	    }
 	}
 	
-    	if (!RROutputSetModes (randrp->outputs[i], rrmodes, nmode))
+    	if (!RROutputSetModes (randrp->outputs[i], rrmodes, nmode, npreferred))
 	{
     	    xfree (rrmodes);
 	    return FALSE;
diff-tree 16988b27258acfe3d56fc2415aa9ade1ae8d03a9 (from parents)
Merge: cc4148e25dc226cb1365e090db21f01b77cb3cbe 5a060002487e16c53dc96e32af72cd1bfcf6a227
Author: Keith Packard <keithp at neko.keithp.com>
Date:   Wed Oct 4 18:44:43 2006 -0700

    Merge branch 'modesetting-guitar' into modesetting

diff-tree 5a060002487e16c53dc96e32af72cd1bfcf6a227 (from 33629ed304b64e45d5640397bd1807c5a98907d1)
Author: Keith Packard <keithp at guitar.keithp.com>
Date:   Wed Oct 4 18:43:07 2006 -0700

    Add mode origins for randr

diff --git a/src/i830_modes.c b/src/i830_modes.c
index da1ccde..ac7c4c5 100644
--- a/src/i830_modes.c
+++ b/src/i830_modes.c
@@ -290,7 +290,10 @@ i830GetDDCModes(ScrnInfoPtr pScrn, xf86M
 	    new->Clock      = d_timings->clock / 1000;
 	    new->Flags      = (d_timings->interlaced ? V_INTERLACE : 0);
 	    new->status     = MODE_OK;
-	    new->type       = M_T_DEFAULT;
+	    if (PREFERRED_TIMING_MODE(ddc->features.msc))
+		new->type   = M_T_PREFERRED;
+	    else
+		new->type   = M_T_DRIVER;
 
 	    i830xf86SetModeDefaultName(new);
 
@@ -419,7 +422,7 @@ i830FPNativeMode(ScrnInfoPtr pScrn)
    new->VTotal     = new->VSyncEnd + 1;
    new->Clock      = pI830->panel_fixed_clock;
 
-   new->type       = M_T_USERDEF;
+   new->type       = M_T_PREFERRED;
 
    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 	      "No valid mode specified, force to native mode\n");
@@ -475,7 +478,7 @@ i830GetLVDSModes(ScrnInfoPtr pScrn, char
       }
 
       new = i830GetGTF(width, height, 60.0, FALSE, FALSE);
-      new->type |= M_T_USERDEF;
+      new->type |= M_T_DEFAULT;
 
       new->next       = NULL;
       new->prev       = last;
@@ -510,10 +513,7 @@ i830GetLVDSModes(ScrnInfoPtr pScrn, char
 	 }
 	 if (!tmp) {
 	    new = i830GetGTF(p->HDisplay, p->VDisplay, 60.0, FALSE, FALSE);
-	    if (ppModeName[i] == NULL)
-		new->type |= M_T_USERDEF;
-	    else
-		new->type |= M_T_DEFAULT;
+	    new->type |= M_T_DEFAULT;
 
 	    I830xf86SortModes(new, &first, &last);
 
diff --git a/src/i830_randr.c b/src/i830_randr.c
index 7abfb3b..37bd6a1 100644
--- a/src/i830_randr.c
+++ b/src/i830_randr.c
@@ -542,7 +542,7 @@ I830RandRCrtcSet (ScreenPtr	pScreen,
 		  int		y,
 		  Rotation	rotation,
 		  int		numOutputs,
-		  RROutputPtr	*outputs)
+		  RROutputConfigPtr	outputs)
 {
     XF86RandRInfoPtr	randrp = XF86RANDRINFO(pScreen);
     ScrnInfoPtr		pScrn = xf86Screens[pScreen->myNum];
@@ -603,7 +603,6 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
     int			nclone;
     RRCrtcPtr		crtcs[MAX_DISPLAY_PIPES];
     int			ncrtc;
-    RRModePtr		*modes;
     int			nmode;
     struct _I830OutputRec   *output;
     int			i;
@@ -617,6 +616,8 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
     DisplayModePtr	modes, mode;
     xRRModeInfo		modeInfo;
     RRModePtr		rrmode, *rrmodes;
+    CARD32		possibleOptions = 0;
+    CARD32		currentOptions = 0;
     
     if (randrp->virtualX == -1 || randrp->virtualY == -1) 
     {
@@ -655,6 +656,10 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
 	    clone_types = (1 << I830_OUTPUT_LVDS);
 	    pipe_type = PIPE_LFP;
 	    subpixel = SubPixelHorizontalRGB;
+	    possibleOptions = (RROutputOptionScaleNone|
+			       RROutputOptionScaleMaxAspect |
+			       RROutputOptionScaleMax);
+	    currentOptions = RROutputOptionScaleMax;
 	    break;
 	case I830_OUTPUT_TVOUT:
 	    crtc_types = ((1 << 0) |
@@ -692,11 +697,14 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
 
 	RROutputSetCrtc (randrp->outputs[i], crtc);
     
+	RROutputSetPossibleOptions (randrp->outputs[i], possibleOptions);
+	RROutputSetCurrentOptions (randrp->outputs[i], currentOptions);
         nmode = 0;
 	rrmodes = NULL;
 	if (pipe >= 0) 
 	{
-	    modes = pI830->pipeMon[pipe]->Modes;
+	    MonPtr  mon = pI830->pipeMon[pipe];
+	    modes = mon->Modes;
 	
 	    for (mode = modes; mode; mode = mode->next)
 		nmode++;
@@ -725,6 +733,16 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
 		    modeInfo.vSyncEnd = mode->VSyncEnd;
 		    modeInfo.vTotal = mode->VTotal;
 		    modeInfo.modeFlags = mode->Flags;
+		    if (mode->type & M_T_PREFERRED)
+			modeInfo.origin = RRModeOriginPreferred;
+		    else if (mode->type & M_T_DRIVER)
+			modeInfo.origin = RRModeOriginDetailed;
+		    else if (mode->type & M_T_USERDEF)
+			modeInfo.origin = RRModeOriginConfig;
+		    else if (mode->type & M_T_DEFAULT)
+			modeInfo.origin = RRModeOriginVESA;
+		    else
+			modeInfo.origin = RRModeOriginOther;
 
 		    rrmode = RRModeGet (pScreen, &modeInfo, mode->name);
 		    rrmode->devPrivate = mode;
@@ -776,8 +794,6 @@ static Bool
 I830RandRGetInfo12 (ScreenPtr pScreen, Rotation *rotations)
 {
     ScrnInfoPtr		pScrn = xf86Screens[pScreen->myNum];
-    I830Ptr		pI830 = I830PTR(pScrn);
-    int			found_crt;
 
     I830ValidateXF86ModeList(pScrn, FALSE);
     return I830RandRSetInfo12 (pScreen);
diff-tree 33629ed304b64e45d5640397bd1807c5a98907d1 (from 6ea16bf6b06c8b3aed4d2c98679ab28304d1b56c)
Author: Keith Packard <keithp at neko.keithp.com>
Date:   Tue Oct 3 09:39:22 2006 -0700

    Always register list of modes for outputs, even when disabled.

diff --git a/src/i830_randr.c b/src/i830_randr.c
index d973173..7abfb3b 100644
--- a/src/i830_randr.c
+++ b/src/i830_randr.c
@@ -614,6 +614,9 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
     int			pipe_type;
     int			pipe;
     int			subpixel;
+    DisplayModePtr	modes, mode;
+    xRRModeInfo		modeInfo;
+    RRModePtr		rrmode, *rrmodes;
     
     if (randrp->virtualX == -1 || randrp->virtualY == -1) 
     {
@@ -689,24 +692,22 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
 
 	RROutputSetCrtc (randrp->outputs[i], crtc);
     
-	if (pipe >= 0)
+        nmode = 0;
+	rrmodes = NULL;
+	if (pipe >= 0) 
 	{
-	    MonPtr	    mon = pI830->pipeMon[pipe];
-	    DisplayModePtr  mode;
-	    xRRModeInfo	    modeInfo;
-	    RRModePtr	    rrmode;
-	    
-	    nmode = 0;
-	    for (mode = mon->Modes; mode; mode = mode->next)
+	    modes = pI830->pipeMon[pipe]->Modes;
+	
+	    for (mode = modes; mode; mode = mode->next)
 		nmode++;
-	    
+
 	    if (nmode)
 	    {
-		modes = xalloc (nmode * sizeof (RRModePtr));
-		if (!modes)
+		rrmodes = xalloc (nmode * sizeof (RRModePtr));
+		if (!rrmodes)
 		    return FALSE;
 		nmode = 0;
-		for (mode = mon->Modes; mode; mode = mode->next)
+		for (mode = modes; mode; mode = mode->next)
 		{
 		    modeInfo.nameLength = strlen (mode->name);
 		    modeInfo.mmWidth = mon->widthmm;
@@ -728,17 +729,19 @@ I830RandRSetInfo12 (ScreenPtr pScreen)
 		    rrmode = RRModeGet (pScreen, &modeInfo, mode->name);
 		    rrmode->devPrivate = mode;
 		    if (rrmode)
-			modes[nmode++] = rrmode;
-		}
-		if (!RROutputSetModes (randrp->outputs[i], modes, nmode))
-		{
-		    xfree (modes);
-		    return FALSE;
+			rrmodes[nmode++] = rrmode;
 		}
-
-		xfree (modes);
 	    }
 	}
+	
+    	if (!RROutputSetModes (randrp->outputs[i], rrmodes, nmode))
+	{
+    	    xfree (rrmodes);
+	    return FALSE;
+	}
+	
+	xfree (rrmodes);
+	
 	connection = RR_Disconnected;
 	if (pipe >= 0)
 	    connection = RR_Connected;



More information about the xorg-commit mailing list