--- xserver/hw/kdrive/fbdev/fbinit.c~	2006-01-31 17:09:33.000000000 +0100
+++ xserver/hw/kdrive/fbdev/fbinit.c	2006-01-31 17:11:55.000000000 +0100
@@ -28,6 +28,8 @@
 #endif
 #include <fbdev.h>
 
+extern int use_evdev;
+
 void
 InitCard (char *name)
 {
@@ -45,7 +47,10 @@
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    if (use_evdev)
+        KdInitInput (&LinuxEvdevMouseFuncs, &LinuxEvdevKeyboardFuncs);
+    else
+        KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
 #ifdef TOUCHSCREEN
     KdAddMouseDriver (&TsFuncs);
 #endif
--- xserver/hw/kdrive/src/kdrive.c.orig	2006-01-31 17:13:28.000000000 +0100
+++ xserver/hw/kdrive/src/kdrive.c	2006-01-31 17:15:28.000000000 +0100
@@ -44,6 +44,8 @@
 #include "dpmsproc.h"
 #endif
 
+int use_evdev = 0;
+
 typedef struct _kdDepths {
     CARD8   depth;
     CARD8   bpp;
@@ -687,6 +689,7 @@
     ErrorF("-videoTest       Start the server, pause momentarily and exit\n");
     ErrorF("-origin X,Y      Locates the next screen in the the virtual screen (Xinerama)\n");
     ErrorF("-mouse path[,n]  Filename of mouse device, n is number of buttons\n");
+    ErrorF("-use-evdev       Use Linux evdev input\n");
     ErrorF("-switchCmd       Command to execute on vt switch\n");
     ErrorF("-nozap           Don't terminate server on Ctrl+Alt+Backspace\n");
     ErrorF("vtxx             Use virtual terminal xx instead of the next available\n");
@@ -796,6 +799,11 @@
 	    UseMsg ();
 	return 2;
     }
+    if (!strcmp (argv[i], "-use-evdev"))
+    {
+	use_evdev = 1;
+	return 1;
+    }
     if (!strcmp (argv[i], "-keyboard"))
     {
 	if ((i+1) < argc)
