SOURCES: evdev-Xfuncproto-is-stale.patch (NEW), evdev-latest-CVS-1...

pluto pluto at pld-linux.org
Sun Aug 21 16:21:07 CEST 2005


Author: pluto                        Date: Sun Aug 21 14:21:07 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- minor fixes for evdev-driver.

---- Files affected:
SOURCES:
   evdev-Xfuncproto-is-stale.patch (NONE -> 1.1)  (NEW), evdev-latest-CVS-1.9.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/evdev-Xfuncproto-is-stale.patch
diff -u /dev/null SOURCES/evdev-Xfuncproto-is-stale.patch:1.1
--- /dev/null	Sun Aug 21 16:21:07 2005
+++ SOURCES/evdev-Xfuncproto-is-stale.patch	Sun Aug 21 16:21:02 2005
@@ -0,0 +1,11 @@
+--- evdev.c_orig	2005-01-25 01:36:37.000000000 -0400
++++ evdev.c	2005-06-28 18:59:11.000000000 -0300
+@@ -47,6 +47,8 @@
+ 
+ #include <xf86Module.h>
+ 
++#define _X_EXPORT
++
+ #define ArrayLength(a) (sizeof(a) / (sizeof((a)[0])))
+ 
+ #define MIN_KEYCODE 8

