Input: i8042 - spelling fix
[safe/jmp/linux-2.6] / drivers / input / evdev.c
index 377b200..2ee6c7a 100644 (file)
@@ -13,6 +13,7 @@
 #define EVDEV_BUFFER_SIZE      64
 
 #include <linux/poll.h>
+#include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/init.h>
@@ -25,7 +26,6 @@ struct evdev {
        int exist;
        int open;
        int minor;
-       char name[16];
        struct input_handle handle;
        wait_queue_head_t wait;
        struct evdev_client *grab;
@@ -59,7 +59,8 @@ static void evdev_pass_event(struct evdev_client *client,
        client->head &= EVDEV_BUFFER_SIZE - 1;
        spin_unlock(&client->buffer_lock);
 
-       kill_fasync(&client->fasync, SIGIO, POLL_IN);
+       if (event->type == EV_SYN)
+               kill_fasync(&client->fasync, SIGIO, POLL_IN);
 }
 
 /*
@@ -94,11 +95,8 @@ static void evdev_event(struct input_handle *handle,
 static int evdev_fasync(int fd, struct file *file, int on)
 {
        struct evdev_client *client = file->private_data;
-       int retval;
-
-       retval = fasync_helper(fd, file, on, &client->fasync);
 
-       return retval < 0 ? retval : 0;
+       return fasync_helper(fd, file, on, &client->fasync);
 }
 
 static int evdev_flush(struct file *file, fl_owner_t id)
@@ -235,7 +233,6 @@ static int evdev_release(struct inode *inode, struct file *file)
                evdev_ungrab(evdev, client);
        mutex_unlock(&evdev->mutex);
 
-       evdev_fasync(-1, file, 0);
        evdev_detach_client(evdev, client);
        kfree(client);
 
@@ -281,6 +278,8 @@ static int evdev_open(struct inode *inode, struct file *file)
                goto err_free_client;
 
        file->private_data = client;
+       nonseekable_open(inode, file);
+
        return 0;
 
  err_free_client:
@@ -516,7 +515,7 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd,
        struct input_absinfo abs;
        struct ff_effect effect;
        int __user *ip = (int __user *)p;
-       int i, t, u, v;
+       unsigned int i, t, u, v;
        int error;
 
        switch (cmd) {
@@ -630,8 +629,11 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd,
                                abs.maximum = dev->absmax[t];
                                abs.fuzz = dev->absfuzz[t];
                                abs.flat = dev->absflat[t];
+                               abs.resolution = dev->absres[t];
 
-                               if (copy_to_user(p, &abs, sizeof(struct input_absinfo)))
+                               if (copy_to_user(p, &abs, min_t(size_t,
+                                                               _IOC_SIZE(cmd),
+                                                               sizeof(struct input_absinfo))))
                                        return -EFAULT;
 
                                return 0;
@@ -658,8 +660,9 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd,
 
                                t = _IOC_NR(cmd) & ABS_MAX;
 
-                               if (copy_from_user(&abs, p,
-                                               sizeof(struct input_absinfo)))
+                               if (copy_from_user(&abs, p, min_t(size_t,
+                                                                 _IOC_SIZE(cmd),
+                                                                 sizeof(struct input_absinfo))))
                                        return -EFAULT;
 
                                /*
@@ -674,6 +677,8 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd,
                                dev->absmax[t] = abs.maximum;
                                dev->absfuzz[t] = abs.fuzz;
                                dev->absflat[t] = abs.flat;
+                               dev->absres[t] = _IOC_SIZE(cmd) < sizeof(struct input_absinfo) ?
+                                                       0 : abs.resolution;
 
                                spin_unlock_irq(&dev->event_lock);
 
@@ -811,16 +816,15 @@ static int evdev_connect(struct input_handler *handler, struct input_dev *dev,
        mutex_init(&evdev->mutex);
        init_waitqueue_head(&evdev->wait);
 
-       snprintf(evdev->name, sizeof(evdev->name), "event%d", minor);
+       dev_set_name(&evdev->dev, "event%d", minor);
        evdev->exist = 1;
        evdev->minor = minor;
 
        evdev->handle.dev = input_get_device(dev);
-       evdev->handle.name = evdev->name;
+       evdev->handle.name = dev_name(&evdev->dev);
        evdev->handle.handler = handler;
        evdev->handle.private = evdev;
 
-       strlcpy(evdev->dev.bus_id, evdev->name, sizeof(evdev->dev.bus_id));
        evdev->dev.devt = MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + minor);
        evdev->dev.class = &input_class;
        evdev->dev.parent = &dev->dev;