joydev             65 drivers/input/joydev.c 	struct joydev *joydev;
joydev             92 drivers/input/joydev.c 	struct joydev *joydev = client->joydev;
joydev            101 drivers/input/joydev.c 	if (client->startup == joydev->nabs + joydev->nkey) {
joydev            116 drivers/input/joydev.c 	struct joydev *joydev = handle->private;
joydev            126 drivers/input/joydev.c 		event.number = joydev->keymap[code - BTN_MISC];
joydev            132 drivers/input/joydev.c 		event.number = joydev->absmap[code];
joydev            134 drivers/input/joydev.c 					&joydev->corr[event.number]);
joydev            135 drivers/input/joydev.c 		if (event.value == joydev->abs[event.number])
joydev            137 drivers/input/joydev.c 		joydev->abs[event.number] = event.value;
joydev            147 drivers/input/joydev.c 	list_for_each_entry_rcu(client, &joydev->client_list, node)
joydev            151 drivers/input/joydev.c 	wake_up_interruptible(&joydev->wait);
joydev            163 drivers/input/joydev.c 	struct joydev *joydev = container_of(dev, struct joydev, dev);
joydev            165 drivers/input/joydev.c 	input_put_device(joydev->handle.dev);
joydev            166 drivers/input/joydev.c 	kfree(joydev);
joydev            169 drivers/input/joydev.c static void joydev_attach_client(struct joydev *joydev,
joydev            172 drivers/input/joydev.c 	spin_lock(&joydev->client_lock);
joydev            173 drivers/input/joydev.c 	list_add_tail_rcu(&client->node, &joydev->client_list);
joydev            174 drivers/input/joydev.c 	spin_unlock(&joydev->client_lock);
joydev            177 drivers/input/joydev.c static void joydev_detach_client(struct joydev *joydev,
joydev            180 drivers/input/joydev.c 	spin_lock(&joydev->client_lock);
joydev            182 drivers/input/joydev.c 	spin_unlock(&joydev->client_lock);
joydev            186 drivers/input/joydev.c static void joydev_refresh_state(struct joydev *joydev)
joydev            188 drivers/input/joydev.c 	struct input_dev *dev = joydev->handle.dev;
joydev            191 drivers/input/joydev.c 	for (i = 0; i < joydev->nabs; i++) {
joydev            192 drivers/input/joydev.c 		val = input_abs_get_val(dev, joydev->abspam[i]);
joydev            193 drivers/input/joydev.c 		joydev->abs[i] = joydev_correct(val, &joydev->corr[i]);
joydev            197 drivers/input/joydev.c static int joydev_open_device(struct joydev *joydev)
joydev            201 drivers/input/joydev.c 	retval = mutex_lock_interruptible(&joydev->mutex);
joydev            205 drivers/input/joydev.c 	if (!joydev->exist)
joydev            207 drivers/input/joydev.c 	else if (!joydev->open++) {
joydev            208 drivers/input/joydev.c 		retval = input_open_device(&joydev->handle);
joydev            210 drivers/input/joydev.c 			joydev->open--;
joydev            212 drivers/input/joydev.c 			joydev_refresh_state(joydev);
joydev            215 drivers/input/joydev.c 	mutex_unlock(&joydev->mutex);
joydev            219 drivers/input/joydev.c static void joydev_close_device(struct joydev *joydev)
joydev            221 drivers/input/joydev.c 	mutex_lock(&joydev->mutex);
joydev            223 drivers/input/joydev.c 	if (joydev->exist && !--joydev->open)
joydev            224 drivers/input/joydev.c 		input_close_device(&joydev->handle);
joydev            226 drivers/input/joydev.c 	mutex_unlock(&joydev->mutex);
joydev            233 drivers/input/joydev.c static void joydev_hangup(struct joydev *joydev)
joydev            237 drivers/input/joydev.c 	spin_lock(&joydev->client_lock);
joydev            238 drivers/input/joydev.c 	list_for_each_entry(client, &joydev->client_list, node)
joydev            240 drivers/input/joydev.c 	spin_unlock(&joydev->client_lock);
joydev            242 drivers/input/joydev.c 	wake_up_interruptible(&joydev->wait);
joydev            248 drivers/input/joydev.c 	struct joydev *joydev = client->joydev;
joydev            250 drivers/input/joydev.c 	joydev_detach_client(joydev, client);
joydev            253 drivers/input/joydev.c 	joydev_close_device(joydev);
joydev            260 drivers/input/joydev.c 	struct joydev *joydev =
joydev            261 drivers/input/joydev.c 			container_of(inode->i_cdev, struct joydev, cdev);
joydev            270 drivers/input/joydev.c 	client->joydev = joydev;
joydev            271 drivers/input/joydev.c 	joydev_attach_client(joydev, client);
joydev            273 drivers/input/joydev.c 	error = joydev_open_device(joydev);
joydev            283 drivers/input/joydev.c 	joydev_detach_client(joydev, client);
joydev            292 drivers/input/joydev.c 	struct joydev *joydev = client->joydev;
joydev            297 drivers/input/joydev.c 	have_event = client->startup < joydev->nabs + joydev->nkey;
joydev            302 drivers/input/joydev.c 		if (client->startup < joydev->nkey) {
joydev            305 drivers/input/joydev.c 			event->value = !!test_bit(joydev->keypam[event->number],
joydev            309 drivers/input/joydev.c 			event->number = client->startup - joydev->nkey;
joydev            310 drivers/input/joydev.c 			event->value = joydev->abs[event->number];
joydev            345 drivers/input/joydev.c 	struct joydev *joydev = client->joydev;
joydev            354 drivers/input/joydev.c 	for (data.buttons = i = 0; i < 32 && i < joydev->nkey; i++)
joydev            356 drivers/input/joydev.c 			test_bit(joydev->keypam[i], input->key) ? (1 << i) : 0;
joydev            357 drivers/input/joydev.c 	data.x = (joydev->abs[0] / 256 + 128) >> joydev->glue.JS_CORR.x;
joydev            358 drivers/input/joydev.c 	data.y = (joydev->abs[1] / 256 + 128) >> joydev->glue.JS_CORR.y;
joydev            378 drivers/input/joydev.c 	struct joydev *joydev = client->joydev;
joydev            380 drivers/input/joydev.c 	return client->startup < joydev->nabs + joydev->nkey ||
joydev            388 drivers/input/joydev.c 	struct joydev *joydev = client->joydev;
joydev            389 drivers/input/joydev.c 	struct input_dev *input = joydev->handle.dev;
joydev            393 drivers/input/joydev.c 	if (!joydev->exist)
joydev            405 drivers/input/joydev.c 	retval = wait_event_interruptible(joydev->wait,
joydev            406 drivers/input/joydev.c 			!joydev->exist || joydev_data_pending(client));
joydev            410 drivers/input/joydev.c 	if (!joydev->exist)
joydev            438 drivers/input/joydev.c 	struct joydev *joydev = client->joydev;
joydev            440 drivers/input/joydev.c 	poll_wait(file, &joydev->wait, wait);
joydev            442 drivers/input/joydev.c 		(joydev->exist ?  0 : (EPOLLHUP | EPOLLERR));
joydev            445 drivers/input/joydev.c static int joydev_handle_JSIOCSAXMAP(struct joydev *joydev,
joydev            452 drivers/input/joydev.c 	len = min(len, sizeof(joydev->abspam));
joydev            459 drivers/input/joydev.c 	for (i = 0; i < joydev->nabs; i++) {
joydev            466 drivers/input/joydev.c 	memcpy(joydev->abspam, abspam, len);
joydev            468 drivers/input/joydev.c 	for (i = 0; i < joydev->nabs; i++)
joydev            469 drivers/input/joydev.c 		joydev->absmap[joydev->abspam[i]] = i;
joydev            476 drivers/input/joydev.c static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev,
joydev            483 drivers/input/joydev.c 	len = min(len, sizeof(joydev->keypam));
joydev            490 drivers/input/joydev.c 	for (i = 0; i < joydev->nkey; i++) {
joydev            497 drivers/input/joydev.c 	memcpy(joydev->keypam, keypam, len);
joydev            499 drivers/input/joydev.c 	for (i = 0; i < joydev->nkey; i++)
joydev            500 drivers/input/joydev.c 		joydev->keymap[keypam[i] - BTN_MISC] = i;
joydev            508 drivers/input/joydev.c static int joydev_ioctl_common(struct joydev *joydev,
joydev            511 drivers/input/joydev.c 	struct input_dev *dev = joydev->handle.dev;
joydev            520 drivers/input/joydev.c 		return copy_from_user(&joydev->glue.JS_CORR, argp,
joydev            521 drivers/input/joydev.c 				sizeof(joydev->glue.JS_CORR)) ? -EFAULT : 0;
joydev            524 drivers/input/joydev.c 		return copy_to_user(argp, &joydev->glue.JS_CORR,
joydev            525 drivers/input/joydev.c 				sizeof(joydev->glue.JS_CORR)) ? -EFAULT : 0;
joydev            528 drivers/input/joydev.c 		return get_user(joydev->glue.JS_TIMEOUT, (s32 __user *) argp);
joydev            531 drivers/input/joydev.c 		return put_user(joydev->glue.JS_TIMEOUT, (s32 __user *) argp);
joydev            537 drivers/input/joydev.c 		return put_user(joydev->nabs, (__u8 __user *) argp);
joydev            540 drivers/input/joydev.c 		return put_user(joydev->nkey, (__u8 __user *) argp);
joydev            543 drivers/input/joydev.c 		if (copy_from_user(joydev->corr, argp,
joydev            544 drivers/input/joydev.c 			      sizeof(joydev->corr[0]) * joydev->nabs))
joydev            547 drivers/input/joydev.c 		for (i = 0; i < joydev->nabs; i++) {
joydev            548 drivers/input/joydev.c 			int val = input_abs_get_val(dev, joydev->abspam[i]);
joydev            549 drivers/input/joydev.c 			joydev->abs[i] = joydev_correct(val, &joydev->corr[i]);
joydev            554 drivers/input/joydev.c 		return copy_to_user(argp, joydev->corr,
joydev            555 drivers/input/joydev.c 			sizeof(joydev->corr[0]) * joydev->nabs) ? -EFAULT : 0;
joydev            567 drivers/input/joydev.c 		return joydev_handle_JSIOCSAXMAP(joydev, argp, _IOC_SIZE(cmd));
joydev            570 drivers/input/joydev.c 		len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->abspam));
joydev            571 drivers/input/joydev.c 		return copy_to_user(argp, joydev->abspam, len) ? -EFAULT : len;
joydev            574 drivers/input/joydev.c 		return joydev_handle_JSIOCSBTNMAP(joydev, argp, _IOC_SIZE(cmd));
joydev            577 drivers/input/joydev.c 		len = min_t(size_t, _IOC_SIZE(cmd), sizeof(joydev->keypam));
joydev            578 drivers/input/joydev.c 		return copy_to_user(argp, joydev->keypam, len) ? -EFAULT : len;
joydev            597 drivers/input/joydev.c 	struct joydev *joydev = client->joydev;
joydev            603 drivers/input/joydev.c 	retval = mutex_lock_interruptible(&joydev->mutex);
joydev            607 drivers/input/joydev.c 	if (!joydev->exist) {
joydev            617 drivers/input/joydev.c 			joydev->glue.JS_TIMELIMIT = tmp32;
joydev            621 drivers/input/joydev.c 		tmp32 = joydev->glue.JS_TIMELIMIT;
joydev            629 drivers/input/joydev.c 			joydev->glue.JS_TIMEOUT    = ds32.JS_TIMEOUT;
joydev            630 drivers/input/joydev.c 			joydev->glue.BUSY          = ds32.BUSY;
joydev            631 drivers/input/joydev.c 			joydev->glue.JS_EXPIRETIME = ds32.JS_EXPIRETIME;
joydev            632 drivers/input/joydev.c 			joydev->glue.JS_TIMELIMIT  = ds32.JS_TIMELIMIT;
joydev            633 drivers/input/joydev.c 			joydev->glue.JS_SAVE       = ds32.JS_SAVE;
joydev            634 drivers/input/joydev.c 			joydev->glue.JS_CORR       = ds32.JS_CORR;
joydev            639 drivers/input/joydev.c 		ds32.JS_TIMEOUT    = joydev->glue.JS_TIMEOUT;
joydev            640 drivers/input/joydev.c 		ds32.BUSY          = joydev->glue.BUSY;
joydev            641 drivers/input/joydev.c 		ds32.JS_EXPIRETIME = joydev->glue.JS_EXPIRETIME;
joydev            642 drivers/input/joydev.c 		ds32.JS_TIMELIMIT  = joydev->glue.JS_TIMELIMIT;
joydev            643 drivers/input/joydev.c 		ds32.JS_SAVE       = joydev->glue.JS_SAVE;
joydev            644 drivers/input/joydev.c 		ds32.JS_CORR       = joydev->glue.JS_CORR;
joydev            650 drivers/input/joydev.c 		retval = joydev_ioctl_common(joydev, cmd, argp);
joydev            655 drivers/input/joydev.c 	mutex_unlock(&joydev->mutex);
joydev            664 drivers/input/joydev.c 	struct joydev *joydev = client->joydev;
joydev            668 drivers/input/joydev.c 	retval = mutex_lock_interruptible(&joydev->mutex);
joydev            672 drivers/input/joydev.c 	if (!joydev->exist) {
joydev            680 drivers/input/joydev.c 		retval = get_user(joydev->glue.JS_TIMELIMIT,
joydev            685 drivers/input/joydev.c 		retval = put_user(joydev->glue.JS_TIMELIMIT,
joydev            690 drivers/input/joydev.c 		retval = copy_from_user(&joydev->glue, argp,
joydev            691 drivers/input/joydev.c 					sizeof(joydev->glue)) ? -EFAULT : 0;
joydev            695 drivers/input/joydev.c 		retval = copy_to_user(argp, &joydev->glue,
joydev            696 drivers/input/joydev.c 				      sizeof(joydev->glue)) ? -EFAULT : 0;
joydev            700 drivers/input/joydev.c 		retval = joydev_ioctl_common(joydev, cmd, argp);
joydev            704 drivers/input/joydev.c 	mutex_unlock(&joydev->mutex);
joydev            727 drivers/input/joydev.c static void joydev_mark_dead(struct joydev *joydev)
joydev            729 drivers/input/joydev.c 	mutex_lock(&joydev->mutex);
joydev            730 drivers/input/joydev.c 	joydev->exist = false;
joydev            731 drivers/input/joydev.c 	mutex_unlock(&joydev->mutex);
joydev            734 drivers/input/joydev.c static void joydev_cleanup(struct joydev *joydev)
joydev            736 drivers/input/joydev.c 	struct input_handle *handle = &joydev->handle;
joydev            738 drivers/input/joydev.c 	joydev_mark_dead(joydev);
joydev            739 drivers/input/joydev.c 	joydev_hangup(joydev);
joydev            742 drivers/input/joydev.c 	if (joydev->open)
joydev            902 drivers/input/joydev.c 	struct joydev *joydev;
joydev            913 drivers/input/joydev.c 	joydev = kzalloc(sizeof(struct joydev), GFP_KERNEL);
joydev            914 drivers/input/joydev.c 	if (!joydev) {
joydev            919 drivers/input/joydev.c 	INIT_LIST_HEAD(&joydev->client_list);
joydev            920 drivers/input/joydev.c 	spin_lock_init(&joydev->client_lock);
joydev            921 drivers/input/joydev.c 	mutex_init(&joydev->mutex);
joydev            922 drivers/input/joydev.c 	init_waitqueue_head(&joydev->wait);
joydev            923 drivers/input/joydev.c 	joydev->exist = true;
joydev            929 drivers/input/joydev.c 	dev_set_name(&joydev->dev, "js%d", dev_no);
joydev            931 drivers/input/joydev.c 	joydev->handle.dev = input_get_device(dev);
joydev            932 drivers/input/joydev.c 	joydev->handle.name = dev_name(&joydev->dev);
joydev            933 drivers/input/joydev.c 	joydev->handle.handler = handler;
joydev            934 drivers/input/joydev.c 	joydev->handle.private = joydev;
joydev            937 drivers/input/joydev.c 		joydev->absmap[i] = joydev->nabs;
joydev            938 drivers/input/joydev.c 		joydev->abspam[joydev->nabs] = i;
joydev            939 drivers/input/joydev.c 		joydev->nabs++;
joydev            944 drivers/input/joydev.c 			joydev->keymap[i] = joydev->nkey;
joydev            945 drivers/input/joydev.c 			joydev->keypam[joydev->nkey] = i + BTN_MISC;
joydev            946 drivers/input/joydev.c 			joydev->nkey++;
joydev            951 drivers/input/joydev.c 			joydev->keymap[i] = joydev->nkey;
joydev            952 drivers/input/joydev.c 			joydev->keypam[joydev->nkey] = i + BTN_MISC;
joydev            953 drivers/input/joydev.c 			joydev->nkey++;
joydev            956 drivers/input/joydev.c 	for (i = 0; i < joydev->nabs; i++) {
joydev            957 drivers/input/joydev.c 		j = joydev->abspam[i];
joydev            959 drivers/input/joydev.c 			joydev->corr[i].type = JS_CORR_NONE;
joydev            962 drivers/input/joydev.c 		joydev->corr[i].type = JS_CORR_BROKEN;
joydev            963 drivers/input/joydev.c 		joydev->corr[i].prec = input_abs_get_fuzz(dev, j);
joydev            966 drivers/input/joydev.c 		joydev->corr[i].coef[0] = t - input_abs_get_flat(dev, j);
joydev            967 drivers/input/joydev.c 		joydev->corr[i].coef[1] = t + input_abs_get_flat(dev, j);
joydev            972 drivers/input/joydev.c 			joydev->corr[i].coef[2] = (1 << 29) / t;
joydev            973 drivers/input/joydev.c 			joydev->corr[i].coef[3] = (1 << 29) / t;
joydev            977 drivers/input/joydev.c 	joydev->dev.devt = MKDEV(INPUT_MAJOR, minor);
joydev            978 drivers/input/joydev.c 	joydev->dev.class = &input_class;
joydev            979 drivers/input/joydev.c 	joydev->dev.parent = &dev->dev;
joydev            980 drivers/input/joydev.c 	joydev->dev.release = joydev_free;
joydev            981 drivers/input/joydev.c 	device_initialize(&joydev->dev);
joydev            983 drivers/input/joydev.c 	error = input_register_handle(&joydev->handle);
joydev            987 drivers/input/joydev.c 	cdev_init(&joydev->cdev, &joydev_fops);
joydev            989 drivers/input/joydev.c 	error = cdev_device_add(&joydev->cdev, &joydev->dev);
joydev            996 drivers/input/joydev.c 	joydev_cleanup(joydev);
joydev            997 drivers/input/joydev.c 	input_unregister_handle(&joydev->handle);
joydev            999 drivers/input/joydev.c 	put_device(&joydev->dev);
joydev           1007 drivers/input/joydev.c 	struct joydev *joydev = handle->private;
joydev           1009 drivers/input/joydev.c 	cdev_device_del(&joydev->cdev, &joydev->dev);
joydev           1010 drivers/input/joydev.c 	joydev_cleanup(joydev);
joydev           1011 drivers/input/joydev.c 	input_free_minor(MINOR(joydev->dev.devt));
joydev           1013 drivers/input/joydev.c 	put_device(&joydev->dev);