|
49 | 49 | #define FV_RDESC_ORIG_SIZE 130 |
50 | 50 | #define MOMO_RDESC_ORIG_SIZE 87 |
51 | 51 | #define MOMO2_RDESC_ORIG_SIZE 87 |
| 52 | +#define FFG_RDESC_ORIG_SIZE 85 |
52 | 53 |
|
53 | 54 | /* Fixed report descriptors for Logitech Driving Force (and Pro) |
54 | 55 | * wheel controllers |
@@ -334,6 +335,52 @@ static __u8 momo2_rdesc_fixed[] = { |
334 | 335 | 0xC0 /* End Collection */ |
335 | 336 | }; |
336 | 337 |
|
| 338 | +static __u8 ffg_rdesc_fixed[] = { |
| 339 | +0x05, 0x01, /* Usage Page (Desktop), */ |
| 340 | +0x09, 0x04, /* Usage (Joystik), */ |
| 341 | +0xA1, 0x01, /* Collection (Application), */ |
| 342 | +0xA1, 0x02, /* Collection (Logical), */ |
| 343 | +0x95, 0x01, /* Report Count (1), */ |
| 344 | +0x75, 0x0A, /* Report Size (10), */ |
| 345 | +0x15, 0x00, /* Logical Minimum (0), */ |
| 346 | +0x26, 0xFF, 0x03, /* Logical Maximum (1023), */ |
| 347 | +0x35, 0x00, /* Physical Minimum (0), */ |
| 348 | +0x46, 0xFF, 0x03, /* Physical Maximum (1023), */ |
| 349 | +0x09, 0x30, /* Usage (X), */ |
| 350 | +0x81, 0x02, /* Input (Variable), */ |
| 351 | +0x95, 0x06, /* Report Count (6), */ |
| 352 | +0x75, 0x01, /* Report Size (1), */ |
| 353 | +0x25, 0x01, /* Logical Maximum (1), */ |
| 354 | +0x45, 0x01, /* Physical Maximum (1), */ |
| 355 | +0x05, 0x09, /* Usage Page (Button), */ |
| 356 | +0x19, 0x01, /* Usage Minimum (01h), */ |
| 357 | +0x29, 0x06, /* Usage Maximum (06h), */ |
| 358 | +0x81, 0x02, /* Input (Variable), */ |
| 359 | +0x95, 0x01, /* Report Count (1), */ |
| 360 | +0x75, 0x08, /* Report Size (8), */ |
| 361 | +0x26, 0xFF, 0x00, /* Logical Maximum (255), */ |
| 362 | +0x46, 0xFF, 0x00, /* Physical Maximum (255), */ |
| 363 | +0x06, 0x00, 0xFF, /* Usage Page (FF00h), */ |
| 364 | +0x09, 0x01, /* Usage (01h), */ |
| 365 | +0x81, 0x02, /* Input (Variable), */ |
| 366 | +0x05, 0x01, /* Usage Page (Desktop), */ |
| 367 | +0x81, 0x01, /* Input (Constant), */ |
| 368 | +0x09, 0x31, /* Usage (Y), */ |
| 369 | +0x81, 0x02, /* Input (Variable), */ |
| 370 | +0x09, 0x32, /* Usage (Z), */ |
| 371 | +0x81, 0x02, /* Input (Variable), */ |
| 372 | +0x06, 0x00, 0xFF, /* Usage Page (FF00h), */ |
| 373 | +0x09, 0x01, /* Usage (01h), */ |
| 374 | +0x81, 0x02, /* Input (Variable), */ |
| 375 | +0xC0, /* End Collection, */ |
| 376 | +0xA1, 0x02, /* Collection (Logical), */ |
| 377 | +0x09, 0x02, /* Usage (02h), */ |
| 378 | +0x95, 0x07, /* Report Count (7), */ |
| 379 | +0x91, 0x02, /* Output (Variable), */ |
| 380 | +0xC0, /* End Collection, */ |
| 381 | +0xC0 /* End Collection */ |
| 382 | +}; |
| 383 | + |
337 | 384 | /* |
338 | 385 | * Certain Logitech keyboards send in report #3 keys which are far |
339 | 386 | * above the logical maximum described in descriptor. This extends |
@@ -361,6 +408,15 @@ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc, |
361 | 408 |
|
362 | 409 | switch (hdev->product) { |
363 | 410 |
|
| 411 | + case USB_DEVICE_ID_LOGITECH_WINGMAN_FFG: |
| 412 | + if (*rsize == FFG_RDESC_ORIG_SIZE) { |
| 413 | + hid_info(hdev, |
| 414 | + "fixing up Logitech Wingman Formula Force GP report descriptor\n"); |
| 415 | + rdesc = ffg_rdesc_fixed; |
| 416 | + *rsize = sizeof(ffg_rdesc_fixed); |
| 417 | + } |
| 418 | + break; |
| 419 | + |
364 | 420 | /* Several wheels report as this id when operating in emulation mode. */ |
365 | 421 | case USB_DEVICE_ID_LOGITECH_WHEEL: |
366 | 422 | if (*rsize == DF_RDESC_ORIG_SIZE) { |
@@ -608,6 +664,7 @@ static int lg_input_mapped(struct hid_device *hdev, struct hid_input *hi, |
608 | 664 | usage->code == ABS_RZ)) { |
609 | 665 | switch (hdev->product) { |
610 | 666 | case USB_DEVICE_ID_LOGITECH_G29_WHEEL: |
| 667 | + case USB_DEVICE_ID_LOGITECH_WINGMAN_FFG: |
611 | 668 | case USB_DEVICE_ID_LOGITECH_WHEEL: |
612 | 669 | case USB_DEVICE_ID_LOGITECH_MOMO_WHEEL: |
613 | 670 | case USB_DEVICE_ID_LOGITECH_DFP_WHEEL: |
@@ -807,7 +864,7 @@ static const struct hid_device_id lg_devices[] = { |
807 | 864 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL), |
808 | 865 | .driver_data = LG_FF4 }, |
809 | 866 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG), |
810 | | - .driver_data = LG_FF }, |
| 867 | + .driver_data = LG_NOGET | LG_FF4 }, |
811 | 868 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2), |
812 | 869 | .driver_data = LG_FF2 }, |
813 | 870 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940), |
|
0 commit comments