omap24xx: Add linux 2.6.37 config/patches
[openwrt/svn-archive/archive.git] / target / linux / omap24xx / patches-2.6.37 / 710-evdev-events-without-grab.patch
diff --git a/target/linux/omap24xx/patches-2.6.37/710-evdev-events-without-grab.patch b/target/linux/omap24xx/patches-2.6.37/710-evdev-events-without-grab.patch
new file mode 100644 (file)
index 0000000..2e81b9c
--- /dev/null
@@ -0,0 +1,31 @@
+---
+ drivers/input/evdev.c |   10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+--- linux-2.6.36-rc4.orig/drivers/input/evdev.c
++++ linux-2.6.36-rc4/drivers/input/evdev.c
+@@ -76,7 +76,7 @@ static void evdev_event(struct input_han
+                       unsigned int type, unsigned int code, int value)
+ {
+       struct evdev *evdev = handle->private;
+-      struct evdev_client *client;
++      struct evdev_client *client, *c;
+       struct input_event event;
+       do_gettimeofday(&event.time);
+@@ -87,9 +87,13 @@ static void evdev_event(struct input_han
+       rcu_read_lock();
+       client = rcu_dereference(evdev->grab);
+-      if (client)
++      if (client) {
+               evdev_pass_event(client, &event);
+-      else
++              /* Also pass events to clients that did not grab the device. */
++              list_for_each_entry_rcu(c, &evdev->client_list, node)
++                      if (c != client)
++                              evdev_pass_event(c, &event);
++      } else
+               list_for_each_entry_rcu(client, &evdev->client_list, node)
+                       evdev_pass_event(client, &event);