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);