Symbol: joydev
drivers/input/joydev.c
100
if (client->startup == joydev->nabs + joydev->nkey) {
drivers/input/joydev.c
1000
error = cdev_device_add(&joydev->cdev, &joydev->dev);
drivers/input/joydev.c
1007
joydev_cleanup(joydev);
drivers/input/joydev.c
1008
input_unregister_handle(&joydev->handle);
drivers/input/joydev.c
1010
put_device(&joydev->dev);
drivers/input/joydev.c
1018
struct joydev *joydev = handle->private;
drivers/input/joydev.c
1020
cdev_device_del(&joydev->cdev, &joydev->dev);
drivers/input/joydev.c
1021
joydev_cleanup(joydev);
drivers/input/joydev.c
1022
input_free_minor(MINOR(joydev->dev.devt));
drivers/input/joydev.c
1024
put_device(&joydev->dev);
drivers/input/joydev.c
115
struct joydev *joydev = handle->private;
drivers/input/joydev.c
125
event.number = joydev->keymap[code - BTN_MISC];
drivers/input/joydev.c
131
event.number = joydev->absmap[code];
drivers/input/joydev.c
133
&joydev->corr[event.number]);
drivers/input/joydev.c
134
if (event.value == joydev->abs[event.number])
drivers/input/joydev.c
136
joydev->abs[event.number] = event.value;
drivers/input/joydev.c
146
list_for_each_entry_rcu(client, &joydev->client_list, node)
drivers/input/joydev.c
150
wake_up_interruptible(&joydev->wait);
drivers/input/joydev.c
162
struct joydev *joydev = container_of(dev, struct joydev, dev);
drivers/input/joydev.c
164
input_put_device(joydev->handle.dev);
drivers/input/joydev.c
165
kfree(joydev);
drivers/input/joydev.c
168
static void joydev_attach_client(struct joydev *joydev,
drivers/input/joydev.c
171
spin_lock(&joydev->client_lock);
drivers/input/joydev.c
172
list_add_tail_rcu(&client->node, &joydev->client_list);
drivers/input/joydev.c
173
spin_unlock(&joydev->client_lock);
drivers/input/joydev.c
176
static void joydev_detach_client(struct joydev *joydev,
drivers/input/joydev.c
179
spin_lock(&joydev->client_lock);
drivers/input/joydev.c
181
spin_unlock(&joydev->client_lock);
drivers/input/joydev.c
185
static void joydev_refresh_state(struct joydev *joydev)
drivers/input/joydev.c
187
struct input_dev *dev = joydev->handle.dev;
drivers/input/joydev.c
190
for (i = 0; i < joydev->nabs; i++) {
drivers/input/joydev.c
191
val = input_abs_get_val(dev, joydev->abspam[i]);
drivers/input/joydev.c
192
joydev->abs[i] = joydev_correct(val, &joydev->corr[i]);
drivers/input/joydev.c
196
static int joydev_open_device(struct joydev *joydev)
drivers/input/joydev.c
200
retval = mutex_lock_interruptible(&joydev->mutex);
drivers/input/joydev.c
204
if (!joydev->exist)
drivers/input/joydev.c
206
else if (!joydev->open++) {
drivers/input/joydev.c
207
retval = input_open_device(&joydev->handle);
drivers/input/joydev.c
209
joydev->open--;
drivers/input/joydev.c
211
joydev_refresh_state(joydev);
drivers/input/joydev.c
214
mutex_unlock(&joydev->mutex);
drivers/input/joydev.c
218
static void joydev_close_device(struct joydev *joydev)
drivers/input/joydev.c
220
mutex_lock(&joydev->mutex);
drivers/input/joydev.c
222
if (joydev->exist && !--joydev->open)
drivers/input/joydev.c
223
input_close_device(&joydev->handle);
drivers/input/joydev.c
225
mutex_unlock(&joydev->mutex);
drivers/input/joydev.c
232
static void joydev_hangup(struct joydev *joydev)
drivers/input/joydev.c
236
spin_lock(&joydev->client_lock);
drivers/input/joydev.c
237
list_for_each_entry(client, &joydev->client_list, node)
drivers/input/joydev.c
239
spin_unlock(&joydev->client_lock);
drivers/input/joydev.c
241
wake_up_interruptible(&joydev->wait);
drivers/input/joydev.c
247
struct joydev *joydev = client->joydev;
drivers/input/joydev.c
249
joydev_detach_client(joydev, client);
drivers/input/joydev.c
252
joydev_close_device(joydev);
drivers/input/joydev.c
259
struct joydev *joydev =
drivers/input/joydev.c
260
container_of(inode->i_cdev, struct joydev, cdev);
drivers/input/joydev.c
269
client->joydev = joydev;
drivers/input/joydev.c
270
joydev_attach_client(joydev, client);
drivers/input/joydev.c
272
error = joydev_open_device(joydev);
drivers/input/joydev.c
282
joydev_detach_client(joydev, client);
drivers/input/joydev.c
291
struct joydev *joydev = client->joydev;
drivers/input/joydev.c
296
have_event = client->startup < joydev->nabs + joydev->nkey;
drivers/input/joydev.c
301
if (client->startup < joydev->nkey) {
drivers/input/joydev.c
304
event->value = !!test_bit(joydev->keypam[event->number],
drivers/input/joydev.c
308
event->number = client->startup - joydev->nkey;
drivers/input/joydev.c
309
event->value = joydev->abs[event->number];
drivers/input/joydev.c
344
struct joydev *joydev = client->joydev;
drivers/input/joydev.c
353
for (data.buttons = i = 0; i < 32 && i < joydev->nkey; i++)
drivers/input/joydev.c
355
test_bit(joydev->keypam[i], input->key) ? (1 << i) : 0;
drivers/input/joydev.c
356
data.x = (joydev->abs[0] / 256 + 128) >> joydev->glue.JS_CORR.x;
drivers/input/joydev.c
357
data.y = (joydev->abs[1] / 256 + 128) >> joydev->glue.JS_CORR.y;
drivers/input/joydev.c
377
struct joydev *joydev = client->joydev;
drivers/input/joydev.c
379
return client->startup < joydev->nabs + joydev->nkey ||
drivers/input/joydev.c
387
struct joydev *joydev = client->joydev;
drivers/input/joydev.c
388
struct input_dev *input = joydev->handle.dev;
drivers/input/joydev.c
392
if (!joydev->exist)
drivers/input/joydev.c
404
retval = wait_event_interruptible(joydev->wait,
drivers/input/joydev.c
405
!joydev->exist || joydev_data_pending(client));
drivers/input/joydev.c
409
if (!joydev->exist)
drivers/input/joydev.c
437
struct joydev *joydev = client->joydev;
drivers/input/joydev.c
439
poll_wait(file, &joydev->wait, wait);
drivers/input/joydev.c
441
(joydev->exist ? 0 : (EPOLLHUP | EPOLLERR));
drivers/input/joydev.c
444
static int joydev_handle_JSIOCSAXMAP(struct joydev *joydev,
drivers/input/joydev.c
451
len = min(len, sizeof(joydev->abspam));
drivers/input/joydev.c
458
for (i = 0; i < len && i < joydev->nabs; i++) {
drivers/input/joydev.c
465
memcpy(joydev->abspam, abspam, len);
drivers/input/joydev.c
467
for (i = 0; i < joydev->nabs; i++)
drivers/input/joydev.c
468
joydev->absmap[joydev->abspam[i]] = i;
drivers/input/joydev.c
475
static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev,
drivers/input/joydev.c
485
len = min(len, sizeof(joydev->keypam));
drivers/input/joydev.c
492
for (i = 0; i < (len / 2) && i < joydev->nkey; i++) {
drivers/input/joydev.c
499
memcpy(joydev->keypam, keypam, len);
drivers/input/joydev.c
501
for (i = 0; i < joydev->nkey; i++)
drivers/input/joydev.c
502
joydev->keymap[joydev->keypam[i] - BTN_MISC] = i;
drivers/input/joydev.c
510
static int joydev_ioctl_common(struct joydev *joydev,
drivers/input/joydev.c
513
struct input_dev *dev = joydev->handle.dev;
drivers/input/joydev.c
522
return copy_from_user(&joydev->glue.JS_CORR, argp,
drivers/input/joydev.c
523
sizeof(joydev->glue.JS_CORR)) ? -EFAULT : 0;
drivers/input/joydev.c
526
return copy_to_user(argp, &joydev->glue.JS_CORR,
drivers/input/joydev.c
527
sizeof(joydev->glue.JS_CORR)) ? -EFAULT : 0;
drivers/input/joydev.c
530
return get_user(joydev->glue.JS_TIMEOUT, (s32 __user *) argp);
drivers/input/joydev.c
533
return put_user(joydev->glue.JS_TIMEOUT, (s32 __user *) argp);
drivers/input/joydev.c
539
return put_user(joydev->nabs, (__u8 __user *) argp);
drivers/input/joydev.c
542
return put_user(joydev->nkey, (__u8 __user *) argp);
drivers/input/joydev.c
545
if (copy_from_user(joydev->corr, argp,
drivers/input/joydev.c
546
sizeof(joydev->corr[0]) * joydev->nabs))
drivers/input/joydev.c
549
for (i = 0; i < joydev->nabs; i++) {
drivers/input/joydev.c
550
int val = input_abs_get_val(dev, joydev->abspam[i]);
drivers/input/joydev.c
551
joydev->abs[i] = joydev_correct(val, &joydev->corr[i]);
drivers/input/joydev.c
556
return copy_to_user(argp, joydev->corr,
drivers/input/joydev.c
557
sizeof(joydev->corr[0]) * joydev->nabs) ? -EFAULT : 0;
drivers/input/joydev.c
569
return joydev_handle_JSIOCSAXMAP(joydev, argp, _IOC_SIZE(cmd));
drivers/input/joydev.c
572
len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->abspam));
drivers/input/joydev.c
573
return copy_to_user(argp, joydev->abspam, len) ? -EFAULT : len;
drivers/input/joydev.c
576
return joydev_handle_JSIOCSBTNMAP(joydev, argp, _IOC_SIZE(cmd));
drivers/input/joydev.c
579
len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->keypam));
drivers/input/joydev.c
580
return copy_to_user(argp, joydev->keypam, len) ? -EFAULT : len;
drivers/input/joydev.c
599
struct joydev *joydev = client->joydev;
drivers/input/joydev.c
605
retval = mutex_lock_interruptible(&joydev->mutex);
drivers/input/joydev.c
609
if (!joydev->exist) {
drivers/input/joydev.c
619
joydev->glue.JS_TIMELIMIT = tmp32;
drivers/input/joydev.c
623
tmp32 = joydev->glue.JS_TIMELIMIT;
drivers/input/joydev.c
631
joydev->glue.JS_TIMEOUT = ds32.JS_TIMEOUT;
drivers/input/joydev.c
632
joydev->glue.BUSY = ds32.BUSY;
drivers/input/joydev.c
633
joydev->glue.JS_EXPIRETIME = ds32.JS_EXPIRETIME;
drivers/input/joydev.c
634
joydev->glue.JS_TIMELIMIT = ds32.JS_TIMELIMIT;
drivers/input/joydev.c
635
joydev->glue.JS_SAVE = ds32.JS_SAVE;
drivers/input/joydev.c
636
joydev->glue.JS_CORR = ds32.JS_CORR;
drivers/input/joydev.c
64
struct joydev *joydev;
drivers/input/joydev.c
641
ds32.JS_TIMEOUT = joydev->glue.JS_TIMEOUT;
drivers/input/joydev.c
642
ds32.BUSY = joydev->glue.BUSY;
drivers/input/joydev.c
643
ds32.JS_EXPIRETIME = joydev->glue.JS_EXPIRETIME;
drivers/input/joydev.c
644
ds32.JS_TIMELIMIT = joydev->glue.JS_TIMELIMIT;
drivers/input/joydev.c
645
ds32.JS_SAVE = joydev->glue.JS_SAVE;
drivers/input/joydev.c
646
ds32.JS_CORR = joydev->glue.JS_CORR;
drivers/input/joydev.c
652
retval = joydev_ioctl_common(joydev, cmd, argp);
drivers/input/joydev.c
657
mutex_unlock(&joydev->mutex);
drivers/input/joydev.c
666
struct joydev *joydev = client->joydev;
drivers/input/joydev.c
670
retval = mutex_lock_interruptible(&joydev->mutex);
drivers/input/joydev.c
674
if (!joydev->exist) {
drivers/input/joydev.c
682
retval = get_user(joydev->glue.JS_TIMELIMIT,
drivers/input/joydev.c
687
retval = put_user(joydev->glue.JS_TIMELIMIT,
drivers/input/joydev.c
692
retval = copy_from_user(&joydev->glue, argp,
drivers/input/joydev.c
693
sizeof(joydev->glue)) ? -EFAULT : 0;
drivers/input/joydev.c
697
retval = copy_to_user(argp, &joydev->glue,
drivers/input/joydev.c
698
sizeof(joydev->glue)) ? -EFAULT : 0;
drivers/input/joydev.c
702
retval = joydev_ioctl_common(joydev, cmd, argp);
drivers/input/joydev.c
706
mutex_unlock(&joydev->mutex);
drivers/input/joydev.c
728
static void joydev_mark_dead(struct joydev *joydev)
drivers/input/joydev.c
730
mutex_lock(&joydev->mutex);
drivers/input/joydev.c
731
joydev->exist = false;
drivers/input/joydev.c
732
mutex_unlock(&joydev->mutex);
drivers/input/joydev.c
735
static void joydev_cleanup(struct joydev *joydev)
drivers/input/joydev.c
737
struct input_handle *handle = &joydev->handle;
drivers/input/joydev.c
739
joydev_mark_dead(joydev);
drivers/input/joydev.c
740
joydev_hangup(joydev);
drivers/input/joydev.c
743
if (joydev->open)
drivers/input/joydev.c
91
struct joydev *joydev = client->joydev;
drivers/input/joydev.c
913
struct joydev *joydev;
drivers/input/joydev.c
924
joydev = kzalloc_obj(struct joydev);
drivers/input/joydev.c
925
if (!joydev) {
drivers/input/joydev.c
930
INIT_LIST_HEAD(&joydev->client_list);
drivers/input/joydev.c
931
spin_lock_init(&joydev->client_lock);
drivers/input/joydev.c
932
mutex_init(&joydev->mutex);
drivers/input/joydev.c
933
init_waitqueue_head(&joydev->wait);
drivers/input/joydev.c
934
joydev->exist = true;
drivers/input/joydev.c
940
dev_set_name(&joydev->dev, "js%d", dev_no);
drivers/input/joydev.c
942
joydev->handle.dev = input_get_device(dev);
drivers/input/joydev.c
943
joydev->handle.name = dev_name(&joydev->dev);
drivers/input/joydev.c
944
joydev->handle.handler = handler;
drivers/input/joydev.c
945
joydev->handle.private = joydev;
drivers/input/joydev.c
948
joydev->absmap[i] = joydev->nabs;
drivers/input/joydev.c
949
joydev->abspam[joydev->nabs] = i;
drivers/input/joydev.c
950
joydev->nabs++;
drivers/input/joydev.c
955
joydev->keymap[i] = joydev->nkey;
drivers/input/joydev.c
956
joydev->keypam[joydev->nkey] = i + BTN_MISC;
drivers/input/joydev.c
957
joydev->nkey++;
drivers/input/joydev.c
962
joydev->keymap[i] = joydev->nkey;
drivers/input/joydev.c
963
joydev->keypam[joydev->nkey] = i + BTN_MISC;
drivers/input/joydev.c
964
joydev->nkey++;
drivers/input/joydev.c
967
for (i = 0; i < joydev->nabs; i++) {
drivers/input/joydev.c
968
j = joydev->abspam[i];
drivers/input/joydev.c
970
joydev->corr[i].type = JS_CORR_NONE;
drivers/input/joydev.c
973
joydev->corr[i].type = JS_CORR_BROKEN;
drivers/input/joydev.c
974
joydev->corr[i].prec = input_abs_get_fuzz(dev, j);
drivers/input/joydev.c
977
joydev->corr[i].coef[0] = t - input_abs_get_flat(dev, j);
drivers/input/joydev.c
978
joydev->corr[i].coef[1] = t + input_abs_get_flat(dev, j);
drivers/input/joydev.c
983
joydev->corr[i].coef[2] = (1 << 29) / t;
drivers/input/joydev.c
984
joydev->corr[i].coef[3] = (1 << 29) / t;
drivers/input/joydev.c
988
joydev->dev.devt = MKDEV(INPUT_MAJOR, minor);
drivers/input/joydev.c
989
joydev->dev.class = &input_class;
drivers/input/joydev.c
990
joydev->dev.parent = &dev->dev;
drivers/input/joydev.c
991
joydev->dev.release = joydev_free;
drivers/input/joydev.c
992
device_initialize(&joydev->dev);
drivers/input/joydev.c
994
error = input_register_handle(&joydev->handle);
drivers/input/joydev.c
998
cdev_init(&joydev->cdev, &joydev_fops);