Searched refs:joydev (Results 1 - 3 of 3) sorted by relevance

/linux-4.1.27/drivers/input/
H A Djoydev.c41 struct joydev { struct
70 struct joydev *joydev; member in struct:joydev_client
97 struct joydev *joydev = client->joydev; joydev_pass_event() local
106 if (client->startup == joydev->nabs + joydev->nkey) { joydev_pass_event()
121 struct joydev *joydev = handle->private; joydev_event() local
131 event.number = joydev->keymap[code - BTN_MISC]; joydev_event()
137 event.number = joydev->absmap[code]; joydev_event()
139 &joydev->corr[event.number]); joydev_event()
140 if (event.value == joydev->abs[event.number]) joydev_event()
142 joydev->abs[event.number] = event.value; joydev_event()
152 list_for_each_entry_rcu(client, &joydev->client_list, node) joydev_event()
156 wake_up_interruptible(&joydev->wait); joydev_event()
168 struct joydev *joydev = container_of(dev, struct joydev, dev); joydev_free() local
170 input_put_device(joydev->handle.dev); joydev_free()
171 kfree(joydev); joydev_free()
174 static void joydev_attach_client(struct joydev *joydev, joydev_attach_client() argument
177 spin_lock(&joydev->client_lock); joydev_attach_client()
178 list_add_tail_rcu(&client->node, &joydev->client_list); joydev_attach_client()
179 spin_unlock(&joydev->client_lock); joydev_attach_client()
182 static void joydev_detach_client(struct joydev *joydev, joydev_detach_client() argument
185 spin_lock(&joydev->client_lock); joydev_detach_client()
187 spin_unlock(&joydev->client_lock); joydev_detach_client()
191 static int joydev_open_device(struct joydev *joydev) joydev_open_device() argument
195 retval = mutex_lock_interruptible(&joydev->mutex); joydev_open_device()
199 if (!joydev->exist) joydev_open_device()
201 else if (!joydev->open++) { joydev_open_device()
202 retval = input_open_device(&joydev->handle); joydev_open_device()
204 joydev->open--; joydev_open_device()
207 mutex_unlock(&joydev->mutex); joydev_open_device()
211 static void joydev_close_device(struct joydev *joydev) joydev_close_device() argument
213 mutex_lock(&joydev->mutex); joydev_close_device()
215 if (joydev->exist && !--joydev->open) joydev_close_device()
216 input_close_device(&joydev->handle); joydev_close_device()
218 mutex_unlock(&joydev->mutex); joydev_close_device()
225 static void joydev_hangup(struct joydev *joydev) joydev_hangup() argument
229 spin_lock(&joydev->client_lock); joydev_hangup()
230 list_for_each_entry(client, &joydev->client_list, node) joydev_hangup()
232 spin_unlock(&joydev->client_lock); joydev_hangup()
234 wake_up_interruptible(&joydev->wait); joydev_hangup()
240 struct joydev *joydev = client->joydev; joydev_release() local
242 joydev_detach_client(joydev, client); joydev_release()
245 joydev_close_device(joydev); joydev_release()
252 struct joydev *joydev = joydev_open() local
253 container_of(inode->i_cdev, struct joydev, cdev); joydev_open()
262 client->joydev = joydev; joydev_open()
263 joydev_attach_client(joydev, client); joydev_open()
265 error = joydev_open_device(joydev); joydev_open()
275 joydev_detach_client(joydev, client); joydev_open()
284 struct joydev *joydev = client->joydev; joydev_generate_startup_event() local
289 have_event = client->startup < joydev->nabs + joydev->nkey; joydev_generate_startup_event()
294 if (client->startup < joydev->nkey) { joydev_generate_startup_event()
297 event->value = !!test_bit(joydev->keypam[event->number], joydev_generate_startup_event()
301 event->number = client->startup - joydev->nkey; joydev_generate_startup_event()
302 event->value = joydev->abs[event->number]; joydev_generate_startup_event()
337 struct joydev *joydev = client->joydev; joydev_0x_read() local
346 for (data.buttons = i = 0; i < 32 && i < joydev->nkey; i++) joydev_0x_read()
348 test_bit(joydev->keypam[i], input->key) ? (1 << i) : 0; joydev_0x_read()
349 data.x = (joydev->abs[0] / 256 + 128) >> joydev->glue.JS_CORR.x; joydev_0x_read()
350 data.y = (joydev->abs[1] / 256 + 128) >> joydev->glue.JS_CORR.y; joydev_0x_read()
370 struct joydev *joydev = client->joydev; joydev_data_pending() local
372 return client->startup < joydev->nabs + joydev->nkey || joydev_data_pending()
380 struct joydev *joydev = client->joydev; joydev_read() local
381 struct input_dev *input = joydev->handle.dev; joydev_read()
385 if (!joydev->exist) joydev_read()
397 retval = wait_event_interruptible(joydev->wait, joydev_read()
398 !joydev->exist || joydev_data_pending(client)); joydev_read()
402 if (!joydev->exist) joydev_read()
430 struct joydev *joydev = client->joydev; joydev_poll() local
432 poll_wait(file, &joydev->wait, wait); joydev_poll()
434 (joydev->exist ? 0 : (POLLHUP | POLLERR)); joydev_poll()
437 static int joydev_handle_JSIOCSAXMAP(struct joydev *joydev, joydev_handle_JSIOCSAXMAP() argument
444 len = min(len, sizeof(joydev->abspam)); joydev_handle_JSIOCSAXMAP()
456 for (i = 0; i < joydev->nabs; i++) { joydev_handle_JSIOCSAXMAP()
463 memcpy(joydev->abspam, abspam, len); joydev_handle_JSIOCSAXMAP()
465 for (i = 0; i < joydev->nabs; i++) joydev_handle_JSIOCSAXMAP()
466 joydev->absmap[joydev->abspam[i]] = i; joydev_handle_JSIOCSAXMAP()
473 static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev, joydev_handle_JSIOCSBTNMAP() argument
480 len = min(len, sizeof(joydev->keypam)); joydev_handle_JSIOCSBTNMAP()
492 for (i = 0; i < joydev->nkey; i++) { joydev_handle_JSIOCSBTNMAP()
499 memcpy(joydev->keypam, keypam, len); joydev_handle_JSIOCSBTNMAP()
501 for (i = 0; i < joydev->nkey; i++) joydev_handle_JSIOCSBTNMAP()
502 joydev->keymap[keypam[i] - BTN_MISC] = i; joydev_handle_JSIOCSBTNMAP()
510 static int joydev_ioctl_common(struct joydev *joydev, joydev_ioctl_common() argument
513 struct input_dev *dev = joydev->handle.dev; joydev_ioctl_common()
522 return copy_from_user(&joydev->glue.JS_CORR, argp, joydev_ioctl_common()
523 sizeof(joydev->glue.JS_CORR)) ? -EFAULT : 0; joydev_ioctl_common()
526 return copy_to_user(argp, &joydev->glue.JS_CORR, joydev_ioctl_common()
527 sizeof(joydev->glue.JS_CORR)) ? -EFAULT : 0; joydev_ioctl_common()
530 return get_user(joydev->glue.JS_TIMEOUT, (s32 __user *) argp); joydev_ioctl_common()
533 return put_user(joydev->glue.JS_TIMEOUT, (s32 __user *) argp); joydev_ioctl_common()
539 return put_user(joydev->nabs, (__u8 __user *) argp); joydev_ioctl_common()
542 return put_user(joydev->nkey, (__u8 __user *) argp); joydev_ioctl_common()
545 if (copy_from_user(joydev->corr, argp, joydev_ioctl_common()
546 sizeof(joydev->corr[0]) * joydev->nabs)) joydev_ioctl_common()
549 for (i = 0; i < joydev->nabs; i++) { joydev_ioctl_common()
550 int val = input_abs_get_val(dev, joydev->abspam[i]); joydev_ioctl_common()
551 joydev->abs[i] = joydev_correct(val, &joydev->corr[i]); joydev_ioctl_common()
556 return copy_to_user(argp, joydev->corr, joydev_ioctl_common()
557 sizeof(joydev->corr[0]) * joydev->nabs) ? -EFAULT : 0; joydev_ioctl_common()
569 return joydev_handle_JSIOCSAXMAP(joydev, argp, _IOC_SIZE(cmd)); joydev_ioctl_common()
572 len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->abspam)); joydev_ioctl_common()
573 return copy_to_user(argp, joydev->abspam, len) ? -EFAULT : len; joydev_ioctl_common()
576 return joydev_handle_JSIOCSBTNMAP(joydev, argp, _IOC_SIZE(cmd)); joydev_ioctl_common()
579 len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->keypam)); joydev_ioctl_common()
580 return copy_to_user(argp, joydev->keypam, len) ? -EFAULT : len; joydev_ioctl_common()
599 struct joydev *joydev = client->joydev; joydev_compat_ioctl() local
605 retval = mutex_lock_interruptible(&joydev->mutex); joydev_compat_ioctl()
609 if (!joydev->exist) { joydev_compat_ioctl()
619 joydev->glue.JS_TIMELIMIT = tmp32; joydev_compat_ioctl()
623 tmp32 = joydev->glue.JS_TIMELIMIT; joydev_compat_ioctl()
631 joydev->glue.JS_TIMEOUT = ds32.JS_TIMEOUT; joydev_compat_ioctl()
632 joydev->glue.BUSY = ds32.BUSY; joydev_compat_ioctl()
633 joydev->glue.JS_EXPIRETIME = ds32.JS_EXPIRETIME; joydev_compat_ioctl()
634 joydev->glue.JS_TIMELIMIT = ds32.JS_TIMELIMIT; joydev_compat_ioctl()
635 joydev->glue.JS_SAVE = ds32.JS_SAVE; joydev_compat_ioctl()
636 joydev->glue.JS_CORR = ds32.JS_CORR; joydev_compat_ioctl()
641 ds32.JS_TIMEOUT = joydev->glue.JS_TIMEOUT; joydev_compat_ioctl()
642 ds32.BUSY = joydev->glue.BUSY; joydev_compat_ioctl()
643 ds32.JS_EXPIRETIME = joydev->glue.JS_EXPIRETIME; joydev_compat_ioctl()
644 ds32.JS_TIMELIMIT = joydev->glue.JS_TIMELIMIT; joydev_compat_ioctl()
645 ds32.JS_SAVE = joydev->glue.JS_SAVE; joydev_compat_ioctl()
646 ds32.JS_CORR = joydev->glue.JS_CORR; joydev_compat_ioctl()
652 retval = joydev_ioctl_common(joydev, cmd, argp); joydev_compat_ioctl()
657 mutex_unlock(&joydev->mutex); joydev_compat_ioctl()
666 struct joydev *joydev = client->joydev; joydev_ioctl() local
670 retval = mutex_lock_interruptible(&joydev->mutex); joydev_ioctl()
674 if (!joydev->exist) { joydev_ioctl()
682 retval = get_user(joydev->glue.JS_TIMELIMIT, joydev_ioctl()
687 retval = put_user(joydev->glue.JS_TIMELIMIT, joydev_ioctl()
692 retval = copy_from_user(&joydev->glue, argp, joydev_ioctl()
693 sizeof(joydev->glue)) ? -EFAULT : 0; joydev_ioctl()
697 retval = copy_to_user(argp, &joydev->glue, joydev_ioctl()
698 sizeof(joydev->glue)) ? -EFAULT : 0; joydev_ioctl()
702 retval = joydev_ioctl_common(joydev, cmd, argp); joydev_ioctl()
706 mutex_unlock(&joydev->mutex); joydev_ioctl()
729 static void joydev_mark_dead(struct joydev *joydev) joydev_mark_dead() argument
731 mutex_lock(&joydev->mutex); joydev_mark_dead()
732 joydev->exist = false; joydev_mark_dead()
733 mutex_unlock(&joydev->mutex); joydev_mark_dead()
736 static void joydev_cleanup(struct joydev *joydev) joydev_cleanup() argument
738 struct input_handle *handle = &joydev->handle; joydev_cleanup()
740 joydev_mark_dead(joydev); joydev_cleanup()
741 joydev_hangup(joydev); joydev_cleanup()
743 cdev_del(&joydev->cdev); joydev_cleanup()
745 /* joydev is marked dead so no one else accesses joydev->open */ joydev_cleanup()
746 if (joydev->open) joydev_cleanup()
762 * primary button events. This clashes with what joydev joydev_dev_is_absolute_mouse()
828 struct joydev *joydev; joydev_connect() local
839 joydev = kzalloc(sizeof(struct joydev), GFP_KERNEL); joydev_connect()
840 if (!joydev) { joydev_connect()
845 INIT_LIST_HEAD(&joydev->client_list); joydev_connect()
846 spin_lock_init(&joydev->client_lock); joydev_connect()
847 mutex_init(&joydev->mutex); joydev_connect()
848 init_waitqueue_head(&joydev->wait); joydev_connect()
849 joydev->exist = true; joydev_connect()
855 dev_set_name(&joydev->dev, "js%d", dev_no); joydev_connect()
857 joydev->handle.dev = input_get_device(dev); joydev_connect()
858 joydev->handle.name = dev_name(&joydev->dev); joydev_connect()
859 joydev->handle.handler = handler; joydev_connect()
860 joydev->handle.private = joydev; joydev_connect()
864 joydev->absmap[i] = joydev->nabs; joydev_connect()
865 joydev->abspam[joydev->nabs] = i; joydev_connect()
866 joydev->nabs++; joydev_connect()
871 joydev->keymap[i] = joydev->nkey; joydev_connect()
872 joydev->keypam[joydev->nkey] = i + BTN_MISC; joydev_connect()
873 joydev->nkey++; joydev_connect()
878 joydev->keymap[i] = joydev->nkey; joydev_connect()
879 joydev->keypam[joydev->nkey] = i + BTN_MISC; joydev_connect()
880 joydev->nkey++; joydev_connect()
883 for (i = 0; i < joydev->nabs; i++) { joydev_connect()
884 j = joydev->abspam[i]; joydev_connect()
886 joydev->corr[i].type = JS_CORR_NONE; joydev_connect()
887 joydev->abs[i] = input_abs_get_val(dev, j); joydev_connect()
890 joydev->corr[i].type = JS_CORR_BROKEN; joydev_connect()
891 joydev->corr[i].prec = input_abs_get_fuzz(dev, j); joydev_connect()
894 joydev->corr[i].coef[0] = t - input_abs_get_flat(dev, j); joydev_connect()
895 joydev->corr[i].coef[1] = t + input_abs_get_flat(dev, j); joydev_connect()
900 joydev->corr[i].coef[2] = (1 << 29) / t; joydev_connect()
901 joydev->corr[i].coef[3] = (1 << 29) / t; joydev_connect()
903 joydev->abs[i] = joydev_connect()
905 joydev->corr + i); joydev_connect()
909 joydev->dev.devt = MKDEV(INPUT_MAJOR, minor); joydev_connect()
910 joydev->dev.class = &input_class; joydev_connect()
911 joydev->dev.parent = &dev->dev; joydev_connect()
912 joydev->dev.release = joydev_free; joydev_connect()
913 device_initialize(&joydev->dev); joydev_connect()
915 error = input_register_handle(&joydev->handle); joydev_connect()
919 cdev_init(&joydev->cdev, &joydev_fops); joydev_connect()
920 joydev->cdev.kobj.parent = &joydev->dev.kobj; joydev_connect()
921 error = cdev_add(&joydev->cdev, joydev->dev.devt, 1); joydev_connect()
925 error = device_add(&joydev->dev); joydev_connect()
932 joydev_cleanup(joydev); joydev_connect()
934 input_unregister_handle(&joydev->handle); joydev_connect()
936 put_device(&joydev->dev); joydev_connect()
944 struct joydev *joydev = handle->private; joydev_disconnect() local
946 device_del(&joydev->dev); joydev_disconnect()
947 joydev_cleanup(joydev); joydev_disconnect()
948 input_free_minor(MINOR(joydev->dev.devt)); joydev_disconnect()
950 put_device(&joydev->dev); joydev_disconnect()
1002 .name = "joydev",
H A DMakefile16 obj-$(CONFIG_INPUT_JOYDEV) += joydev.o
/linux-4.1.27/include/uapi/linux/
H A Dinput.h56 * joydev interface and reported as 0 instead.

Completed in 97 milliseconds