Searched refs:mousedev (Results 1 - 4 of 4) sorted by relevance

/linux-4.1.27/drivers/input/
H A Dmousedev.c60 struct mousedev { struct
80 int (*open_device)(struct mousedev *mousedev);
81 void (*close_device)(struct mousedev *mousedev);
98 struct mousedev *mousedev; member in struct:mousedev_client
118 static struct mousedev *mousedev_mix;
121 #define fx(i) (mousedev->old_x[(mousedev->pkt_count - (i)) & 03])
122 #define fy(i) (mousedev->old_y[(mousedev->pkt_count - (i)) & 03])
125 struct mousedev *mousedev, mousedev_touchpad_event()
136 if (mousedev->touch && mousedev->pkt_count >= 2) { mousedev_touchpad_event()
143 tmp += mousedev->frac_dx; mousedev_touchpad_event()
144 mousedev->packet.dx = tmp / FRACTION_DENOM; mousedev_touchpad_event()
145 mousedev->frac_dx = mousedev_touchpad_event()
146 tmp - mousedev->packet.dx * FRACTION_DENOM; mousedev_touchpad_event()
152 if (mousedev->touch && mousedev->pkt_count >= 2) { mousedev_touchpad_event()
160 tmp += mousedev->frac_dy; mousedev_touchpad_event()
161 mousedev->packet.dy = tmp / FRACTION_DENOM; mousedev_touchpad_event()
162 mousedev->frac_dy = tmp - mousedev_touchpad_event()
163 mousedev->packet.dy * FRACTION_DENOM; mousedev_touchpad_event()
169 static void mousedev_abs_event(struct input_dev *dev, struct mousedev *mousedev, mousedev_abs_event() argument
186 mousedev->packet.x = ((value - min) * xres) / size; mousedev_abs_event()
187 mousedev->packet.abs_event = 1; mousedev_abs_event()
200 mousedev->packet.y = yres - ((value - min) * yres) / size; mousedev_abs_event()
201 mousedev->packet.abs_event = 1; mousedev_abs_event()
206 static void mousedev_rel_event(struct mousedev *mousedev, mousedev_rel_event() argument
211 mousedev->packet.dx += value; mousedev_rel_event()
215 mousedev->packet.dy -= value; mousedev_rel_event()
219 mousedev->packet.dz -= value; mousedev_rel_event()
224 static void mousedev_key_event(struct mousedev *mousedev, mousedev_key_event() argument
255 set_bit(index, &mousedev->packet.buttons); mousedev_key_event()
258 clear_bit(index, &mousedev->packet.buttons); mousedev_key_event()
263 static void mousedev_notify_readers(struct mousedev *mousedev, mousedev_notify_readers() argument
272 list_for_each_entry_rcu(client, &mousedev->client_list, node) { mousedev_notify_readers()
278 if (client->ready && p->buttons != mousedev->packet.buttons) { mousedev_notify_readers()
303 p->buttons = mousedev->packet.buttons; mousedev_notify_readers()
319 wake_up_interruptible(&mousedev->wait); mousedev_notify_readers()
322 static void mousedev_touchpad_touch(struct mousedev *mousedev, int value) mousedev_touchpad_touch() argument
325 if (mousedev->touch && mousedev_touchpad_touch()
327 mousedev->touch + msecs_to_jiffies(tap_time))) { mousedev_touchpad_touch()
333 set_bit(0, &mousedev->packet.buttons); mousedev_touchpad_touch()
335 mousedev_notify_readers(mousedev, &mousedev_mix->packet); mousedev_touchpad_touch()
338 clear_bit(0, &mousedev->packet.buttons); mousedev_touchpad_touch()
341 mousedev->touch = mousedev->pkt_count = 0; mousedev_touchpad_touch()
342 mousedev->frac_dx = 0; mousedev_touchpad_touch()
343 mousedev->frac_dy = 0; mousedev_touchpad_touch()
345 } else if (!mousedev->touch) mousedev_touchpad_touch()
346 mousedev->touch = jiffies; mousedev_touchpad_touch()
352 struct mousedev *mousedev = handle->private; mousedev_event() local
363 mousedev, code, value); mousedev_event()
365 mousedev_abs_event(handle->dev, mousedev, code, value); mousedev_event()
370 mousedev_rel_event(mousedev, code, value); mousedev_event()
377 mousedev_touchpad_touch(mousedev, value); mousedev_event()
379 mousedev_key_event(mousedev, code, value); mousedev_event()
385 if (mousedev->touch) { mousedev_event()
386 mousedev->pkt_count++; mousedev_event()
396 mousedev_notify_readers(mousedev, &mousedev->packet); mousedev_event()
397 mousedev_notify_readers(mousedev_mix, &mousedev->packet); mousedev_event()
399 mousedev->packet.dx = mousedev->packet.dy = mousedev_event()
400 mousedev->packet.dz = 0; mousedev_event()
401 mousedev->packet.abs_event = 0; mousedev_event()
416 struct mousedev *mousedev = container_of(dev, struct mousedev, dev); mousedev_free() local
418 input_put_device(mousedev->handle.dev); mousedev_free()
419 kfree(mousedev); mousedev_free()
422 static int mousedev_open_device(struct mousedev *mousedev) mousedev_open_device() argument
426 retval = mutex_lock_interruptible(&mousedev->mutex); mousedev_open_device()
430 if (!mousedev->exist) mousedev_open_device()
432 else if (!mousedev->open++) { mousedev_open_device()
433 retval = input_open_device(&mousedev->handle); mousedev_open_device()
435 mousedev->open--; mousedev_open_device()
438 mutex_unlock(&mousedev->mutex); mousedev_open_device()
442 static void mousedev_close_device(struct mousedev *mousedev) mousedev_close_device() argument
444 mutex_lock(&mousedev->mutex); mousedev_close_device()
446 if (mousedev->exist && !--mousedev->open) mousedev_close_device()
447 input_close_device(&mousedev->handle); mousedev_close_device()
449 mutex_unlock(&mousedev->mutex); mousedev_close_device()
457 static int mixdev_open_devices(struct mousedev *mixdev) mixdev_open_devices()
466 struct mousedev *mousedev; mixdev_open_devices() local
468 list_for_each_entry(mousedev, &mousedev_mix_list, mixdev_node) { mixdev_open_devices()
469 if (!mousedev->opened_by_mixdev) { mixdev_open_devices()
470 if (mousedev_open_device(mousedev)) mixdev_open_devices()
473 mousedev->opened_by_mixdev = true; mixdev_open_devices()
487 static void mixdev_close_devices(struct mousedev *mixdev) mixdev_close_devices()
492 struct mousedev *mousedev; mixdev_close_devices() local
494 list_for_each_entry(mousedev, &mousedev_mix_list, mixdev_node) { mixdev_close_devices()
495 if (mousedev->opened_by_mixdev) { mixdev_close_devices()
496 mousedev->opened_by_mixdev = false; mixdev_close_devices()
497 mousedev_close_device(mousedev); mixdev_close_devices()
506 static void mousedev_attach_client(struct mousedev *mousedev, mousedev_attach_client() argument
509 spin_lock(&mousedev->client_lock); mousedev_attach_client()
510 list_add_tail_rcu(&client->node, &mousedev->client_list); mousedev_attach_client()
511 spin_unlock(&mousedev->client_lock); mousedev_attach_client()
514 static void mousedev_detach_client(struct mousedev *mousedev, mousedev_detach_client() argument
517 spin_lock(&mousedev->client_lock); mousedev_detach_client()
519 spin_unlock(&mousedev->client_lock); mousedev_detach_client()
526 struct mousedev *mousedev = client->mousedev; mousedev_release() local
528 mousedev_detach_client(mousedev, client); mousedev_release()
531 mousedev->close_device(mousedev); mousedev_release()
539 struct mousedev *mousedev; mousedev_open() local
544 mousedev = mousedev_mix; mousedev_open()
547 mousedev = container_of(inode->i_cdev, struct mousedev, cdev); mousedev_open()
556 client->mousedev = mousedev; mousedev_open()
557 mousedev_attach_client(mousedev, client); mousedev_open()
559 error = mousedev->open_device(mousedev); mousedev_open()
569 mousedev_detach_client(mousedev, client); mousedev_open()
707 wake_up_interruptible(&client->mousedev->wait); mousedev_write()
716 struct mousedev *mousedev = client->mousedev; mousedev_read() local
720 if (!client->ready && !client->buffer && mousedev->exist && mousedev_read()
724 retval = wait_event_interruptible(mousedev->wait, mousedev_read()
725 !mousedev->exist || client->ready || client->buffer); mousedev_read()
729 if (!mousedev->exist) mousedev_read()
757 struct mousedev *mousedev = client->mousedev; mousedev_poll() local
760 poll_wait(file, &mousedev->wait, wait); mousedev_poll()
762 mask = mousedev->exist ? POLLOUT | POLLWRNORM : POLLHUP | POLLERR; mousedev_poll()
785 static void mousedev_mark_dead(struct mousedev *mousedev) mousedev_mark_dead() argument
787 mutex_lock(&mousedev->mutex); mousedev_mark_dead()
788 mousedev->exist = false; mousedev_mark_dead()
789 mutex_unlock(&mousedev->mutex); mousedev_mark_dead()
796 static void mousedev_hangup(struct mousedev *mousedev) mousedev_hangup() argument
800 spin_lock(&mousedev->client_lock); mousedev_hangup()
801 list_for_each_entry(client, &mousedev->client_list, node) mousedev_hangup()
803 spin_unlock(&mousedev->client_lock); mousedev_hangup()
805 wake_up_interruptible(&mousedev->wait); mousedev_hangup()
808 static void mousedev_cleanup(struct mousedev *mousedev) mousedev_cleanup() argument
810 struct input_handle *handle = &mousedev->handle; mousedev_cleanup()
812 mousedev_mark_dead(mousedev); mousedev_cleanup()
813 mousedev_hangup(mousedev); mousedev_cleanup()
815 cdev_del(&mousedev->cdev); mousedev_cleanup()
817 /* mousedev is marked dead so no one else accesses mousedev->open */ mousedev_cleanup()
818 if (mousedev->open) mousedev_cleanup()
840 static struct mousedev *mousedev_create(struct input_dev *dev, mousedev_create()
844 struct mousedev *mousedev; mousedev_create() local
854 mousedev = kzalloc(sizeof(struct mousedev), GFP_KERNEL); mousedev_create()
855 if (!mousedev) { mousedev_create()
860 INIT_LIST_HEAD(&mousedev->client_list); mousedev_create()
861 INIT_LIST_HEAD(&mousedev->mixdev_node); mousedev_create()
862 spin_lock_init(&mousedev->client_lock); mousedev_create()
863 mutex_init(&mousedev->mutex); mousedev_create()
864 lockdep_set_subclass(&mousedev->mutex, mousedev_create()
866 init_waitqueue_head(&mousedev->wait); mousedev_create()
869 dev_set_name(&mousedev->dev, "mice"); mousedev_create()
871 mousedev->open_device = mixdev_open_devices; mousedev_create()
872 mousedev->close_device = mixdev_close_devices; mousedev_create()
878 dev_set_name(&mousedev->dev, "mouse%d", dev_no); mousedev_create()
880 mousedev->open_device = mousedev_open_device; mousedev_create()
881 mousedev->close_device = mousedev_close_device; mousedev_create()
884 mousedev->exist = true; mousedev_create()
885 mousedev->handle.dev = input_get_device(dev); mousedev_create()
886 mousedev->handle.name = dev_name(&mousedev->dev); mousedev_create()
887 mousedev->handle.handler = handler; mousedev_create()
888 mousedev->handle.private = mousedev; mousedev_create()
890 mousedev->dev.class = &input_class; mousedev_create()
892 mousedev->dev.parent = &dev->dev; mousedev_create()
893 mousedev->dev.devt = MKDEV(INPUT_MAJOR, minor); mousedev_create()
894 mousedev->dev.release = mousedev_free; mousedev_create()
895 device_initialize(&mousedev->dev); mousedev_create()
898 error = input_register_handle(&mousedev->handle); mousedev_create()
903 cdev_init(&mousedev->cdev, &mousedev_fops); mousedev_create()
904 mousedev->cdev.kobj.parent = &mousedev->dev.kobj; mousedev_create()
905 error = cdev_add(&mousedev->cdev, mousedev->dev.devt, 1); mousedev_create()
909 error = device_add(&mousedev->dev); mousedev_create()
913 return mousedev; mousedev_create()
916 mousedev_cleanup(mousedev); mousedev_create()
919 input_unregister_handle(&mousedev->handle); mousedev_create()
921 put_device(&mousedev->dev); mousedev_create()
928 static void mousedev_destroy(struct mousedev *mousedev) mousedev_destroy() argument
930 device_del(&mousedev->dev); mousedev_destroy()
931 mousedev_cleanup(mousedev); mousedev_destroy()
932 input_free_minor(MINOR(mousedev->dev.devt)); mousedev_destroy()
933 if (mousedev != mousedev_mix) mousedev_destroy()
934 input_unregister_handle(&mousedev->handle); mousedev_destroy()
935 put_device(&mousedev->dev); mousedev_destroy()
938 static int mixdev_add_device(struct mousedev *mousedev) mixdev_add_device() argument
947 retval = mousedev_open_device(mousedev); mixdev_add_device()
951 mousedev->opened_by_mixdev = true; mixdev_add_device()
954 get_device(&mousedev->dev); mixdev_add_device()
955 list_add_tail(&mousedev->mixdev_node, &mousedev_mix_list); mixdev_add_device()
962 static void mixdev_remove_device(struct mousedev *mousedev) mixdev_remove_device() argument
966 if (mousedev->opened_by_mixdev) { mixdev_remove_device()
967 mousedev->opened_by_mixdev = false; mixdev_remove_device()
968 mousedev_close_device(mousedev); mixdev_remove_device()
971 list_del_init(&mousedev->mixdev_node); mixdev_remove_device()
974 put_device(&mousedev->dev); mixdev_remove_device()
981 struct mousedev *mousedev; mousedev_connect() local
984 mousedev = mousedev_create(dev, handler, false); mousedev_connect()
985 if (IS_ERR(mousedev)) mousedev_connect()
986 return PTR_ERR(mousedev); mousedev_connect()
988 error = mixdev_add_device(mousedev); mousedev_connect()
990 mousedev_destroy(mousedev); mousedev_connect()
999 struct mousedev *mousedev = handle->private; mousedev_disconnect() local
1001 mixdev_remove_device(mousedev); mousedev_disconnect()
1002 mousedev_destroy(mousedev); mousedev_disconnect()
1062 .name = "mousedev",
124 mousedev_touchpad_event(struct input_dev *dev, struct mousedev *mousedev, unsigned int code, int value) mousedev_touchpad_event() argument
H A DMakefile15 obj-$(CONFIG_INPUT_MOUSEDEV) += mousedev.o
/linux-4.1.27/drivers/input/mouse/
H A Dsynaptics_usb.c159 * BTN_TOUCH has to be first as mousedev relies on it when doing synusb_report_touchpad()
H A Dsynaptics.c1054 * BTN_TOUCH has to be first as mousedev relies on it when doing synaptics_process_packet()

Completed in 157 milliseconds