diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-05-02 19:29:47 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-05-02 19:29:47 -0400 |
commit | 020f932bd246e9d595f7a006250762d98ffeab46 (patch) | |
tree | b2ab5dc5bea498368148664d226820bac9ab24f2 | |
parent | 912e7796b06fa9b1006835605e27c42e46801b8f (diff) | |
parent | e5288eb5ea89bd82d897cb687348bc608278f920 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid:
HID: fix oops in hid_check_keys_pressed()
HID: fix possible deadlock in usbhid_close()
HID: Fix the support for apple mini aluminium keyboard
HID: Add support for the G25 force feedback wheel in native mode
HID: hidraw -- fix missing unlocks in unlocked_ioctl
-rw-r--r-- | drivers/hid/hid-apple.c | 2 | ||||
-rw-r--r-- | drivers/hid/hid-core.c | 4 | ||||
-rw-r--r-- | drivers/hid/hid-ids.h | 1 | ||||
-rw-r--r-- | drivers/hid/hid-lg.c | 2 | ||||
-rw-r--r-- | drivers/hid/hidraw.c | 12 | ||||
-rw-r--r-- | drivers/hid/usbhid/hid-core.c | 2 |
6 files changed, 17 insertions, 6 deletions
diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c index 7359d9d88e46..acbce5745b0c 100644 --- a/drivers/hid/hid-apple.c +++ b/drivers/hid/hid-apple.c | |||
@@ -151,7 +151,7 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input, | |||
151 | if (fnmode) { | 151 | if (fnmode) { |
152 | int do_translate; | 152 | int do_translate; |
153 | 153 | ||
154 | trans = apple_find_translation((hid->product < 0x220 || | 154 | trans = apple_find_translation((hid->product < 0x21d || |
155 | hid->product >= 0x300) ? | 155 | hid->product >= 0x300) ? |
156 | powerbook_fn_keys : apple_fn_keys, | 156 | powerbook_fn_keys : apple_fn_keys, |
157 | usage->code); | 157 | usage->code); |
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 5746a5903bce..8551693d645f 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
@@ -1293,6 +1293,7 @@ static const struct hid_device_id hid_blacklist[] = { | |||
1293 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) }, | 1293 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) }, |
1294 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) }, | 1294 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) }, |
1295 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) }, | 1295 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) }, |
1296 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) }, | ||
1296 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) }, | 1297 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) }, |
1297 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) }, | 1298 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) }, |
1298 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) }, | 1299 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) }, |
@@ -1824,6 +1825,9 @@ int hid_check_keys_pressed(struct hid_device *hid) | |||
1824 | struct hid_input *hidinput; | 1825 | struct hid_input *hidinput; |
1825 | int i; | 1826 | int i; |
1826 | 1827 | ||
1828 | if (!(hid->claimed & HID_CLAIMED_INPUT)) | ||
1829 | return 0; | ||
1830 | |||
1827 | list_for_each_entry(hidinput, &hid->inputs, list) { | 1831 | list_for_each_entry(hidinput, &hid->inputs, list) { |
1828 | for (i = 0; i < BITS_TO_LONGS(KEY_MAX); i++) | 1832 | for (i = 0; i < BITS_TO_LONGS(KEY_MAX); i++) |
1829 | if (hidinput->input->key[i]) | 1833 | if (hidinput->input->key[i]) |
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index bdeda4c7cc13..aa1b995dd033 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h | |||
@@ -292,6 +292,7 @@ | |||
292 | #define USB_DEVICE_ID_LOGITECH_FORCE3D_PRO 0xc286 | 292 | #define USB_DEVICE_ID_LOGITECH_FORCE3D_PRO 0xc286 |
293 | #define USB_DEVICE_ID_LOGITECH_WHEEL 0xc294 | 293 | #define USB_DEVICE_ID_LOGITECH_WHEEL 0xc294 |
294 | #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL 0xc295 | 294 | #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL 0xc295 |
295 | #define USB_DEVICE_ID_LOGITECH_G25_WHEEL 0xc299 | ||
295 | #define USB_DEVICE_ID_LOGITECH_ELITE_KBD 0xc30a | 296 | #define USB_DEVICE_ID_LOGITECH_ELITE_KBD 0xc30a |
296 | #define USB_DEVICE_ID_S510_RECEIVER 0xc50c | 297 | #define USB_DEVICE_ID_S510_RECEIVER 0xc50c |
297 | #define USB_DEVICE_ID_S510_RECEIVER_2 0xc517 | 298 | #define USB_DEVICE_ID_S510_RECEIVER_2 0xc517 |
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c index 7b80cb694982..7afbaa0efd18 100644 --- a/drivers/hid/hid-lg.c +++ b/drivers/hid/hid-lg.c | |||
@@ -297,6 +297,8 @@ static const struct hid_device_id lg_devices[] = { | |||
297 | .driver_data = LG_FF }, | 297 | .driver_data = LG_FF }, |
298 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2), | 298 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2), |
299 | .driver_data = LG_FF }, | 299 | .driver_data = LG_FF }, |
300 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL), | ||
301 | .driver_data = LG_FF }, | ||
300 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2), | 302 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2), |
301 | .driver_data = LG_FF2 }, | 303 | .driver_data = LG_FF2 }, |
302 | { } | 304 | { } |
diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c index e263d4731179..00ccf4b1985d 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c | |||
@@ -285,8 +285,10 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd, | |||
285 | 285 | ||
286 | if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWNAME(0))) { | 286 | if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWNAME(0))) { |
287 | int len; | 287 | int len; |
288 | if (!hid->name) | 288 | if (!hid->name) { |
289 | return 0; | 289 | ret = 0; |
290 | break; | ||
291 | } | ||
290 | len = strlen(hid->name) + 1; | 292 | len = strlen(hid->name) + 1; |
291 | if (len > _IOC_SIZE(cmd)) | 293 | if (len > _IOC_SIZE(cmd)) |
292 | len = _IOC_SIZE(cmd); | 294 | len = _IOC_SIZE(cmd); |
@@ -297,8 +299,10 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd, | |||
297 | 299 | ||
298 | if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWPHYS(0))) { | 300 | if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWPHYS(0))) { |
299 | int len; | 301 | int len; |
300 | if (!hid->phys) | 302 | if (!hid->phys) { |
301 | return 0; | 303 | ret = 0; |
304 | break; | ||
305 | } | ||
302 | len = strlen(hid->phys) + 1; | 306 | len = strlen(hid->phys) + 1; |
303 | if (len > _IOC_SIZE(cmd)) | 307 | if (len > _IOC_SIZE(cmd)) |
304 | len = _IOC_SIZE(cmd); | 308 | len = _IOC_SIZE(cmd); |
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 4306cb1b8ce5..900ce18dd549 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c | |||
@@ -662,8 +662,8 @@ void usbhid_close(struct hid_device *hid) | |||
662 | spin_lock_irq(&usbhid->lock); | 662 | spin_lock_irq(&usbhid->lock); |
663 | if (!--hid->open) { | 663 | if (!--hid->open) { |
664 | spin_unlock_irq(&usbhid->lock); | 664 | spin_unlock_irq(&usbhid->lock); |
665 | hid_cancel_delayed_stuff(usbhid); | ||
665 | usb_kill_urb(usbhid->urbin); | 666 | usb_kill_urb(usbhid->urbin); |
666 | flush_scheduled_work(); | ||
667 | usbhid->intf->needs_remote_wakeup = 0; | 667 | usbhid->intf->needs_remote_wakeup = 0; |
668 | } else { | 668 | } else { |
669 | spin_unlock_irq(&usbhid->lock); | 669 | spin_unlock_irq(&usbhid->lock); |