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