Module Name: xsrc
Committed By: macallan
Date: Thu Jan 6 00:40:50 UTC 2011
Modified Files:
xsrc/external/mit/xf86-video-r128/dist/src: r128_driver.c
Log Message:
if we can't read panel resolution from BIOS - for example if there is none -
get the display resolution from wsdisplay instead
With this we no longer need to specify PanelWidth and PanelHeight in xorg.conf
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
xsrc/external/mit/xf86-video-r128/dist/src/r128_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-r128/dist/src/r128_driver.c
diff -u xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c:1.3 xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c:1.4
--- xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c:1.3 Thu Dec 23 04:32:50 2010
+++ xsrc/external/mit/xf86-video-r128/dist/src/r128_driver.c Thu Jan 6 00:40:50 2011
@@ -94,6 +94,7 @@
#include "xf86cmap.h"
#include "xf86xv.h"
#include "vbe.h"
+#include "xf86Priv.h"
/* fbdevhw & vgahw */
#ifdef WITH_VGAHW
@@ -114,6 +115,10 @@
#include <X11/extensions/dpms.h>
#endif
+#ifdef __NetBSD__
+#include <sys/time.h>
+#include <dev/wscons/wsconsio.h>
+#endif
#ifndef MAX
#define MAX(a,b) ((a)>(b)?(a):(b))
@@ -667,8 +672,6 @@
info->PanelXRes = R128_BIOS16(info->FPBIOSstart+25);
if (!info->PanelYRes)
info->PanelYRes = R128_BIOS16(info->FPBIOSstart+27);
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel size: %dx%d\n",
- info->PanelXRes, info->PanelYRes);
info->PanelPwrDly = R128_BIOS8(info->FPBIOSstart+56);
@@ -702,11 +705,33 @@
}
}
+#ifdef __NetBSD__
+ if (!info->PanelXRes || !info->PanelYRes) {
+ /*
+ * we may not be on x86 so check wsdisplay for panel dimensions
+ * XXX this assumes that the r128 is the console, although that should
+ * be the case in the vast majority of cases where an LCD is hooked up
+ * directly
+ * We should probably just check the relevant registers but I'm not
+ * sure they're available at this point.
+ */
+ struct wsdisplay_fbinfo fbinfo;
+
+ if (ioctl(xf86Info.screenFd, WSDISPLAYIO_GINFO, &fbinfo) == 0) {
+ info->PanelXRes = fbinfo.width;
+ info->PanelYRes = fbinfo.height;
+ }
+ }
+#endif
+
if (!info->PanelXRes || !info->PanelYRes) {
info->HasPanelRegs = FALSE;
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Can't determine panel dimensions, and none specified.\n"
"\tDisabling programming of FP registers.\n");
+ } else {
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel size: %dx%d\n",
+ info->PanelXRes, info->PanelYRes);
}
return TRUE;