Touchpad state control psmouse driver patch by rkraevskiy@gmail.com to check touchpad state: cat /sys/bus/serio/drivers/psmouse/serio1/enabled 1 -> touchpad is enabled 0 -> touchpad is disabled to disable touchpad: echo 0 >/sys/bus/serio/drivers/psmouse/serio1/enabled to enable touchpad: echo 1 >/sys/bus/serio/drivers/psmouse/serio1/enabled In /etc/acpi/handler.sh button/lid) STATE=`cat /proc/acpi/button/lid/LID/state | cut -c13-` case "$STATE" in closed) echo 0 >/sys/bus/serio/drivers/psmouse/serio1/enabled ;; open) echo 1 >/sys/bus/serio/drivers/psmouse/serio1/enabled ;; esac ;; diff -ur a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c --- a/drivers/input/mouse/psmouse-base.c 2012-12-11 05:30:57.000000000 +0200 +++ b/drivers/input/mouse/psmouse-base.c 2012-12-21 23:57:06.000000000 +0200 @@ -87,6 +87,9 @@ PSMOUSE_DEFINE_ATTR(resync_time, S_IWUSR | S_IRUGO, (void *) offsetof(struct psmouse, resync_time), psmouse_show_int_attr, psmouse_set_int_attr); +PSMOUSE_DEFINE_ATTR(enabled, S_IWUSR | S_IRUGO, + NULL, + psmouse_attr_show_enabled, psmouse_attr_set_enabled); static struct attribute *psmouse_attributes[] = { &psmouse_attr_protocol.dattr.attr, @@ -94,6 +97,7 @@ &psmouse_attr_resolution.dattr.attr, &psmouse_attr_resetafter.dattr.attr, &psmouse_attr_resync_time.dattr.attr, + &psmouse_attr_enabled.dattr.attr, NULL }; @@ -1419,7 +1423,7 @@ psmouse->resetafter = psmouse_resetafter; psmouse->resync_time = parent ? 0 : psmouse_resync_time; psmouse->smartscroll = psmouse_smartscroll; - + psmouse->enabled = true; psmouse_switch_protocol(psmouse, NULL); psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); @@ -1602,7 +1606,7 @@ retval = attr->set(psmouse, attr->data, buf, count); if (attr->protect) { - if (retval != -ENODEV) + if (retval != -ENODEV && psmouse->enabled) psmouse_activate(psmouse); if (parent) @@ -1637,6 +1641,26 @@ return count; } + +static ssize_t psmouse_attr_show_enabled(struct psmouse *psmouse, void *data, char *buf) +{ + return sprintf(buf, "%d\n", psmouse->enabled); +} + +static ssize_t psmouse_attr_set_enabled(struct psmouse *psmouse, void *data, const char *buf, size_t count) +{ + unsigned int value; + int err; + + err = kstrtouint(buf, 10, &value); + if (err){ + return err; + } + + psmouse->enabled = (value!=0); + return count; +} + static ssize_t psmouse_attr_show_protocol(struct psmouse *psmouse, void *data, char *buf) { return sprintf(buf, "%s\n", psmouse_protocol_by_type(psmouse->type)->name); diff -ur a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h --- a/drivers/input/mouse/psmouse.h 2012-12-11 05:30:57.000000000 +0200 +++ b/drivers/input/mouse/psmouse.h 2012-12-21 23:53:54.000000000 +0200 @@ -62,6 +62,7 @@ unsigned int resolution; unsigned int resetafter; unsigned int resync_time; + bool enabled; bool smartscroll; /* Logitech only */ psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse);