Merge branch 'rs485fix' of git://www.jni.nu/cris
[pandora-kernel.git] / drivers / input / mousedev.c
index f34b22b..d8f68f7 100644 (file)
@@ -57,7 +57,6 @@ struct mousedev_hw_data {
 };
 
 struct mousedev {
-       int exist;
        int open;
        int minor;
        struct input_handle handle;
@@ -66,6 +65,7 @@ struct mousedev {
        spinlock_t client_lock; /* protects client_list */
        struct mutex mutex;
        struct device dev;
+       bool exist;
 
        struct list_head mixdev_node;
        int mixdev_open;
@@ -765,10 +765,15 @@ static unsigned int mousedev_poll(struct file *file, poll_table *wait)
 {
        struct mousedev_client *client = file->private_data;
        struct mousedev *mousedev = client->mousedev;
+       unsigned int mask;
 
        poll_wait(file, &mousedev->wait, wait);
-       return ((client->ready || client->buffer) ? (POLLIN | POLLRDNORM) : 0) |
-               (mousedev->exist ? 0 : (POLLHUP | POLLERR));
+
+       mask = mousedev->exist ? POLLOUT | POLLWRNORM : POLLHUP | POLLERR;
+       if (client->ready || client->buffer)
+               mask |= POLLIN | POLLRDNORM;
+
+       return mask;
 }
 
 static const struct file_operations mousedev_fops = {
@@ -802,7 +807,7 @@ static void mousedev_remove_chrdev(struct mousedev *mousedev)
 static void mousedev_mark_dead(struct mousedev *mousedev)
 {
        mutex_lock(&mousedev->mutex);
-       mousedev->exist = 0;
+       mousedev->exist = false;
        mutex_unlock(&mousedev->mutex);
 }
 
@@ -862,7 +867,7 @@ static struct mousedev *mousedev_create(struct input_dev *dev,
                dev_set_name(&mousedev->dev, "mouse%d", minor);
 
        mousedev->minor = minor;
-       mousedev->exist = 1;
+       mousedev->exist = true;
        mousedev->handle.dev = input_get_device(dev);
        mousedev->handle.name = dev_name(&mousedev->dev);
        mousedev->handle.handler = handler;