diff options
Diffstat (limited to 'drivers/hid/usbhid/hiddev.c')
| -rw-r--r-- | drivers/hid/usbhid/hiddev.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c index 774bd701dae0..0e06368d1fbb 100644 --- a/drivers/hid/usbhid/hiddev.c +++ b/drivers/hid/usbhid/hiddev.c | |||
| @@ -47,16 +47,6 @@ | |||
| 47 | #endif | 47 | #endif |
| 48 | #define HIDDEV_BUFFER_SIZE 2048 | 48 | #define HIDDEV_BUFFER_SIZE 2048 |
| 49 | 49 | ||
| 50 | struct hiddev { | ||
| 51 | int exist; | ||
| 52 | int open; | ||
| 53 | struct mutex existancelock; | ||
| 54 | wait_queue_head_t wait; | ||
| 55 | struct hid_device *hid; | ||
| 56 | struct list_head list; | ||
| 57 | spinlock_t list_lock; | ||
| 58 | }; | ||
| 59 | |||
| 60 | struct hiddev_list { | 50 | struct hiddev_list { |
| 61 | struct hiddev_usage_ref buffer[HIDDEV_BUFFER_SIZE]; | 51 | struct hiddev_usage_ref buffer[HIDDEV_BUFFER_SIZE]; |
| 62 | int head; | 52 | int head; |
| @@ -690,6 +680,7 @@ static long hiddev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 690 | 680 | ||
| 691 | case HIDIOCINITREPORT: | 681 | case HIDIOCINITREPORT: |
| 692 | usbhid_init_reports(hid); | 682 | usbhid_init_reports(hid); |
| 683 | hiddev->initialized = true; | ||
| 693 | r = 0; | 684 | r = 0; |
| 694 | break; | 685 | break; |
| 695 | 686 | ||
| @@ -791,6 +782,10 @@ static long hiddev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 791 | case HIDIOCGUSAGES: | 782 | case HIDIOCGUSAGES: |
| 792 | case HIDIOCSUSAGES: | 783 | case HIDIOCSUSAGES: |
| 793 | case HIDIOCGCOLLECTIONINDEX: | 784 | case HIDIOCGCOLLECTIONINDEX: |
| 785 | if (!hiddev->initialized) { | ||
| 786 | usbhid_init_reports(hid); | ||
| 787 | hiddev->initialized = true; | ||
| 788 | } | ||
| 794 | r = hiddev_ioctl_usage(hiddev, cmd, user_arg); | 789 | r = hiddev_ioctl_usage(hiddev, cmd, user_arg); |
| 795 | break; | 790 | break; |
| 796 | 791 | ||
| @@ -911,6 +906,15 @@ int hiddev_connect(struct hid_device *hid, unsigned int force) | |||
| 911 | kfree(hiddev); | 906 | kfree(hiddev); |
| 912 | return -1; | 907 | return -1; |
| 913 | } | 908 | } |
| 909 | |||
| 910 | /* | ||
| 911 | * If HID_QUIRK_NO_INIT_REPORTS is set, make sure we don't initialize | ||
| 912 | * the reports. | ||
| 913 | */ | ||
| 914 | hiddev->initialized = hid->quirks & HID_QUIRK_NO_INIT_REPORTS; | ||
| 915 | |||
| 916 | hiddev->minor = usbhid->intf->minor; | ||
| 917 | |||
| 914 | return 0; | 918 | return 0; |
| 915 | } | 919 | } |
| 916 | 920 | ||
