]> code.ossystems Code Review - openembedded-core.git/commitdiff
xserver-kdrive: Feed xrandr calls to the framebuffer driver in case it can do better...
authorRichard Purdie <richard@openedhand.com>
Thu, 25 Sep 2008 21:03:38 +0000 (21:03 +0000)
committerRichard Purdie <richard@openedhand.com>
Thu, 25 Sep 2008 21:03:38 +0000 (21:03 +0000)
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5279 311d38ba-8fff-0310-9ca6-ca027cbcb966

meta/packages/xorg-xserver/xserver-kdrive/fbdev_xrandr_ioctl.patch [new file with mode: 0644]
meta/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb

diff --git a/meta/packages/xorg-xserver/xserver-kdrive/fbdev_xrandr_ioctl.patch b/meta/packages/xorg-xserver/xserver-kdrive/fbdev_xrandr_ioctl.patch
new file mode 100644 (file)
index 0000000..a5c22a5
--- /dev/null
@@ -0,0 +1,61 @@
+Index: xorg-server-1.3.0.0/hw/kdrive/fbdev/fbdev.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/fbdev/fbdev.c   2008-09-25 21:55:12.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/fbdev/fbdev.c        2008-09-25 21:55:46.000000000 +0100
+@@ -498,6 +498,7 @@
+     KdScreenInfo      *screen = pScreenPriv->screen;
+     FbdevScrPriv      *scrpriv = screen->driver;
+     Bool              wasEnabled = pScreenPriv->enabled;
++    FbdevPriv         *priv = screen->card->driver;
+     FbdevScrPriv      oldscr;
+     int                       oldwidth;
+     int                       oldheight;
+@@ -525,11 +526,46 @@
+     oldheight = screen->height;
+     oldmmwidth = pScreen->mmWidth;
+     oldmmheight = pScreen->mmHeight;
+-    
++
+     /*
+      * Set new configuration
+      */
+-    
++
++    if (newwidth != oldwidth || newheight != oldheight)
++    {
++      struct fb_var_screeninfo var;
++      int k;
++
++      k = ioctl (priv->fd, FBIOGET_VSCREENINFO, &var);
++
++      if (k < 0)
++      {
++          ErrorF("Error with framebuffer ioctl FBIOGET_VSCREENINFO: %s", strerror (errno));
++          return FALSE;
++      }
++
++      var.xres = newwidth;
++      var.yres = newheight;
++      var.activate = FB_ACTIVATE_NOW;
++
++      k = ioctl (priv->fd, FBIOPUT_VSCREENINFO, &var);
++
++      if (k >= 0)
++      {
++          if ((k=ioctl(priv->fd, FBIOGET_FSCREENINFO, &priv->fix)) < 0)
++          {
++              perror("Error with framebuffer ioctl FIOGET_FSCREENINFO");
++              close (priv->fd);
++              return FALSE;
++          }
++          if ((k=ioctl(priv->fd, FBIOGET_VSCREENINFO, &priv->var)) < 0) {
++              perror("Error  framebuffer ioctl FIOGET_VSCREENINFO");
++              close (priv->fd);
++              return FALSE;
++          }
++      }
++    }
++
+     scrpriv->randr = KdAddRotation (screen->randr, randr);
+     KdOffscreenSwapOut (screen->pScreen);
index bdc3a1f6f7a684b8fa86180dc6f598b7b698ec2b..b1d654b3919ff09fb8927a68760959112ec3e7ed 100644 (file)
@@ -3,7 +3,7 @@ require xserver-kdrive.inc
 DEPENDS += "libxkbfile libxcalibrate"
 
 PE = "1"
-PR = "r19"
+PR = "r21"
 
 SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
        file://extra-kmodes.patch;patch=1 \
@@ -20,6 +20,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
        file://enable-xcalibrate.patch;patch=1 \
        file://hide-cursor-and-ppm-root.patch;patch=1 \
        file://xcalibrate_coords.patch;patch=1 \
+       file://fbdev_xrandr_ioctl.patch;patch=1 \
        file://scheduler.patch;patch=1"
 
 S = "${WORKDIR}/xorg-server-${PV}"