drivers/input/mousedev.c
116
static struct mousedev *mousedev_mix;
drivers/input/mousedev.c
119
#define fx(i) (mousedev->old_x[(mousedev->pkt_count - (i)) & 03])
drivers/input/mousedev.c
120
#define fy(i) (mousedev->old_y[(mousedev->pkt_count - (i)) & 03])
drivers/input/mousedev.c
123
struct mousedev *mousedev,
drivers/input/mousedev.c
134
if (mousedev->touch && mousedev->pkt_count >= 2) {
drivers/input/mousedev.c
141
tmp += mousedev->frac_dx;
drivers/input/mousedev.c
142
mousedev->packet.dx = tmp / FRACTION_DENOM;
drivers/input/mousedev.c
143
mousedev->frac_dx =
drivers/input/mousedev.c
144
tmp - mousedev->packet.dx * FRACTION_DENOM;
drivers/input/mousedev.c
150
if (mousedev->touch && mousedev->pkt_count >= 2) {
drivers/input/mousedev.c
158
tmp += mousedev->frac_dy;
drivers/input/mousedev.c
159
mousedev->packet.dy = tmp / FRACTION_DENOM;
drivers/input/mousedev.c
160
mousedev->frac_dy = tmp -
drivers/input/mousedev.c
161
mousedev->packet.dy * FRACTION_DENOM;
drivers/input/mousedev.c
167
static void mousedev_abs_event(struct input_dev *dev, struct mousedev *mousedev,
drivers/input/mousedev.c
184
mousedev->packet.x = ((value - min) * xres) / size;
drivers/input/mousedev.c
185
mousedev->packet.abs_event = 1;
drivers/input/mousedev.c
198
mousedev->packet.y = yres - ((value - min) * yres) / size;
drivers/input/mousedev.c
199
mousedev->packet.abs_event = 1;
drivers/input/mousedev.c
204
static void mousedev_rel_event(struct mousedev *mousedev,
drivers/input/mousedev.c
209
mousedev->packet.dx += value;
drivers/input/mousedev.c
213
mousedev->packet.dy -= value;
drivers/input/mousedev.c
217
mousedev->packet.dz -= value;
drivers/input/mousedev.c
222
static void mousedev_key_event(struct mousedev *mousedev,
drivers/input/mousedev.c
253
set_bit(index, &mousedev->packet.buttons);
drivers/input/mousedev.c
256
clear_bit(index, &mousedev->packet.buttons);
drivers/input/mousedev.c
261
static void mousedev_notify_readers(struct mousedev *mousedev,
drivers/input/mousedev.c
270
list_for_each_entry_rcu(client, &mousedev->client_list, node) {
drivers/input/mousedev.c
276
if (client->ready && p->buttons != mousedev->packet.buttons) {
drivers/input/mousedev.c
300
p->buttons = mousedev->packet.buttons;
drivers/input/mousedev.c
316
wake_up_interruptible(&mousedev->wait);
drivers/input/mousedev.c
319
static void mousedev_touchpad_touch(struct mousedev *mousedev, int value)
drivers/input/mousedev.c
322
if (mousedev->touch &&
drivers/input/mousedev.c
324
mousedev->touch + msecs_to_jiffies(tap_time))) {
drivers/input/mousedev.c
330
set_bit(0, &mousedev->packet.buttons);
drivers/input/mousedev.c
332
mousedev_notify_readers(mousedev, &mousedev_mix->packet);
drivers/input/mousedev.c
335
clear_bit(0, &mousedev->packet.buttons);
drivers/input/mousedev.c
338
mousedev->touch = mousedev->pkt_count = 0;
drivers/input/mousedev.c
339
mousedev->frac_dx = 0;
drivers/input/mousedev.c
340
mousedev->frac_dy = 0;
drivers/input/mousedev.c
342
} else if (!mousedev->touch)
drivers/input/mousedev.c
343
mousedev->touch = jiffies;
drivers/input/mousedev.c
349
struct mousedev *mousedev = handle->private;
drivers/input/mousedev.c
360
mousedev, code, value);
drivers/input/mousedev.c
362
mousedev_abs_event(handle->dev, mousedev, code, value);
drivers/input/mousedev.c
367
mousedev_rel_event(mousedev, code, value);
drivers/input/mousedev.c
374
mousedev_touchpad_touch(mousedev, value);
drivers/input/mousedev.c
376
mousedev_key_event(mousedev, code, value);
drivers/input/mousedev.c
382
if (mousedev->touch) {
drivers/input/mousedev.c
383
mousedev->pkt_count++;
drivers/input/mousedev.c
393
mousedev_notify_readers(mousedev, &mousedev->packet);
drivers/input/mousedev.c
394
mousedev_notify_readers(mousedev_mix, &mousedev->packet);
drivers/input/mousedev.c
396
mousedev->packet.dx = mousedev->packet.dy =
drivers/input/mousedev.c
397
mousedev->packet.dz = 0;
drivers/input/mousedev.c
398
mousedev->packet.abs_event = 0;
drivers/input/mousedev.c
413
struct mousedev *mousedev = container_of(dev, struct mousedev, dev);
drivers/input/mousedev.c
415
input_put_device(mousedev->handle.dev);
drivers/input/mousedev.c
416
kfree(mousedev);
drivers/input/mousedev.c
419
static int mousedev_open_device(struct mousedev *mousedev)
drivers/input/mousedev.c
423
retval = mutex_lock_interruptible(&mousedev->mutex);
drivers/input/mousedev.c
427
if (!mousedev->exist)
drivers/input/mousedev.c
429
else if (!mousedev->open++) {
drivers/input/mousedev.c
430
retval = input_open_device(&mousedev->handle);
drivers/input/mousedev.c
432
mousedev->open--;
drivers/input/mousedev.c
435
mutex_unlock(&mousedev->mutex);
drivers/input/mousedev.c
439
static void mousedev_close_device(struct mousedev *mousedev)
drivers/input/mousedev.c
441
mutex_lock(&mousedev->mutex);
drivers/input/mousedev.c
443
if (mousedev->exist && !--mousedev->open)
drivers/input/mousedev.c
444
input_close_device(&mousedev->handle);
drivers/input/mousedev.c
446
mutex_unlock(&mousedev->mutex);
drivers/input/mousedev.c
454
static int mixdev_open_devices(struct mousedev *mixdev)
drivers/input/mousedev.c
463
struct mousedev *mousedev;
drivers/input/mousedev.c
465
list_for_each_entry(mousedev, &mousedev_mix_list, mixdev_node) {
drivers/input/mousedev.c
466
if (!mousedev->opened_by_mixdev) {
drivers/input/mousedev.c
467
if (mousedev_open_device(mousedev))
drivers/input/mousedev.c
470
mousedev->opened_by_mixdev = true;
drivers/input/mousedev.c
484
static void mixdev_close_devices(struct mousedev *mixdev)
drivers/input/mousedev.c
489
struct mousedev *mousedev;
drivers/input/mousedev.c
491
list_for_each_entry(mousedev, &mousedev_mix_list, mixdev_node) {
drivers/input/mousedev.c
492
if (mousedev->opened_by_mixdev) {
drivers/input/mousedev.c
493
mousedev->opened_by_mixdev = false;
drivers/input/mousedev.c
494
mousedev_close_device(mousedev);
drivers/input/mousedev.c
503
static void mousedev_attach_client(struct mousedev *mousedev,
drivers/input/mousedev.c
506
spin_lock(&mousedev->client_lock);
drivers/input/mousedev.c
507
list_add_tail_rcu(&client->node, &mousedev->client_list);
drivers/input/mousedev.c
508
spin_unlock(&mousedev->client_lock);
drivers/input/mousedev.c
511
static void mousedev_detach_client(struct mousedev *mousedev,
drivers/input/mousedev.c
514
spin_lock(&mousedev->client_lock);
drivers/input/mousedev.c
516
spin_unlock(&mousedev->client_lock);
drivers/input/mousedev.c
523
struct mousedev *mousedev = client->mousedev;
drivers/input/mousedev.c
525
mousedev_detach_client(mousedev, client);
drivers/input/mousedev.c
528
mousedev->close_device(mousedev);
drivers/input/mousedev.c
536
struct mousedev *mousedev;
drivers/input/mousedev.c
541
mousedev = mousedev_mix;
drivers/input/mousedev.c
544
mousedev = container_of(inode->i_cdev, struct mousedev, cdev);
drivers/input/mousedev.c
553
client->mousedev = mousedev;
drivers/input/mousedev.c
554
mousedev_attach_client(mousedev, client);
drivers/input/mousedev.c
556
error = mousedev->open_device(mousedev);
drivers/input/mousedev.c
566
mousedev_detach_client(mousedev, client);
drivers/input/mousedev.c
711
wake_up_interruptible(&client->mousedev->wait);
drivers/input/mousedev.c
720
struct mousedev *mousedev = client->mousedev;
drivers/input/mousedev.c
724
if (!client->ready && !client->buffer && mousedev->exist &&
drivers/input/mousedev.c
728
retval = wait_event_interruptible(mousedev->wait,
drivers/input/mousedev.c
729
!mousedev->exist || client->ready || client->buffer);
drivers/input/mousedev.c
733
if (!mousedev->exist)
drivers/input/mousedev.c
761
struct mousedev *mousedev = client->mousedev;
drivers/input/mousedev.c
764
poll_wait(file, &mousedev->wait, wait);
drivers/input/mousedev.c
766
mask = mousedev->exist ? EPOLLOUT | EPOLLWRNORM : EPOLLHUP | EPOLLERR;
drivers/input/mousedev.c
78
int (*open_device)(struct mousedev *mousedev);
drivers/input/mousedev.c
789
static void mousedev_mark_dead(struct mousedev *mousedev)
drivers/input/mousedev.c
79
void (*close_device)(struct mousedev *mousedev);
drivers/input/mousedev.c
791
mutex_lock(&mousedev->mutex);
drivers/input/mousedev.c
792
mousedev->exist = false;
drivers/input/mousedev.c
793
mutex_unlock(&mousedev->mutex);
drivers/input/mousedev.c
800
static void mousedev_hangup(struct mousedev *mousedev)
drivers/input/mousedev.c
804
spin_lock(&mousedev->client_lock);
drivers/input/mousedev.c
805
list_for_each_entry(client, &mousedev->client_list, node)
drivers/input/mousedev.c
807
spin_unlock(&mousedev->client_lock);
drivers/input/mousedev.c
809
wake_up_interruptible(&mousedev->wait);
drivers/input/mousedev.c
812
static void mousedev_cleanup(struct mousedev *mousedev)
drivers/input/mousedev.c
814
struct input_handle *handle = &mousedev->handle;
drivers/input/mousedev.c
816
mousedev_mark_dead(mousedev);
drivers/input/mousedev.c
817
mousedev_hangup(mousedev);
drivers/input/mousedev.c
820
if (mousedev->open)
drivers/input/mousedev.c
842
static struct mousedev *mousedev_create(struct input_dev *dev,
drivers/input/mousedev.c
846
struct mousedev *mousedev;
drivers/input/mousedev.c
856
mousedev = kzalloc_obj(struct mousedev);
drivers/input/mousedev.c
857
if (!mousedev) {
drivers/input/mousedev.c
862
INIT_LIST_HEAD(&mousedev->client_list);
drivers/input/mousedev.c
863
INIT_LIST_HEAD(&mousedev->mixdev_node);
drivers/input/mousedev.c
864
spin_lock_init(&mousedev->client_lock);
drivers/input/mousedev.c
865
mutex_init(&mousedev->mutex);
drivers/input/mousedev.c
866
lockdep_set_subclass(&mousedev->mutex,
drivers/input/mousedev.c
868
init_waitqueue_head(&mousedev->wait);
drivers/input/mousedev.c
871
dev_set_name(&mousedev->dev, "mice");
drivers/input/mousedev.c
873
mousedev->open_device = mixdev_open_devices;
drivers/input/mousedev.c
874
mousedev->close_device = mixdev_close_devices;
drivers/input/mousedev.c
880
dev_set_name(&mousedev->dev, "mouse%d", dev_no);
drivers/input/mousedev.c
882
mousedev->open_device = mousedev_open_device;
drivers/input/mousedev.c
883
mousedev->close_device = mousedev_close_device;
drivers/input/mousedev.c
886
mousedev->exist = true;
drivers/input/mousedev.c
887
mousedev->handle.dev = input_get_device(dev);
drivers/input/mousedev.c
888
mousedev->handle.name = dev_name(&mousedev->dev);
drivers/input/mousedev.c
889
mousedev->handle.handler = handler;
drivers/input/mousedev.c
890
mousedev->handle.private = mousedev;
drivers/input/mousedev.c
892
mousedev->dev.class = &input_class;
drivers/input/mousedev.c
894
mousedev->dev.parent = &dev->dev;
drivers/input/mousedev.c
895
mousedev->dev.devt = MKDEV(INPUT_MAJOR, minor);
drivers/input/mousedev.c
896
mousedev->dev.release = mousedev_free;
drivers/input/mousedev.c
897
device_initialize(&mousedev->dev);
drivers/input/mousedev.c
900
error = input_register_handle(&mousedev->handle);
drivers/input/mousedev.c
905
cdev_init(&mousedev->cdev, &mousedev_fops);
drivers/input/mousedev.c
907
error = cdev_device_add(&mousedev->cdev, &mousedev->dev);
drivers/input/mousedev.c
911
return mousedev;
drivers/input/mousedev.c
914
mousedev_cleanup(mousedev);
drivers/input/mousedev.c
916
input_unregister_handle(&mousedev->handle);
drivers/input/mousedev.c
918
put_device(&mousedev->dev);
drivers/input/mousedev.c
925
static void mousedev_destroy(struct mousedev *mousedev)
drivers/input/mousedev.c
927
cdev_device_del(&mousedev->cdev, &mousedev->dev);
drivers/input/mousedev.c
928
mousedev_cleanup(mousedev);
drivers/input/mousedev.c
929
input_free_minor(MINOR(mousedev->dev.devt));
drivers/input/mousedev.c
930
if (mousedev != mousedev_mix)
drivers/input/mousedev.c
931
input_unregister_handle(&mousedev->handle);
drivers/input/mousedev.c
932
put_device(&mousedev->dev);
drivers/input/mousedev.c
935
static int mixdev_add_device(struct mousedev *mousedev)
drivers/input/mousedev.c
944
retval = mousedev_open_device(mousedev);
drivers/input/mousedev.c
948
mousedev->opened_by_mixdev = true;
drivers/input/mousedev.c
951
get_device(&mousedev->dev);
drivers/input/mousedev.c
952
list_add_tail(&mousedev->mixdev_node, &mousedev_mix_list);
drivers/input/mousedev.c
959
static void mixdev_remove_device(struct mousedev *mousedev)
drivers/input/mousedev.c
96
struct mousedev *mousedev;
drivers/input/mousedev.c
963
if (mousedev->opened_by_mixdev) {
drivers/input/mousedev.c
964
mousedev->opened_by_mixdev = false;
drivers/input/mousedev.c
965
mousedev_close_device(mousedev);
drivers/input/mousedev.c
968
list_del_init(&mousedev->mixdev_node);
drivers/input/mousedev.c
971
put_device(&mousedev->dev);
drivers/input/mousedev.c
978
struct mousedev *mousedev;
drivers/input/mousedev.c
981
mousedev = mousedev_create(dev, handler, false);
drivers/input/mousedev.c
982
if (IS_ERR(mousedev))
drivers/input/mousedev.c
983
return PTR_ERR(mousedev);
drivers/input/mousedev.c
985
error = mixdev_add_device(mousedev);
drivers/input/mousedev.c
987
mousedev_destroy(mousedev);
drivers/input/mousedev.c
996
struct mousedev *mousedev = handle->private;
drivers/input/mousedev.c
998
mixdev_remove_device(mousedev);
drivers/input/mousedev.c
999
mousedev_destroy(mousedev);