================================================================
Index: SOURCES/evdev-latest-CVS-1.9.patch
diff -u /dev/null SOURCES/evdev-latest-CVS-1.9.patch:1.1
--- /dev/null	Sun Aug 21 16:21:07 2005
+++ SOURCES/evdev-latest-CVS-1.9.patch	Sun Aug 21 16:21:02 2005
@@ -0,0 +1,213 @@
+--- evdev.c	2005-01-25 01:36:37.000000000 -0400
++++ evdev.c_1.9-CVS	2005-08-09 18:26:34.000000000 -0300
+@@ -23,7 +23,9 @@
+  * Author:  Kristian Høgsberg (krh at redhat.com)
+  */
+ 
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+ 
+ #include <X11/keysym.h>
+ #include <X11/XF86keysym.h>
+@@ -47,6 +49,20 @@
+ 
+ #include <xf86Module.h>
+ 
++/* 2.4 compatibility */
++#ifndef EVIOCGRAB
++#define EVIOCGRAB _IOW('E', 0x90, int)
++#endif
++
++#ifndef BTN_TASK
++#define BTN_TASK 0x117
++#endif
++
++#ifndef EV_SYN
++#define EV_SYN EV_RST
++#endif
++/* end compat */
++
+ #define ArrayLength(a) (sizeof(a) / (sizeof((a)[0])))
+ 
+ #define MIN_KEYCODE 8
+@@ -63,9 +79,9 @@
+ #define MODEFLAG	8
+ #define COMPOSEFLAG	16
+ 
+-#ifndef EV_RST
+-#define EV_RST EV_SYN
+-#endif
++typedef struct {
++    int kernel24;
++} EvdevRec, *EvdevPtr;
+ 
+ static int wheel_up_button = 4;
+ static int wheel_down_button = 5;
+@@ -148,6 +164,7 @@
+             case BTN_EXTRA:
+             case BTN_FORWARD:
+             case BTN_BACK:
++            case BTN_TASK:
+                 xf86PostButtonEvent(pInfo->dev, 0, ev.code - BTN_LEFT + 5,
+                                     value, 0, 0);
+                 break;
+@@ -158,7 +175,7 @@
+             }
+             break;
+ 
+-        case EV_RST:
++        case EV_SYN:
+             break;
+         }
+     }
+@@ -483,8 +500,10 @@
+ EvdevProc(DeviceIntPtr device, int what)
+ {
+     InputInfoPtr pInfo;
++    EvdevPtr pEvdev;
+ 
+     pInfo = device->public.devicePrivate;
++    pEvdev = pInfo->private;
+ 
+     switch (what)
+     {
+@@ -492,11 +511,17 @@
+ 	return EvdevInit(device);
+ 
+     case DEVICE_ON:
++        if (!pEvdev->kernel24 && ioctl(pInfo->fd, EVIOCGRAB, (void *)1))
++            xf86Msg(X_WARNING, "%s: Grab failed (%s)\n", pInfo->name,
++                    strerror(errno));
+         xf86AddEnabledDevice(pInfo);
+ 	device->public.on = TRUE;
+ 	break;
+ 	    
+     case DEVICE_OFF:
++        if (!pEvdev->kernel24 && ioctl(pInfo->fd, EVIOCGRAB, (void *)0))
++            xf86Msg(X_WARNING, "%s: Release failed (%s)\n", pInfo->name,
++                    strerror(errno));
+         xf86RemoveEnabledDevice(pInfo);
+ 	device->public.on = FALSE;
+ 	break;
+@@ -522,23 +547,31 @@
+         return FALSE;
+ }
+ 
+-static void
++static int
+ EvdevProbe(InputInfoPtr pInfo)
+ {
+     char key_bitmask[(KEY_MAX + 7) / 8];
+     char rel_bitmask[(REL_MAX + 7) / 8];
+     int i, has_axes, has_buttons, has_keys;
++    EvdevPtr pEvdev = pInfo->private;
++
++    if (ioctl(pInfo->fd, EVIOCGRAB, (void *)1) && errno == EINVAL) {
++        /* keyboards are unsafe in 2.4 */
++        pEvdev->kernel24 = 1;
++    } else {
++        ioctl(pInfo->fd, EVIOCGRAB, (void *)0);
++    }
+ 
+     if (ioctl(pInfo->fd, 
+               EVIOCGBIT(EV_REL, sizeof(rel_bitmask)), rel_bitmask) < 0) {
+         xf86Msg(X_ERROR, "ioctl EVIOCGBIT failed: %s\n", strerror(errno));
+-        return;
++        return 1;
+     }
+ 
+     if (ioctl(pInfo->fd,
+               EVIOCGBIT(EV_KEY, sizeof(key_bitmask)), key_bitmask) < 0) {
+         xf86Msg(X_ERROR, "ioctl EVIOCGBIT failed: %s\n", strerror(errno));
+-        return;
++        return 1;
+     }
+ 
+     has_axes = FALSE;
+@@ -571,19 +604,25 @@
+ 	    XI86_CONFIGURED;
+ 	pInfo->type_name = XI_MOUSE;
+     }
+-    
++
+     if (has_keys) {
+-        xf86Msg(X_INFO, "%s: Configuring as keyboard\n", pInfo->name);
+-	pInfo->flags |= XI86_KEYBOARD_CAPABLE | XI86_CONFIGURED;
+-	pInfo->type_name = XI_KEYBOARD;
++        if (pEvdev->kernel24) {
++            xf86Msg(X_INFO, "%s: Kernel < 2.6 is too old, ignoring keyboard\n",
++                    pInfo->name);
++        } else {
++            xf86Msg(X_INFO, "%s: Configuring as keyboard\n", pInfo->name);
++            pInfo->flags |= XI86_KEYBOARD_CAPABLE | XI86_CONFIGURED;
++	    pInfo->type_name = XI_KEYBOARD;
++        }
+     }
+ 
+     if ((pInfo->flags & XI86_CONFIGURED) == 0) {
+         xf86Msg(X_WARNING, "%s: Don't know how to use device\n",
+ 		pInfo->name);
++        return 1;
+     }
+ 
+-    return;
++    return 0;
+ }
+ 
+ static InputInfoPtr
+@@ -592,6 +631,7 @@
+     InputInfoPtr pInfo;
+     MessageType deviceFrom = X_CONFIG;
+     const char *device;
++    EvdevPtr pEvdev;
+ 
+     if (!(pInfo = xf86AllocateInput(drv, 0)))
+ 	return NULL;
+@@ -614,12 +654,17 @@
+     pInfo->always_core_feedback = 0;
+     pInfo->conf_idev = dev;
+ 
++    if (!(pEvdev = xcalloc(sizeof(*pEvdev), 1)))
++        return pInfo;
++    pInfo->private = pEvdev;
++
+     xf86CollectInputOptions(pInfo, NULL, NULL);
+     xf86ProcessCommonOptions(pInfo, pInfo->options); 
+ 
+     device = xf86CheckStrOption(dev->commonOptions, "Device", NULL);
+     if (!device) {
+         xf86Msg(X_ERROR, "%s: No device specified.\n", pInfo->name);
++        xfree(pEvdev);
+         return pInfo;
+     }
+ 	
+@@ -631,15 +676,17 @@
+ 
+     if (pInfo->fd < 0) {
+         xf86Msg(X_ERROR, "Unable to open evdev device \"%s\".\n", device);
++        xfree(pEvdev);
+         return pInfo;
+     }
+ 
+-    EvdevProbe(pInfo);
++    if (EvdevProbe(pInfo))
++        xfree(pEvdev);
+ 
+     return pInfo;
+ }
+ 
+-InputDriverRec EVDEV = {
++_X_EXPORT InputDriverRec EVDEV = {
+     1,
+     "evdev",
+     NULL,
+@@ -680,7 +727,7 @@
+     {0, 0, 0, 0}
+ };
+ 
+-XF86ModuleData evdevModuleData =
++_X_EXPORT XF86ModuleData evdevModuleData =
+ {
+     &EvdevVersionRec,
+     EvdevPlug,
================================================================



More information about the pld-cvs-commit mailing list