diff options
Diffstat (limited to 'drivers/hid/hid-lg.c')
| -rw-r--r-- | drivers/hid/hid-lg.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c index a7f916e8fc32..e7a7bd1eb34a 100644 --- a/drivers/hid/hid-lg.c +++ b/drivers/hid/hid-lg.c | |||
| @@ -363,7 +363,7 @@ static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
| 363 | goto err_free; | 363 | goto err_free; |
| 364 | } | 364 | } |
| 365 | 365 | ||
| 366 | if (quirks & (LG_FF | LG_FF2 | LG_FF3)) | 366 | if (quirks & (LG_FF | LG_FF2 | LG_FF3 | LG_FF4)) |
| 367 | connect_mask &= ~HID_CONNECT_FF; | 367 | connect_mask &= ~HID_CONNECT_FF; |
| 368 | 368 | ||
| 369 | ret = hid_hw_start(hdev, connect_mask); | 369 | ret = hid_hw_start(hdev, connect_mask); |
| @@ -372,7 +372,8 @@ static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
| 372 | goto err_free; | 372 | goto err_free; |
| 373 | } | 373 | } |
| 374 | 374 | ||
| 375 | if (quirks & LG_FF4) { | 375 | /* Setup wireless link with Logitech Wii wheel */ |
| 376 | if(hdev->product == USB_DEVICE_ID_LOGITECH_WII_WHEEL) { | ||
| 376 | unsigned char buf[] = { 0x00, 0xAF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; | 377 | unsigned char buf[] = { 0x00, 0xAF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; |
| 377 | 378 | ||
| 378 | ret = hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT); | 379 | ret = hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT); |
| @@ -405,6 +406,15 @@ err_free: | |||
| 405 | return ret; | 406 | return ret; |
| 406 | } | 407 | } |
| 407 | 408 | ||
| 409 | static void lg_remove(struct hid_device *hdev) | ||
| 410 | { | ||
| 411 | unsigned long quirks = (unsigned long)hid_get_drvdata(hdev); | ||
| 412 | if(quirks & LG_FF4) | ||
| 413 | lg4ff_deinit(hdev); | ||
| 414 | |||
| 415 | hid_hw_stop(hdev); | ||
| 416 | } | ||
| 417 | |||
| 408 | static const struct hid_device_id lg_devices[] = { | 418 | static const struct hid_device_id lg_devices[] = { |
| 409 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER), | 419 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER), |
| 410 | .driver_data = LG_RDESC | LG_WIRELESS }, | 420 | .driver_data = LG_RDESC | LG_WIRELESS }, |
| @@ -431,7 +441,7 @@ static const struct hid_device_id lg_devices[] = { | |||
| 431 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D), | 441 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D), |
| 432 | .driver_data = LG_NOGET }, | 442 | .driver_data = LG_NOGET }, |
| 433 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL), | 443 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL), |
| 434 | .driver_data = LG_NOGET | LG_FF }, | 444 | .driver_data = LG_NOGET | LG_FF4 }, |
| 435 | 445 | ||
| 436 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD), | 446 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD), |
| 437 | .driver_data = LG_FF2 }, | 447 | .driver_data = LG_FF2 }, |
| @@ -444,15 +454,17 @@ static const struct hid_device_id lg_devices[] = { | |||
| 444 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO), | 454 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO), |
| 445 | .driver_data = LG_FF }, | 455 | .driver_data = LG_FF }, |
| 446 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL), | 456 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL), |
| 447 | .driver_data = LG_FF }, | 457 | .driver_data = LG_FF4 }, |
| 448 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2), | 458 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2), |
| 449 | .driver_data = LG_FF }, | 459 | .driver_data = LG_FF4 }, |
| 450 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL), | 460 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL), |
| 451 | .driver_data = LG_FF }, | 461 | .driver_data = LG_FF4 }, |
| 462 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFGT_WHEEL), | ||
| 463 | .driver_data = LG_FF4 }, | ||
| 452 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G27_WHEEL), | 464 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G27_WHEEL), |
| 453 | .driver_data = LG_FF }, | 465 | .driver_data = LG_FF4 }, |
| 454 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFP_WHEEL), | 466 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFP_WHEEL), |
| 455 | .driver_data = LG_NOGET | LG_FF }, | 467 | .driver_data = LG_NOGET | LG_FF4 }, |
| 456 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL), | 468 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL), |
| 457 | .driver_data = LG_FF4 }, | 469 | .driver_data = LG_FF4 }, |
| 458 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ), | 470 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ), |
| @@ -478,6 +490,7 @@ static struct hid_driver lg_driver = { | |||
| 478 | .input_mapped = lg_input_mapped, | 490 | .input_mapped = lg_input_mapped, |
| 479 | .event = lg_event, | 491 | .event = lg_event, |
| 480 | .probe = lg_probe, | 492 | .probe = lg_probe, |
| 493 | .remove = lg_remove, | ||
| 481 | }; | 494 | }; |
| 482 | 495 | ||
| 483 | static int __init lg_init(void) | 496 | static int __init lg_init(void) |
