Upstream-Status: Pending Signed-off-by: Yu Ke 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);