All pastes #953720 Raw Edit

Blaketh's PenTablet Patches

public text v1 · immutable
#953720 ·published 2008-03-23 07:59 UTC
rendered paste body
Edit to your xserver-1.4-hal-touchpad.patch in OLPC-2 branch of xorg-x11-server:

diff --git a/config/hal.c b/config/hal.c
index 3479be9..a235876 100644
--- a/config/hal.c
+++ b/config/hal.c
@@ -177,7 +177,13 @@ device_added(LibHalContext *hal_ctx, const char *udi)
         if (strcmp(props[i], "input.keys") == 0 ||
             strcmp(props[i], "input.keyboard") == 0)
             type |= TYPE_KEYS;
         if (strcmp(props[i], "input.mouse") == 0)
+        {
+            type |= TYPE_POINTER;
+            add_option(&options, "Mode", "Relative");
+        } else if (strcmp(props[i], "input.touchpad") == 0) {
             type |= TYPE_POINTER;
+            add_option(&options, "Mode", "Absolute");
+        }
     }
     libhal_free_string_array(props);

KERNEL DIFF to latest stable kernel: 
diff --git a/drivers/input/mouse/olpc.c b/drivers/input/mouse/olpc.c
index 9479658..c0aa870 100644
--- a/drivers/input/mouse/olpc.c
+++ b/drivers/input/mouse/olpc.c
@@ -491,17 +491,22 @@ int olpc_init(struct psmouse *psmouse)
         * Unset some of the default bits for things we don't have.
         */
        dev->evbit[LONG(EV_REL)] &= ~BIT(EV_REL);
-       dev->relbit[LONG(REL_X)] &= ~(BIT(REL_X) | BIT(REL_Y));
+       dev->relbit[LONG(REL_X)] &= ~BIT(REL_X);
+       dev->relbit[LONG(REL_Y)] &= ~BIT(REL_Y);
        dev->keybit[LONG(BTN_MIDDLE)] &= ~BIT(BTN_MIDDLE);
 
        dev->evbit[LONG(EV_KEY)] |= BIT(EV_KEY);
+       dev->evbit[LONG(EV_ABS)] |= BIT(EV_ABS);
        dev->keybit[LONG(BTN_TOUCH)] |= BIT(BTN_TOUCH);
        dev->keybit[LONG(BTN_TOOL_PEN)] |= BIT(BTN_TOOL_PEN);
-       dev->keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_RIGHT);
+       dev->keybit[LONG(BTN_MOUSE)] |= BIT(BTN_LEFT) | BIT(BTN_RIGHT);
+       dev->absbit[LONG(ABS_X)] |= BIT(ABS_X);
+       dev->absbit[LONG(ABS_Y)] |= BIT(ABS_Y);
+       dev->absbit[LONG(ABS_PRESSURE)] |= BIT(ABS_PRESSURE);
 
-       dev->evbit[LONG(EV_ABS)] |= BIT(EV_ABS);
        input_set_abs_params(dev, ABS_X, 2, 1000, 0, 0);
        input_set_abs_params(dev, ABS_Y, 0, 717, 0, 0);
+       input_set_abs_params(dev, ABS_PRESSURE, 0, 63, 0, 0);
 
        snprintf(priv->phys, sizeof(priv->phys),
                "%s/input1", psmouse->ps2dev.serio->phys);