rendered paste bodyEdit 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);