summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2009-02-22 19:49:28 +0100
committerLars-Peter Clausen <lars@metafoo.de>2009-02-22 19:49:28 +0100
commit3e3c32309cf6d9045d821da52b7547831d819b31 (patch)
tree4941572f37bc411c83c503d6ea9c4a8acae12866
parent686c1d128d0f8a14ff4cb2a4d2223749f85854a7 (diff)
Add legacy modesetting path for xorg prior to 1.5.0.0
It doesn't support rotation yet.
-rw-r--r--src/glamo-display.c109
-rw-r--r--src/glamo-driver.c2
2 files changed, 90 insertions, 21 deletions
diff --git a/src/glamo-display.c b/src/glamo-display.c
index 5ea6259..4562546 100644
--- a/src/glamo-display.c
+++ b/src/glamo-display.c
@@ -53,20 +53,36 @@ GlamoCrtcGammaSet(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue,
static void
GlamoCrtcDestroy(xf86CrtcPtr crtc);
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,5,0,0,0)
static Bool
GlamoSetModeMajor(xf86CrtcPtr crtc, DisplayModePtr mode,
Rotation rotation, int x, int y);
+#else
+
+static void
+GlamoModeSet(xf86CrtcPtr crtc, DisplayModePtr mode,
+ DisplayModePtr adjusted_mode, int x, int y);
+
+static Bool
+GlamoLock(xf86CrtcPtr crtc);
+
+static Bool
+GlamoModeFixup(xf86CrtcPtr crtc, DisplayModePtr mode,
+ DisplayModePtr adjusted_mode);
+
+static void
+GlamoPrepare(xf86CrtcPtr crtc);
+
+static void
+GlamoCommit(xf86CrtcPtr crtc);
+
+#endif
+
static const xf86CrtcFuncsRec glamo_crtc_funcs = {
.dpms = GlamoCrtcDPMS,
.save = NULL,
.restore = NULL,
- .lock = NULL,
- .unlock = NULL,
- .mode_fixup = NULL,
- .prepare = NULL,
- .mode_set = NULL,
- .commit = NULL,
.gamma_set = GlamoCrtcGammaSet,
.shadow_allocate = NULL,
.shadow_create = NULL,
@@ -78,7 +94,21 @@ static const xf86CrtcFuncsRec glamo_crtc_funcs = {
.load_cursor_image = NULL,
.load_cursor_argb = NULL,
.destroy = GlamoCrtcDestroy,
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,5,0,0,0)
+ .lock = NULL,
+ .unlock = NULL,
+ .mode_fixup = NULL,
+ .prepare = NULL,
+ .mode_set = NULL,
+ .commit = NULL,
.set_mode_major = GlamoSetModeMajor
+#else
+ .lock = GlamoLock,
+ .unlock = NULL,
+ .mode_fixup = GlamoModeFixup,
+ .prepare = GlamoPrepare,
+ .mode_set = GlamoModeSet, .commit = GlamoCommit,
+#endif
};
static void
@@ -106,21 +136,19 @@ ConvertModeXfreeToFb(const DisplayModePtr mode, const Rotation *rotation, struct
var->sync = 0;
var->vmode = 0;
- if (rot) {
- switch (*rotation) {
- case RR_Rotate_0:
- var->rotate = FB_ROTATE_UR;
- break;
- case RR_Rotate_90:
- var->rotate = FB_ROTATE_CW;
- break;
- case RR_Rotate_180:
- var->rotate = FB_ROTATE_UD;
- break;
- case RR_Rotate_270:
- var->rotate = FB_ROTATE_CCW;
- break;
- }
+ switch (rot) {
+ case RR_Rotate_0:
+ var->rotate = FB_ROTATE_UR;
+ break;
+ case RR_Rotate_90:
+ var->rotate = FB_ROTATE_CW;
+ break;
+ case RR_Rotate_180:
+ var->rotate = FB_ROTATE_UD;
+ break;
+ case RR_Rotate_270:
+ var->rotate = FB_ROTATE_CCW;
+ break;
}
}
@@ -141,6 +169,8 @@ static void GlamoCrtcGammaSet(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green,
static void GlamoCrtcDestroy(xf86CrtcPtr crtc) {
}
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,5,0,0,0)
+
static Bool
GlamoSetModeMajor(xf86CrtcPtr crtc, DisplayModePtr mode,
Rotation rotation, int x, int y) {
@@ -218,3 +248,40 @@ done:
return ret;
}
+
+#else
+
+static void
+GlamoModeSet(xf86CrtcPtr crtc, DisplayModePtr mode,
+ DisplayModePtr adjusted_mode, int x, int y) {
+ GlamoPtr pGlamo = GlamoPTR(crtc->scrn);
+
+ struct fb_var_screeninfo var = pGlamo->fb_var;
+
+ ConvertModeXfreeToFb(adjusted_mode, NULL, &var);
+
+ ioctl(pGlamo->fb_fd, FBIOPUT_VSCREENINFO, (void*)&var);
+}
+
+static Bool
+GlamoLock(xf86CrtcPtr crtc) {
+ return FALSE;
+}
+
+static Bool
+GlamoModeFixup(xf86CrtcPtr crtc, DisplayModePtr mode,
+ DisplayModePtr adjusted_mode) {
+ return TRUE;
+}
+
+static void
+GlamoPrepare(xf86CrtcPtr crtc) {
+ (*crtc->funcs->dpms)(crtc, DPMSModeOff);
+}
+
+static void
+GlamoCommit(xf86CrtcPtr crtc) {
+ (*crtc->funcs->dpms)(crtc, DPMSModeOn);
+}
+
+#endif
diff --git a/src/glamo-driver.c b/src/glamo-driver.c
index ae8d3f4..2c8735f 100644
--- a/src/glamo-driver.c
+++ b/src/glamo-driver.c
@@ -599,8 +599,10 @@ GlamoScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
GlamoEnterVT(scrnIndex, 0);
xf86CrtcScreenInit(pScreen);
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,5,0,0,0)
xf86RandR12SetRotations(pScreen, RR_Rotate_0 | RR_Rotate_90 |
RR_Rotate_180 | RR_Rotate_270);
+#endif
/* colormap */
if (!miCreateDefColormap(pScreen)) {
xf86DrvMsg(scrnIndex, X_ERROR,