• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/input/

Lines Matching refs:evdev

26 struct evdev {
44 struct evdev *evdev;
50 static struct evdev *evdev_table[EVDEV_MINORS];
78 struct evdev *evdev = handle->private;
89 client = rcu_dereference(evdev->grab);
93 list_for_each_entry_rcu(client, &evdev->client_list, node)
98 wake_up_interruptible(&evdev->wait);
111 struct evdev *evdev = client->evdev;
114 retval = mutex_lock_interruptible(&evdev->mutex);
118 if (!evdev->exist)
121 retval = input_flush_device(&evdev->handle, file);
123 mutex_unlock(&evdev->mutex);
129 struct evdev *evdev = container_of(dev, struct evdev, dev);
131 input_put_device(evdev->handle.dev);
132 kfree(evdev);
137 * This function is called with evdev->mutex taken.
139 static int evdev_grab(struct evdev *evdev, struct evdev_client *client)
143 if (evdev->grab)
146 error = input_grab_device(&evdev->handle);
150 rcu_assign_pointer(evdev->grab, client);
156 static int evdev_ungrab(struct evdev *evdev, struct evdev_client *client)
158 if (evdev->grab != client)
161 rcu_assign_pointer(evdev->grab, NULL);
163 input_release_device(&evdev->handle);
168 static void evdev_attach_client(struct evdev *evdev,
171 spin_lock(&evdev->client_lock);
172 list_add_tail_rcu(&client->node, &evdev->client_list);
173 spin_unlock(&evdev->client_lock);
177 static void evdev_detach_client(struct evdev *evdev,
180 spin_lock(&evdev->client_lock);
182 spin_unlock(&evdev->client_lock);
186 static int evdev_open_device(struct evdev *evdev)
190 retval = mutex_lock_interruptible(&evdev->mutex);
194 if (!evdev->exist)
196 else if (!evdev->open++) {
197 retval = input_open_device(&evdev->handle);
199 evdev->open--;
202 mutex_unlock(&evdev->mutex);
206 static void evdev_close_device(struct evdev *evdev)
208 mutex_lock(&evdev->mutex);
210 if (evdev->exist && !--evdev->open)
211 input_close_device(&evdev->handle);
213 mutex_unlock(&evdev->mutex);
220 static void evdev_hangup(struct evdev *evdev)
224 spin_lock(&evdev->client_lock);
225 list_for_each_entry(client, &evdev->client_list, node)
227 spin_unlock(&evdev->client_lock);
229 wake_up_interruptible(&evdev->wait);
235 struct evdev *evdev = client->evdev;
237 mutex_lock(&evdev->mutex);
238 if (evdev->grab == client)
239 evdev_ungrab(evdev, client);
240 mutex_unlock(&evdev->mutex);
242 evdev_detach_client(evdev, client);
245 evdev_close_device(evdev);
246 put_device(&evdev->dev);
262 struct evdev *evdev;
274 evdev = evdev_table[i];
275 if (evdev)
276 get_device(&evdev->dev);
279 if (!evdev)
282 bufsize = evdev_compute_buffer_size(evdev->handle.dev);
294 client->evdev = evdev;
295 evdev_attach_client(evdev, client);
297 error = evdev_open_device(evdev);
307 evdev_detach_client(evdev, client);
310 put_device(&evdev->dev);
318 struct evdev *evdev = client->evdev;
322 retval = mutex_lock_interruptible(&evdev->mutex);
326 if (!evdev->exist) {
338 input_inject_event(&evdev->handle,
344 mutex_unlock(&evdev->mutex);
370 struct evdev *evdev = client->evdev;
377 if (client->head == client->tail && evdev->exist &&
381 retval = wait_event_interruptible(evdev->wait,
382 client->head != client->tail || !evdev->exist);
386 if (!evdev->exist)
405 struct evdev *evdev = client->evdev;
408 poll_wait(file, &evdev->wait, wait);
410 mask = evdev->exist ? POLLOUT | POLLWRNORM : POLLHUP | POLLERR;
521 "evdev.c(EVIOCGBIT): Suspicious buffer size %u, "
536 struct evdev *evdev = client->evdev;
537 struct input_dev *dev = evdev->handle.dev;
573 input_inject_event(&evdev->handle, EV_REP, REP_DELAY, u);
574 input_inject_event(&evdev->handle, EV_REP, REP_PERIOD, v);
609 return evdev_grab(evdev, client);
611 return evdev_ungrab(evdev, client);
721 struct evdev *evdev = client->evdev;
724 retval = mutex_lock_interruptible(&evdev->mutex);
728 if (!evdev->exist) {
736 mutex_unlock(&evdev->mutex);
768 static int evdev_install_chrdev(struct evdev *evdev)
774 evdev_table[evdev->minor] = evdev;
778 static void evdev_remove_chrdev(struct evdev *evdev)
781 * Lock evdev table to prevent race with evdev_open()
784 evdev_table[evdev->minor] = NULL;
793 static void evdev_mark_dead(struct evdev *evdev)
795 mutex_lock(&evdev->mutex);
796 evdev->exist = false;
797 mutex_unlock(&evdev->mutex);
800 static void evdev_cleanup(struct evdev *evdev)
802 struct input_handle *handle = &evdev->handle;
804 evdev_mark_dead(evdev);
805 evdev_hangup(evdev);
806 evdev_remove_chrdev(evdev);
808 /* evdev is marked dead so no one else accesses evdev->open */
809 if (evdev->open) {
816 * Create new evdev device. Note that input core serializes calls
822 struct evdev *evdev;
831 printk(KERN_ERR "evdev: no more free evdev devices\n");
835 evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL);
836 if (!evdev)
839 INIT_LIST_HEAD(&evdev->client_list);
840 spin_lock_init(&evdev->client_lock);
841 mutex_init(&evdev->mutex);
842 init_waitqueue_head(&evdev->wait);
844 dev_set_name(&evdev->dev, "event%d", minor);
845 evdev->exist = true;
846 evdev->minor = minor;
848 evdev->handle.dev = input_get_device(dev);
849 evdev->handle.name = dev_name(&evdev->dev);
850 evdev->handle.handler = handler;
851 evdev->handle.private = evdev;
853 evdev->dev.devt = MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + minor);
854 evdev->dev.class = &input_class;
855 evdev->dev.parent = &dev->dev;
856 evdev->dev.release = evdev_free;
857 device_initialize(&evdev->dev);
859 error = input_register_handle(&evdev->handle);
863 error = evdev_install_chrdev(evdev);
867 error = device_add(&evdev->dev);
874 evdev_cleanup(evdev);
876 input_unregister_handle(&evdev->handle);
878 put_device(&evdev->dev);
884 struct evdev *evdev = handle->private;
886 device_del(&evdev->dev);
887 evdev_cleanup(evdev);
889 put_device(&evdev->dev);
905 .name = "evdev",