Module Name: xsrc Committed By: macallan Date: Thu Feb 14 16:13:38 UTC 2013
Modified Files: xsrc/external/mit/xf86-video-wsfb/dist/src: wsfb_driver.c Log Message: call ioctl(WSDISPLAYIO_SMODE, ...) in EnterTV/LeaveVT so kernel graphics drivers get notified when we switch in and out of X To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 \ xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c diff -u xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c:1.15 xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c:1.16 --- xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c:1.15 Thu Jan 31 11:18:01 2013 +++ xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c Thu Feb 14 16:13:38 2013 @@ -1147,9 +1147,19 @@ static Bool WsfbEnterVT(int scrnIndex, int flags) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + WsfbPtr fPtr = WSFBPTR(pScrn); + int mode; TRACE_ENTER("EnterVT"); pScrn->vtSema = TRUE; + + /* Restore the graphics mode. */ + mode = WSDISPLAYIO_MODE_DUMBFB; + if (ioctl(fPtr->fd, WSDISPLAYIO_SMODE, &mode) == -1) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "error setting graphics mode %s\n", strerror(errno)); + } + TRACE_EXIT("EnterVT"); return TRUE; } @@ -1157,11 +1167,39 @@ WsfbEnterVT(int scrnIndex, int flags) static void WsfbLeaveVT(int scrnIndex, int flags) { -#if DEBUG ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; -#endif + WsfbPtr fPtr = WSFBPTR(pScrn); + int mode; TRACE_ENTER("LeaveVT"); + + /* + * stuff to do: + * - turn off hw cursor + * - restore colour map if WSFB_CI + * - ioctl(WSDISPLAYIO_MODE_EMUL) to notify the kernel driver that + * we're backing off + */ + + if (fPtr->fbi.fbi_pixeltype == WSFB_CI) { + /* reset colormap for text mode */ + if (ioctl(fPtr->fd, WSDISPLAYIO_PUTCMAP, + &(fPtr->saved_cmap)) == -1) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "error restoring colormap %s\n", + strerror(errno)); + } + } + + /* Restore the text mode. */ + mode = WSDISPLAYIO_MODE_EMUL; + if (ioctl(fPtr->fd, WSDISPLAYIO_SMODE, &mode) == -1) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "error setting text mode %s\n", strerror(errno)); + } + + pScrn->vtSema = FALSE; + TRACE_EXIT("LeaveVT"); } static Bool