Module Name: xsrc
Committed By: tsutsui
Date: Fri Jul 22 15:12:01 UTC 2011
Modified Files:
xsrc/external/mit/xf86-video-wsfb/dist/src: wsfb_driver.c
Log Message:
Make wsfb driver work with 1bpp wscons framebuffer on luna68k:
- Pass proper args (a number of line dots, not byte of screen width)
to fbScreenInit() in 1bpp case, as X11R6 Xhpc server did
- handle luna68k quirk (fbstart has 8 byte offset) by WSDISPLAYIO_GTYPE
(XXX wstype should be stored in pScrn?)
- set rgbBits properly in 1bpp and 4bpp cases
(XXX not sure if really necessary)
To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 \
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.12 xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c:1.13
--- xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c:1.12 Thu Jul 21 11:08:58 2011
+++ xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c Fri Jul 22 15:12:01 2011
@@ -546,7 +546,7 @@
xf86SetGamma(pScrn,zeros);
pScrn->progClock = TRUE;
- pScrn->rgbBits = 8;
+ pScrn->rgbBits = (pScrn->depth >= 8) ? 8 : pScrn->depth;
pScrn->chipset = "wsfb";
pScrn->videoRam = fPtr->linebytes * fPtr->info.height;
@@ -736,6 +736,7 @@
VisualPtr visual;
int ret, flags, ncolors;
int wsmode = WSDISPLAYIO_MODE_DUMBFB;
+ int wstype;
size_t len;
TRACE_ENTER("WsfbScreenInit");
@@ -787,6 +788,13 @@
strerror(errno));
return FALSE;
}
+ /* Get wsdisplay type to handle quirks */
+ if (ioctl(fPtr->fd, WSDISPLAYIO_GTYPE, &wstype) == -1) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "ioctl WSDISPLAY_GTYPE: %s\n",
+ strerror(errno));
+ return FALSE;
+ }
fPtr->fbmem = wsfb_mmap(len, 0, fPtr->fd);
if (fPtr->fbmem == NULL) {
@@ -826,6 +834,17 @@
}
fPtr->fbstart = fPtr->fbmem;
+#ifdef WSDISPLAY_TYPE_LUNA
+ if (wstype == WSDISPLAY_TYPE_LUNA) {
+ /*
+ * XXX
+ * LUNA's FB seems to have 64 dot (8 byte) offset.
+ * This might be able to be changed in kernel lunafb driver,
+ * but current setting was pulled from 4.4BSD-Lite2/luna68k.
+ */
+ fPtr->fbstart += 8;
+ }
+#endif
if (fPtr->shadowFB) {
fPtr->shadow = xcalloc(1, pScrn->virtualX * pScrn->virtualY *
@@ -840,6 +859,12 @@
switch (pScrn->bitsPerPixel) {
case 1:
+ ret = fbScreenInit(pScreen,
+ fPtr->fbstart,
+ pScrn->virtualX, pScrn->virtualY,
+ pScrn->xDpi, pScrn->yDpi,
+ fPtr->linebytes * 8, pScrn->bitsPerPixel);
+ break;
case 4:
case 8:
case 16: