Skip to content

Commit ecc96e7

Browse files
committed
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: Add support for Sony Vaio VGX-TP1E HID: fix lock imbalance in hiddev HID: fix lock imbalance in hidraw HID: fix hidbus/appletouch device binding regression HID: add hid_type to general hid struct HID: quirk for OLED devices present in ASUS G50/G70/G71 HID: Remove "default m" for Thrustmaster and Zeroplus HID: fix hidraw_exit section mismatch HID: add support for another Gyration remote control Revert "HID: Invert HWHEEL mappings for some Logitech mice"
2 parents a1a739c + cc6e0bb commit ecc96e7

File tree

11 files changed

+124
-57
lines changed

11 files changed

+124
-57
lines changed

drivers/hid/Kconfig

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,6 @@ config HID_SUNPLUS
247247

248248
config THRUSTMASTER_FF
249249
tristate "ThrustMaster devices support"
250-
default m
251250
depends on USB_HID
252251
select INPUT_FF_MEMLESS
253252
help
@@ -256,7 +255,6 @@ config THRUSTMASTER_FF
256255

257256
config ZEROPLUS_FF
258257
tristate "Zeroplus based game controller support"
259-
default m
260258
depends on USB_HID
261259
select INPUT_FF_MEMLESS
262260
help

drivers/hid/hid-apple.c

Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -312,13 +312,6 @@ static int apple_probe(struct hid_device *hdev,
312312
unsigned int connect_mask = HID_CONNECT_DEFAULT;
313313
int ret;
314314

315-
/* return something else or move to hid layer? device will reside
316-
allocated */
317-
if (id->bus == BUS_USB && (quirks & APPLE_IGNORE_MOUSE) &&
318-
to_usb_interface(hdev->dev.parent)->cur_altsetting->
319-
desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
320-
return -ENODEV;
321-
322315
asc = kzalloc(sizeof(*asc), GFP_KERNEL);
323316
if (asc == NULL) {
324317
dev_err(&hdev->dev, "can't alloc apple descriptor\n");
@@ -367,53 +360,45 @@ static const struct hid_device_id apple_devices[] = {
367360
.driver_data = APPLE_MIGHTYMOUSE | APPLE_INVERT_HWHEEL },
368361

369362
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI),
370-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
371-
APPLE_IGNORE_MOUSE },
363+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
372364
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO),
373-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
374-
APPLE_IGNORE_MOUSE },
365+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
375366
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI),
376-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
377-
APPLE_IGNORE_MOUSE },
367+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
378368
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO),
379369
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
380-
APPLE_IGNORE_MOUSE | APPLE_ISO_KEYBOARD },
370+
APPLE_ISO_KEYBOARD },
381371
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS),
382-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
383-
APPLE_IGNORE_MOUSE },
372+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
384373
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI),
385-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
386-
APPLE_IGNORE_MOUSE },
374+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
387375
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO),
388376
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
389-
APPLE_IGNORE_MOUSE | APPLE_ISO_KEYBOARD },
377+
APPLE_ISO_KEYBOARD },
390378
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS),
391379
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
392-
APPLE_IGNORE_MOUSE | APPLE_RDESC_JIS },
380+
APPLE_RDESC_JIS },
393381
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI),
394-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
395-
APPLE_IGNORE_MOUSE },
382+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
396383
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO),
397384
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
398-
APPLE_IGNORE_MOUSE | APPLE_ISO_KEYBOARD },
385+
APPLE_ISO_KEYBOARD },
399386
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS),
400387
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
401-
APPLE_IGNORE_MOUSE | APPLE_RDESC_JIS},
388+
APPLE_RDESC_JIS },
402389
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ANSI),
403390
.driver_data = APPLE_HAS_FN },
404391
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ISO),
405392
.driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
406393
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_JIS),
407394
.driver_data = APPLE_HAS_FN },
408395
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI),
409-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
410-
APPLE_IGNORE_MOUSE },
396+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
411397
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO),
412-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
413-
APPLE_IGNORE_MOUSE },
398+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
414399
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS),
415400
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
416-
APPLE_IGNORE_MOUSE | APPLE_RDESC_JIS },
401+
APPLE_RDESC_JIS },
417402
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI),
418403
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
419404
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO),
@@ -422,25 +407,21 @@ static const struct hid_device_id apple_devices[] = {
422407
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS),
423408
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
424409
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI),
425-
.driver_data = APPLE_HAS_FN | APPLE_IGNORE_MOUSE },
410+
.driver_data = APPLE_HAS_FN },
426411
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO),
427-
.driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD |
428-
APPLE_IGNORE_MOUSE },
412+
.driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
429413
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS),
430-
.driver_data = APPLE_HAS_FN | APPLE_IGNORE_MOUSE | APPLE_RDESC_JIS },
414+
.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
431415
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI),
432-
.driver_data = APPLE_HAS_FN | APPLE_IGNORE_MOUSE },
416+
.driver_data = APPLE_HAS_FN },
433417
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO),
434-
.driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD |
435-
APPLE_IGNORE_MOUSE },
418+
.driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
436419
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS),
437-
.driver_data = APPLE_HAS_FN | APPLE_IGNORE_MOUSE | APPLE_RDESC_JIS },
420+
.driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
438421
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY),
439-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
440-
APPLE_IGNORE_MOUSE },
422+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
441423
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY),
442-
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
443-
APPLE_IGNORE_MOUSE },
424+
.driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
444425

445426
/* Apple wireless Mighty Mouse */
446427
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, 0x030c),

drivers/hid/hid-core.c

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,6 +1264,7 @@ static const struct hid_device_id hid_blacklist[] = {
12641264
{ HID_USB_DEVICE(USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_SK8115) },
12651265
{ HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
12661266
{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) },
1267+
{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
12671268
{ HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
12681269
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
12691270
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
@@ -1275,8 +1276,6 @@ static const struct hid_device_id hid_blacklist[] = {
12751276
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KBD) },
12761277
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_ELITE_KBD) },
12771278
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500) },
1278-
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_LX3) },
1279-
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_V150) },
12801279
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D) },
12811280
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL) },
12821281
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD) },
@@ -1295,6 +1294,7 @@ static const struct hid_device_id hid_blacklist[] = {
12951294
{ HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
12961295
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
12971296
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
1297+
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
12981298
{ HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
12991299

13001300
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, 0x030c) },
@@ -1406,6 +1406,7 @@ static const struct hid_device_id hid_ignore_list[] = {
14061406
{ HID_USB_DEVICE(USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1) },
14071407
{ HID_USB_DEVICE(USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232) },
14081408
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_LCM)},
1409+
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_LCM2)},
14091410
{ HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
14101411
{ HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
14111412
{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) },
@@ -1541,6 +1542,40 @@ static const struct hid_device_id hid_ignore_list[] = {
15411542
{ }
15421543
};
15431544

1545+
/**
1546+
* hid_mouse_ignore_list - mouse devices which should not be handled by the hid layer
1547+
*
1548+
* There are composite devices for which we want to ignore only a certain
1549+
* interface. This is a list of devices for which only the mouse interface will
1550+
* be ignored. This allows a dedicated driver to take care of the interface.
1551+
*/
1552+
static const struct hid_device_id hid_mouse_ignore_list[] = {
1553+
/* appletouch driver */
1554+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
1555+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO) },
1556+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI) },
1557+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO) },
1558+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS) },
1559+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI) },
1560+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO) },
1561+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS) },
1562+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI) },
1563+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO) },
1564+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS) },
1565+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI) },
1566+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO) },
1567+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS) },
1568+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI) },
1569+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO) },
1570+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS) },
1571+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI) },
1572+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO) },
1573+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS) },
1574+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
1575+
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
1576+
{ }
1577+
};
1578+
15441579
static bool hid_ignore(struct hid_device *hdev)
15451580
{
15461581
switch (hdev->vendor) {
@@ -1557,6 +1592,10 @@ static bool hid_ignore(struct hid_device *hdev)
15571592
break;
15581593
}
15591594

1595+
if (hdev->type == HID_TYPE_USBMOUSE &&
1596+
hid_match_id(hdev, hid_mouse_ignore_list))
1597+
return true;
1598+
15601599
return !!hid_match_id(hdev, hid_ignore_list);
15611600
}
15621601

drivers/hid/hid-gyration.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* Copyright (c) 1999 Andreas Gal
55
* Copyright (c) 2000-2005 Vojtech Pavlik <[email protected]>
66
* Copyright (c) 2005 Michael Haboustak <[email protected]> for Concept2, Inc
7-
* Copyright (c) 2006-2007 Jiri Kosina
87
* Copyright (c) 2007 Paul Walmsley
98
* Copyright (c) 2008 Jiri Slaby
9+
* Copyright (c) 2006-2008 Jiri Kosina
1010
*/
1111

1212
/*
@@ -40,6 +40,7 @@ static int gyration_input_mapping(struct hid_device *hdev, struct hid_input *hi,
4040
case 0x025: gy_map_key_clear(KEY_PVR); break;
4141
case 0x046: gy_map_key_clear(KEY_MEDIA); break;
4242
case 0x047: gy_map_key_clear(KEY_MP3); break;
43+
case 0x048: gy_map_key_clear(KEY_MEDIA); break;
4344
case 0x049: gy_map_key_clear(KEY_CAMERA); break;
4445
case 0x04a: gy_map_key_clear(KEY_VIDEO); break;
4546

@@ -68,6 +69,7 @@ static int gyration_event(struct hid_device *hdev, struct hid_field *field,
6869

6970
static const struct hid_device_id gyration_devices[] = {
7071
{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) },
72+
{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
7173
{ }
7274
};
7375
MODULE_DEVICE_TABLE(hid, gyration_devices);

drivers/hid/hid-ids.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989

9090
#define USB_VENDOR_ID_ASUS 0x0b05
9191
#define USB_DEVICE_ID_ASUS_LCM 0x1726
92+
#define USB_DEVICE_ID_ASUS_LCM2 0x175b
9293

9394
#define USB_VENDOR_ID_ATEN 0x0557
9495
#define USB_DEVICE_ID_ATEN_UC100KM 0x2004
@@ -236,6 +237,7 @@
236237

237238
#define USB_VENDOR_ID_GYRATION 0x0c16
238239
#define USB_DEVICE_ID_GYRATION_REMOTE 0x0002
240+
#define USB_DEVICE_ID_GYRATION_REMOTE_2 0x0003
239241

240242
#define USB_VENDOR_ID_HAPP 0x078b
241243
#define USB_DEVICE_ID_UGCI_DRIVING 0x0010
@@ -268,8 +270,6 @@
268270
#define USB_DEVICE_ID_LD_MACHINETEST 0x2040
269271

270272
#define USB_VENDOR_ID_LOGITECH 0x046d
271-
#define USB_DEVICE_ID_LOGITECH_LX3 0xc044
272-
#define USB_DEVICE_ID_LOGITECH_V150 0xc047
273273
#define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
274274
#define USB_DEVICE_ID_LOGITECH_HARMONY_FIRST 0xc110
275275
#define USB_DEVICE_ID_LOGITECH_HARMONY_LAST 0xc14f
@@ -350,6 +350,7 @@
350350
#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
351351

352352
#define USB_VENDOR_ID_SONY 0x054c
353+
#define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b
353354
#define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268
354355

355356
#define USB_VENDOR_ID_SOUNDGRAPH 0x15c2

drivers/hid/hid-lg.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -287,11 +287,6 @@ static const struct hid_device_id lg_devices[] = {
287287
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500),
288288
.driver_data = LG_IGNORE_DOUBLED_WHEEL | LG_EXPANDED_KEYMAP },
289289

290-
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_LX3),
291-
.driver_data = LG_INVERT_HWHEEL },
292-
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_V150),
293-
.driver_data = LG_INVERT_HWHEEL },
294-
295290
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D),
296291
.driver_data = LG_NOGET },
297292
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL),

drivers/hid/hid-sony.c

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* Copyright (c) 1999 Andreas Gal
55
* Copyright (c) 2000-2005 Vojtech Pavlik <[email protected]>
66
* Copyright (c) 2005 Michael Haboustak <[email protected]> for Concept2, Inc
7-
* Copyright (c) 2006-2007 Jiri Kosina
87
* Copyright (c) 2007 Paul Walmsley
98
* Copyright (c) 2008 Jiri Slaby
9+
* Copyright (c) 2006-2008 Jiri Kosina
1010
*/
1111

1212
/*
@@ -23,6 +23,26 @@
2323

2424
#include "hid-ids.h"
2525

26+
#define VAIO_RDESC_CONSTANT 0x0001
27+
28+
struct sony_sc {
29+
unsigned long quirks;
30+
};
31+
32+
/* Sony Vaio VGX has wrongly mouse pointer declared as constant */
33+
static void sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
34+
unsigned int rsize)
35+
{
36+
struct sony_sc *sc = hid_get_drvdata(hdev);
37+
38+
if ((sc->quirks & VAIO_RDESC_CONSTANT) &&
39+
rsize >= 56 && rdesc[54] == 0x81 && rdesc[55] == 0x07) {
40+
dev_info(&hdev->dev, "Fixing up Sony Vaio VGX report "
41+
"descriptor\n");
42+
rdesc[55] = 0x06;
43+
}
44+
}
45+
2646
/*
2747
* Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
2848
* to "operational". Without this, the ps3 controller will not report any
@@ -56,6 +76,17 @@ static int sony_set_operational(struct hid_device *hdev)
5676
static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
5777
{
5878
int ret;
79+
unsigned long quirks = id->driver_data;
80+
struct sony_sc *sc;
81+
82+
sc = kzalloc(sizeof(*sc), GFP_KERNEL);
83+
if (sc == NULL) {
84+
dev_err(&hdev->dev, "can't alloc apple descriptor\n");
85+
return -ENOMEM;
86+
}
87+
88+
sc->quirks = quirks;
89+
hid_set_drvdata(hdev, sc);
5990

6091
ret = hid_parse(hdev);
6192
if (ret) {
@@ -78,11 +109,20 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
78109
err_stop:
79110
hid_hw_stop(hdev);
80111
err_free:
112+
kfree(sc);
81113
return ret;
82114
}
83115

116+
static void sony_remove(struct hid_device *hdev)
117+
{
118+
hid_hw_stop(hdev);
119+
kfree(hid_get_drvdata(hdev));
120+
}
121+
84122
static const struct hid_device_id sony_devices[] = {
85123
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
124+
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
125+
.driver_data = VAIO_RDESC_CONSTANT },
86126
{ }
87127
};
88128
MODULE_DEVICE_TABLE(hid, sony_devices);
@@ -91,6 +131,8 @@ static struct hid_driver sony_driver = {
91131
.name = "sony",
92132
.id_table = sony_devices,
93133
.probe = sony_probe,
134+
.remove = sony_remove,
135+
.report_fixup = sony_report_fixup,
94136
};
95137

96138
static int sony_init(void)

drivers/hid/hidraw.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd,
264264
default:
265265
ret = -ENOTTY;
266266
}
267+
unlock_kernel();
267268
return ret;
268269
}
269270

@@ -403,7 +404,7 @@ int __init hidraw_init(void)
403404
return result;
404405
}
405406

406-
void __exit hidraw_exit(void)
407+
void hidraw_exit(void)
407408
{
408409
dev_t dev_id = MKDEV(hidraw_major, 0);
409410

0 commit comments

Comments
 (0)