Lines Matching refs:hiddev

44 	struct hiddev *hiddev;  member
143 struct hiddev *hiddev = hid->hiddev; in hiddev_send_event() local
147 spin_lock_irqsave(&hiddev->list_lock, flags); in hiddev_send_event()
148 list_for_each_entry(list, &hiddev->list, node) { in hiddev_send_event()
157 spin_unlock_irqrestore(&hiddev->list_lock, flags); in hiddev_send_event()
159 wake_up_interruptible(&hiddev->wait); in hiddev_send_event()
221 spin_lock_irqsave(&list->hiddev->list_lock, flags); in hiddev_release()
223 spin_unlock_irqrestore(&list->hiddev->list_lock, flags); in hiddev_release()
225 mutex_lock(&list->hiddev->existancelock); in hiddev_release()
226 if (!--list->hiddev->open) { in hiddev_release()
227 if (list->hiddev->exist) { in hiddev_release()
228 hid_hw_close(list->hiddev->hid); in hiddev_release()
229 hid_hw_power(list->hiddev->hid, PM_HINT_NORMAL); in hiddev_release()
231 mutex_unlock(&list->hiddev->existancelock); in hiddev_release()
232 kfree(list->hiddev); in hiddev_release()
238 mutex_unlock(&list->hiddev->existancelock); in hiddev_release()
252 struct hiddev *hiddev; in hiddev_open() local
259 hiddev = hid->hiddev; in hiddev_open()
264 list->hiddev = hiddev; in hiddev_open()
271 if (list->hiddev->exist) { in hiddev_open()
272 if (!list->hiddev->open++) { in hiddev_open()
273 res = hid_hw_open(hiddev->hid); in hiddev_open()
282 spin_lock_irq(&list->hiddev->list_lock); in hiddev_open()
283 list_add_tail(&list->node, &hiddev->list); in hiddev_open()
284 spin_unlock_irq(&list->hiddev->list_lock); in hiddev_open()
286 mutex_lock(&hiddev->existancelock); in hiddev_open()
291 if (!list->hiddev->exist) { in hiddev_open()
295 if (!list->hiddev->open++) in hiddev_open()
296 if (list->hiddev->exist) { in hiddev_open()
297 struct hid_device *hid = hiddev->hid; in hiddev_open()
305 mutex_unlock(&hiddev->existancelock); in hiddev_open()
310 mutex_unlock(&hiddev->existancelock); in hiddev_open()
312 spin_lock_irq(&list->hiddev->list_lock); in hiddev_open()
314 spin_unlock_irq(&list->hiddev->list_lock); in hiddev_open()
352 prepare_to_wait(&list->hiddev->wait, &wait, TASK_INTERRUPTIBLE); in hiddev_read()
359 if (!list->hiddev->exist) { in hiddev_read()
372 finish_wait(&list->hiddev->wait, &wait); in hiddev_read()
377 finish_wait(&list->hiddev->wait, &wait); in hiddev_read()
429 poll_wait(file, &list->hiddev->wait, wait); in hiddev_poll()
432 if (!list->hiddev->exist) in hiddev_poll()
440 static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd, void __user *user_a… in hiddev_ioctl_usage() argument
442 struct hid_device *hid = hiddev->hid; in hiddev_ioctl_usage()
575 static noinline int hiddev_ioctl_string(struct hiddev *hiddev, unsigned int cmd, void __user *user_… in hiddev_ioctl_string() argument
577 struct hid_device *hid = hiddev->hid; in hiddev_ioctl_string()
606 struct hiddev *hiddev = list->hiddev; in hiddev_ioctl() local
619 mutex_lock(&hiddev->existancelock); in hiddev_ioctl()
620 if (!hiddev->exist) { in hiddev_ioctl()
625 hid = hiddev->hid; in hiddev_ioctl()
694 r = hiddev_ioctl_string(hiddev, cmd, user_arg); in hiddev_ioctl()
699 hiddev->initialized = true; in hiddev_ioctl()
803 if (!hiddev->initialized) { in hiddev_ioctl()
805 hiddev->initialized = true; in hiddev_ioctl()
807 r = hiddev_ioctl_usage(hiddev, cmd, user_arg); in hiddev_ioctl()
853 mutex_unlock(&hiddev->existancelock); in hiddev_ioctl()
896 struct hiddev *hiddev; in hiddev_connect() local
912 if (!(hiddev = kzalloc(sizeof(struct hiddev), GFP_KERNEL))) in hiddev_connect()
915 init_waitqueue_head(&hiddev->wait); in hiddev_connect()
916 INIT_LIST_HEAD(&hiddev->list); in hiddev_connect()
917 spin_lock_init(&hiddev->list_lock); in hiddev_connect()
918 mutex_init(&hiddev->existancelock); in hiddev_connect()
919 hid->hiddev = hiddev; in hiddev_connect()
920 hiddev->hid = hid; in hiddev_connect()
921 hiddev->exist = 1; in hiddev_connect()
925 hid->hiddev = NULL; in hiddev_connect()
926 kfree(hiddev); in hiddev_connect()
934 hiddev->initialized = hid->quirks & HID_QUIRK_NO_INIT_REPORTS; in hiddev_connect()
936 hiddev->minor = usbhid->intf->minor; in hiddev_connect()
948 struct hiddev *hiddev = hid->hiddev; in hiddev_disconnect() local
953 mutex_lock(&hiddev->existancelock); in hiddev_disconnect()
954 hiddev->exist = 0; in hiddev_disconnect()
956 if (hiddev->open) { in hiddev_disconnect()
957 mutex_unlock(&hiddev->existancelock); in hiddev_disconnect()
958 hid_hw_close(hiddev->hid); in hiddev_disconnect()
959 wake_up_interruptible(&hiddev->wait); in hiddev_disconnect()
961 mutex_unlock(&hiddev->existancelock); in hiddev_disconnect()
962 kfree(hiddev); in hiddev_disconnect()