summaryrefslogtreecommitdiffstats
path: root/meta/recipes-graphics/xorg-xserver/xserver-kdrive-1.7.99.2/fbdev_xrandr_ioctl.patch
blob: a5c22a5efc0a02a6281e41c077bb4dfa9859edb1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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);