Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-7.1/sony' into for-linus

- new support for a variety of Rock Band and DJ Hero Turntable devices
(Rosalie Wanders)

+353 -84
+7 -5
drivers/hid/Kconfig
··· 1087 1087 help 1088 1088 Support for 1089 1089 1090 - * Sony PS3 6-axis controllers 1090 + * Sixaxis controllers for PS3 1091 1091 * Buzz controllers 1092 - * Sony PS3 Blue-ray Disk Remote Control (Bluetooth) 1093 - * Logitech Harmony adapter for Sony Playstation 3 (Bluetooth) 1094 - * Guitar Hero Live PS3, Wii U and PS4 guitar dongles 1095 - * Guitar Hero PS3 and PC guitar dongles 1092 + * Blu-ray Disc Remote Control for PS3 1093 + * Logitech Harmony adapter for PS3 1094 + * Guitar Hero Live PS3, Wii U and PS4 guitars 1095 + * Guitar Hero PS3 and PC guitars 1096 + * Rock Band 1, 2 and 3 PS3 and Wii instruments 1096 1097 * Rock Band 4 PS4 and PS5 guitars 1098 + * DJ Hero Turntable for PS3 1097 1099 1098 1100 config SONY_FF 1099 1101 bool "Sony PS2/3/4 accessories force feedback support"
+24 -2
drivers/hid/hid-ids.h
··· 667 667 #define USB_DEVICE_ID_UGCI_FLYING 0x0020 668 668 #define USB_DEVICE_ID_UGCI_FIGHTING 0x0030 669 669 670 + #define USB_VENDOR_ID_HARMONIX 0x1bad 671 + #define USB_DEVICE_ID_HARMONIX_WII_RB1_GUITAR 0x0004 672 + #define USB_DEVICE_ID_HARMONIX_WII_RB2_GUITAR 0x3010 673 + #define USB_DEVICE_ID_HARMONIX_WII_RB1_DRUMS 0x0005 674 + #define USB_DEVICE_ID_HARMONIX_WII_RB2_DRUMS 0x3110 675 + #define USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_DRUMS_MODE 0x3138 676 + #define USB_DEVICE_ID_HARMONIX_WII_RB3_MUSTANG_GUITAR 0x3430 677 + #define USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_MUSTANG_MODE 0x3438 678 + #define USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_SQUIER_MODE 0x3538 679 + #define USB_DEVICE_ID_HARMONIX_WII_RB3_KEYBOARD 0x3330 680 + #define USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_KEYBOARD_MODE 0x3338 681 + 670 682 #define USB_VENDOR_ID_HP 0x03f0 671 683 #define USB_PRODUCT_ID_HP_ELITE_PRESENTER_MOUSE_464A 0x464a 672 684 #define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A 0x0a4a ··· 1313 1301 #define USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER 0x1000 1314 1302 1315 1303 #define USB_VENDOR_ID_SONY_RHYTHM 0x12ba 1316 - #define USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE_DONGLE 0x074b 1317 - #define USB_DEVICE_ID_SONY_PS3_GUITAR_DONGLE 0x0100 1304 + #define USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE 0x074b 1305 + #define USB_DEVICE_ID_SONY_PS3_GH_GUITAR 0x0100 1306 + #define USB_DEVICE_ID_SONY_PS3_GH_DRUMS 0x0120 1307 + #define USB_DEVICE_ID_SONY_PS3_DJH_TURNTABLE 0x0140 1308 + #define USB_DEVICE_ID_SONY_PS3_RB_GUITAR 0x0200 1309 + #define USB_DEVICE_ID_SONY_PS3_RB_DRUMS 0x0210 1310 + #define USB_DEVICE_ID_SONY_PS3_RB3_MPA_DRUMS_MODE 0x0218 1311 + #define USB_DEVICE_ID_SONY_PS3_RB3_MUSTANG_GUITAR 0x2430 1312 + #define USB_DEVICE_ID_SONY_PS3_RB3_MPA_MUSTANG_MODE 0x2438 1313 + #define USB_DEVICE_ID_SONY_PS3_RB3_MPA_SQUIER_MODE 0x2538 1314 + #define USB_DEVICE_ID_SONY_PS3_RB3_KEYBOARD 0x2330 1315 + #define USB_DEVICE_ID_SONY_PS3_RB3_MPA_KEYBOARD_MODE 0x2338 1318 1316 1319 1317 #define USB_VENDOR_ID_SINO_LITE 0x1345 1320 1318 #define USB_DEVICE_ID_SINO_LITE_CONTROLLER 0x3008
+39 -7
drivers/hid/hid-quirks.c
··· 692 692 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) }, 693 693 #endif 694 694 #if IS_ENABLED(CONFIG_HID_SONY) 695 + { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS4_GIBSON_SG) }, 696 + { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS4_GIBSON_SG_DONGLE) }, 697 + { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS5_GIBSON_SG) }, 698 + { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS5_GIBSON_SG_DONGLE) }, 699 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB1_DRUMS) }, 700 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB1_GUITAR) }, 701 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_DRUMS) }, 702 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_GUITAR) }, 703 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_KEYBOARD) }, 704 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_DRUMS_MODE) }, 705 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_KEYBOARD_MODE) }, 706 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_MUSTANG_MODE) }, 707 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_SQUIER_MODE) }, 708 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MUSTANG_GUITAR) }, 695 709 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) }, 696 - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) }, 710 + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_PS4_STRATOCASTER) }, 711 + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS4_JAGUAR) }, 712 + { HID_USB_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS4_RIFFMASTER) }, 713 + { HID_USB_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS5_RIFFMASTER) }, 714 + { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_GUITAR_DONGLE) }, 715 + { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_PS4_GHLIVE_DONGLE) }, 716 + { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER) }, 697 717 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR5U_REMOTE) }, 698 718 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR7U_REMOTE) }, 719 + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) }, 699 720 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) }, 700 - { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) }, 701 - { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) }, 702 721 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) }, 703 - { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) }, 722 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) }, 704 723 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) }, 724 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) }, 705 725 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) }, 706 - { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, 707 726 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, 708 - { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, 727 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, 709 728 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) }, 710 - { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER) }, 729 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, 730 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) }, 731 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE) }, 732 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_DJH_TURNTABLE) }, 733 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GH_DRUMS) }, 734 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GH_GUITAR) }, 735 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_KEYBOARD) }, 736 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_DRUMS_MODE) }, 737 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_KEYBOARD_MODE) }, 738 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_MUSTANG_MODE) }, 739 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_SQUIER_MODE) }, 740 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MUSTANG_GUITAR) }, 741 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB_DRUMS) }, 742 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB_GUITAR) }, 711 743 #endif 712 744 #if IS_ENABLED(CONFIG_HID_SPEEDLINK) 713 745 { HID_USB_DEVICE(USB_VENDOR_ID_X_TENSIONS, USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE) },
+283 -70
drivers/hid/hid-sony.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0-or-later 2 2 /* 3 - * HID driver for Sony / PS2 / PS3 / PS4 BD devices. 3 + * HID driver for Sony / PS2 / PS3 BD / PS4 / PS5 devices. 4 4 * 5 5 * Copyright (c) 1999 Andreas Gal 6 6 * Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz> ··· 12 12 * Copyright (c) 2014-2016 Frank Praznik <frank.praznik@gmail.com> 13 13 * Copyright (c) 2018 Todd Kelner 14 14 * Copyright (c) 2020-2021 Pascal Giard <pascal.giard@etsmtl.ca> 15 - * Copyright (c) 2020 Sanjay Govind <sanjay.govind9@gmail.com> 15 + * Copyright (c) 2020-2026 Sanjay Govind <sanjay.govind9@gmail.com> 16 16 * Copyright (c) 2021 Daniel Nguyen <daniel.nguyen.1@ens.etsmtl.ca> 17 17 * Copyright (c) 2026 Rosalie Wanders <rosalie@mailbox.org> 18 + * Copyright (c) 2026 Brenton Simpson <appsforartists@google.com> 18 19 */ 19 20 20 21 /* ··· 60 59 #define NSG_MR5U_REMOTE_BT BIT(11) 61 60 #define NSG_MR7U_REMOTE_BT BIT(12) 62 61 #define SHANWAN_GAMEPAD BIT(13) 63 - #define GH_GUITAR_CONTROLLER BIT(14) 64 - #define GHL_GUITAR_PS3WIIU BIT(15) 65 - #define GHL_GUITAR_PS4 BIT(16) 66 - #define RB4_GUITAR_PS4_USB BIT(17) 67 - #define RB4_GUITAR_PS4_BT BIT(18) 68 - #define RB4_GUITAR_PS5 BIT(19) 62 + #define INSTRUMENT BIT(14) 63 + #define GH_GUITAR_TILT BIT(15) 64 + #define GHL_GUITAR_PS3WIIU BIT(16) 65 + #define GHL_GUITAR_PS4 BIT(17) 66 + #define RB4_GUITAR_PS4_USB BIT(18) 67 + #define RB4_GUITAR_PS4_BT BIT(19) 68 + #define RB4_GUITAR_PS5 BIT(20) 69 + #define RB3_PRO_INSTRUMENT BIT(21) 70 + #define DJH_TURNTABLE BIT(22) 69 71 70 72 #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT) 71 73 #define MOTION_CONTROLLER (MOTION_CONTROLLER_USB | MOTION_CONTROLLER_BT) ··· 76 72 NAVIGATION_CONTROLLER_BT) 77 73 #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER | BUZZ_CONTROLLER |\ 78 74 MOTION_CONTROLLER | NAVIGATION_CONTROLLER) 79 - #define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER) 75 + #define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER |\ 76 + RB4_GUITAR_PS5) 80 77 #define SONY_FF_SUPPORT (SIXAXIS_CONTROLLER | MOTION_CONTROLLER) 81 78 #define SONY_BT_DEVICE (SIXAXIS_CONTROLLER_BT | MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER_BT) 82 79 #define NSG_MRXU_REMOTE (NSG_MR5U_REMOTE_BT | NSG_MR7U_REMOTE_BT) ··· 91 86 */ 92 87 #define GHL_GUITAR_POKE_INTERVAL 8 /* In seconds */ 93 88 #define GUITAR_TILT_USAGE 44 89 + 90 + #define TURNTABLE_EFFECTS_KNOB_USAGE 44 91 + #define TURNTABLE_PLATTER_BUTTONS_USAGE 45 92 + #define TURNTABLE_CROSS_FADER_USAGE 46 94 93 95 94 /* Magic data taken from GHLtarUtility: 96 95 * https://github.com/ghlre/GHLtarUtility/blob/master/PS3Guitar.cs ··· 436 427 [0x31] = ABS_Y, 437 428 }; 438 429 439 - static const unsigned int rb4_keymap[] = { 440 - [0x1] = BTN_WEST, /* Square */ 441 - [0x2] = BTN_SOUTH, /* Cross */ 442 - [0x3] = BTN_EAST, /* Circle */ 443 - [0x4] = BTN_NORTH, /* Triangle */ 444 - [0x5] = BTN_TL, /* L1 */ 445 - [0x6] = BTN_TR, /* R1 */ 446 - [0x7] = BTN_TL2, /* L2 */ 447 - [0x8] = BTN_TR2, /* R2 */ 448 - [0x9] = BTN_SELECT, /* Share */ 449 - [0xa] = BTN_START, /* Options */ 450 - [0xb] = BTN_THUMBL, /* L3 */ 451 - [0xc] = BTN_THUMBR, /* R3 */ 452 - [0xd] = BTN_MODE, /* PS */ 430 + static const unsigned int ps3_turntable_absmap[] = { 431 + [0x32] = ABS_X, 432 + [0x35] = ABS_Y, 433 + }; 434 + 435 + static const unsigned int instrument_keymap[] = { 436 + [0x1] = BTN_WEST, 437 + [0x2] = BTN_SOUTH, 438 + [0x3] = BTN_EAST, 439 + [0x4] = BTN_NORTH, 440 + [0x5] = BTN_TL, 441 + [0x6] = BTN_TR, 442 + [0x7] = BTN_TL2, 443 + [0x8] = BTN_TR2, 444 + [0x9] = BTN_SELECT, 445 + [0xa] = BTN_START, 446 + [0xb] = BTN_THUMBL, 447 + [0xc] = BTN_THUMBR, 448 + [0xd] = BTN_MODE, 453 449 }; 454 450 455 451 static enum power_supply_property sony_battery_props[] = { ··· 471 457 u8 duty_off; /* % of duty_length the led is off (0xff means 100%) */ 472 458 u8 duty_on; /* % of duty_length the led is on (0xff mean 100%) */ 473 459 } __packed; 460 + static_assert(sizeof(struct sixaxis_led) == 5); 474 461 475 462 struct sixaxis_rumble { 476 463 u8 padding; ··· 480 465 u8 left_duration; /* Left motor duration (0xff means forever) */ 481 466 u8 left_motor_force; /* left (large) motor, supports force values from 0 to 255 */ 482 467 } __packed; 468 + static_assert(sizeof(struct sixaxis_rumble) == 5); 483 469 484 470 struct sixaxis_output_report { 485 471 u8 report_id; ··· 490 474 struct sixaxis_led led[4]; /* LEDx at (4 - x) */ 491 475 struct sixaxis_led _reserved; /* LED5, not actually soldered */ 492 476 } __packed; 477 + static_assert(sizeof(struct sixaxis_output_report) == 36); 493 478 494 479 union sixaxis_output_report_01 { 495 480 struct sixaxis_output_report data; 496 481 u8 buf[36]; 497 482 }; 483 + static_assert(sizeof(union sixaxis_output_report_01) == 36); 498 484 499 485 struct motion_output_report_02 { 500 486 u8 type, zero; ··· 504 486 u8 zero2; 505 487 u8 rumble; 506 488 }; 489 + static_assert(sizeof(struct motion_output_report_02) == 7); 507 490 508 491 #define SIXAXIS_REPORT_0xF2_SIZE 17 509 492 #define SIXAXIS_REPORT_0xF5_SIZE 8 510 493 #define MOTION_REPORT_0x02_SIZE 49 494 + #define PRO_INSTRUMENT_0x00_SIZE 8 511 495 512 496 #define SENSOR_SUFFIX " Motion Sensors" 513 497 #define TOUCHPAD_SUFFIX " Touchpad" ··· 535 515 struct led_classdev *leds[MAX_LEDS]; 536 516 unsigned long quirks; 537 517 struct work_struct state_worker; 538 - void (*send_output_report)(struct sony_sc *); 518 + void (*send_output_report)(struct sony_sc *sc); 539 519 struct power_supply *battery; 540 520 struct power_supply_desc battery_desc; 541 521 int device_id; ··· 559 539 /* GH Live */ 560 540 struct urb *ghl_urb; 561 541 struct timer_list ghl_poke_timer; 542 + 543 + /* Rock Band 3 Pro Instruments */ 544 + unsigned long rb3_pro_poke_jiffies; 562 545 }; 563 546 564 547 static void sony_set_leds(struct sony_sc *sc); ··· 612 589 pipe = usb_sndctrlpipe(usbdev, 0); 613 590 614 591 cr = devm_kzalloc(&sc->hdev->dev, sizeof(*cr), GFP_ATOMIC); 615 - if (cr == NULL) 592 + if (!cr) 616 593 return -ENOMEM; 617 594 618 595 databuf = devm_kzalloc(&sc->hdev->dev, poke_size, GFP_ATOMIC); 619 - if (databuf == NULL) 596 + if (!databuf) 620 597 return -ENOMEM; 621 598 622 599 cr->bRequestType = ··· 630 607 sc->ghl_urb, usbdev, pipe, 631 608 (unsigned char *) cr, databuf, poke_size, 632 609 ghl_magic_poke_cb, sc); 610 + return 0; 611 + } 612 + 613 + 614 + 615 + /* 616 + * Sending HID_REQ_SET_REPORT enables the full report. Without this 617 + * Rock Band 3 Pro instruments only report navigation events 618 + */ 619 + static int rb3_pro_instrument_enable_full_report(struct sony_sc *sc) 620 + { 621 + struct hid_device *hdev = sc->hdev; 622 + static const u8 report[] = { 0x00, 0xE9, 0x00, 0x89, 0x1B, 623 + 0x00, 0x00, 0x00, 0x02, 0x00, 624 + 0x00, 0x00, 0x00, 0x00, 0x00, 625 + 0x00, 0x00, 0x00, 0x00, 0x00, 626 + 0x00, 0x00, 0x80, 0x00, 0x00, 627 + 0x00, 0x00, 0x89, 0x00, 0x00, 628 + 0x00, 0x00, 0x00, 0xE9, 0x01, 629 + 0x00, 0x00, 0x00, 0x00, 0x00, 630 + 0x00 }; 631 + u8 *buf; 632 + int ret; 633 + 634 + buf = kmemdup(report, sizeof(report), GFP_KERNEL); 635 + if (!buf) 636 + return -ENOMEM; 637 + 638 + ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(report), 639 + HID_FEATURE_REPORT, HID_REQ_SET_REPORT); 640 + 641 + kfree(buf); 642 + 643 + return ret; 644 + } 645 + 646 + static int djh_turntable_mapping(struct hid_device *hdev, struct hid_input *hi, 647 + struct hid_field *field, struct hid_usage *usage, 648 + unsigned long **bit, int *max) 649 + { 650 + if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) { 651 + unsigned int abs = usage->hid & HID_USAGE; 652 + 653 + if (abs == TURNTABLE_CROSS_FADER_USAGE) { 654 + hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RX); 655 + return 1; 656 + } else if (abs == TURNTABLE_EFFECTS_KNOB_USAGE) { 657 + hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RY); 658 + return 1; 659 + } else if (abs == TURNTABLE_PLATTER_BUTTONS_USAGE) { 660 + hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RZ); 661 + return 1; 662 + } 663 + } else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) { 664 + unsigned int abs = usage->hid & HID_USAGE; 665 + 666 + if (abs >= ARRAY_SIZE(ps3_turntable_absmap)) 667 + return -1; 668 + 669 + abs = ps3_turntable_absmap[abs]; 670 + 671 + hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs); 672 + return 1; 673 + } 674 + return 0; 675 + } 676 + 677 + static int instrument_mapping(struct hid_device *hdev, struct hid_input *hi, 678 + struct hid_field *field, struct hid_usage *usage, 679 + unsigned long **bit, int *max) 680 + { 681 + if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) { 682 + unsigned int key = usage->hid & HID_USAGE; 683 + 684 + if (key >= ARRAY_SIZE(instrument_keymap)) 685 + return 0; 686 + 687 + key = instrument_keymap[key]; 688 + hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key); 689 + return 1; 690 + } 691 + 633 692 return 0; 634 693 } 635 694 ··· 734 629 struct hid_field *field, struct hid_usage *usage, 735 630 unsigned long **bit, int *max) 736 631 { 737 - if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) { 738 - unsigned int key = usage->hid & HID_USAGE; 739 - 740 - if (key >= ARRAY_SIZE(rb4_keymap)) 741 - return 0; 742 - 743 - key = rb4_keymap[key]; 744 - hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key); 745 - return 1; 746 - } else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) { 632 + if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) { 747 633 unsigned int abs = usage->hid & HID_USAGE; 748 634 749 635 /* Let the HID parser deal with the HAT. */ ··· 951 855 static const u8 sixaxis_battery_capacity[] = { 0, 1, 25, 50, 75, 100 }; 952 856 unsigned long flags; 953 857 int offset; 858 + u8 index; 954 859 u8 battery_capacity; 955 860 int battery_status; 956 861 ··· 967 870 battery_capacity = 100; 968 871 battery_status = (rd[offset] & 0x01) ? POWER_SUPPLY_STATUS_FULL : POWER_SUPPLY_STATUS_CHARGING; 969 872 } else { 970 - u8 index = rd[offset] <= 5 ? rd[offset] : 5; 873 + index = rd[offset] <= 5 ? rd[offset] : 5; 971 874 battery_capacity = sixaxis_battery_capacity[index]; 972 875 battery_status = POWER_SUPPLY_STATUS_DISCHARGING; 973 876 } ··· 1005 908 * the touch-related data starts at offset 2. 1006 909 * For the first byte, bit 0 is set when touchpad button is pressed. 1007 910 * Bit 2 is set when a touch is active and the drag (Fn) key is pressed. 1008 - * This drag key is mapped to BTN_LEFT. It is operational only when a 911 + * This drag key is mapped to BTN_LEFT. It is operational only when a 1009 912 * touch point is active. 1010 913 * Bit 4 is set when only the first touch point is active. 1011 914 * Bit 6 is set when only the second touch point is active. ··· 1088 991 1089 992 static void rb4_ps5_guitar_parse_report(struct sony_sc *sc, u8 *rd, int size) 1090 993 { 994 + u8 charging_status; 995 + u8 battery_data; 996 + u8 battery_capacity; 997 + u8 battery_status; 998 + unsigned long flags; 999 + 1091 1000 /* 1092 1001 * Rock Band 4 PS5 guitars have whammy and 1093 1002 * tilt functionality, they're located at ··· 1105 1002 */ 1106 1003 input_report_abs(sc->input_dev, ABS_Z, rd[41]); 1107 1004 input_report_abs(sc->input_dev, ABS_RZ, rd[42]); 1005 + 1006 + /* 1007 + * Rock Band 4 PS5 guitars also report the 1008 + * battery status and level at byte 30. 1009 + */ 1010 + charging_status = (rd[30] >> 4) & 0x0F; 1011 + battery_data = rd[30] & 0x0F; 1012 + 1013 + switch (charging_status) { 1014 + case 0x0: 1015 + battery_capacity = min(battery_data * 10 + 5, 100); 1016 + battery_status = POWER_SUPPLY_STATUS_DISCHARGING; 1017 + break; 1018 + case 0x1: 1019 + battery_capacity = min(battery_data * 10 + 5, 100); 1020 + battery_status = POWER_SUPPLY_STATUS_CHARGING; 1021 + break; 1022 + case 0x2: 1023 + battery_capacity = 100; 1024 + battery_status = POWER_SUPPLY_STATUS_FULL; 1025 + break; 1026 + default: 1027 + battery_capacity = 0; 1028 + battery_status = POWER_SUPPLY_STATUS_UNKNOWN; 1029 + break; 1030 + } 1031 + 1032 + spin_lock_irqsave(&sc->lock, flags); 1033 + sc->battery_capacity = battery_capacity; 1034 + sc->battery_status = battery_status; 1035 + spin_unlock_irqrestore(&sc->lock, flags); 1108 1036 1109 1037 input_sync(sc->input_dev); 1110 1038 } ··· 1186 1052 return 1; 1187 1053 } 1188 1054 1055 + /* Rock Band 3 PS3 Pro instruments set rd[24] to 0xE0 when they're 1056 + * sending full reports, and 0x02 when only sending navigation. 1057 + */ 1058 + if ((sc->quirks & RB3_PRO_INSTRUMENT) && rd[24] == 0x02) { 1059 + /* Only attempt to enable full report every 8 seconds */ 1060 + if (time_after(jiffies, sc->rb3_pro_poke_jiffies)) { 1061 + sc->rb3_pro_poke_jiffies = jiffies + secs_to_jiffies(8); 1062 + rb3_pro_instrument_enable_full_report(sc); 1063 + } 1064 + } 1065 + 1189 1066 if (sc->defer_initialization) { 1190 1067 sc->defer_initialization = 0; 1191 1068 sony_schedule_work(sc, SONY_WORKER_STATE); ··· 1210 1065 unsigned long **bit, int *max) 1211 1066 { 1212 1067 struct sony_sc *sc = hid_get_drvdata(hdev); 1068 + int ret; 1213 1069 1214 1070 if (sc->quirks & BUZZ_CONTROLLER) { 1215 1071 unsigned int key = usage->hid & HID_USAGE; ··· 1244 1098 if (sc->quirks & SIXAXIS_CONTROLLER) 1245 1099 return sixaxis_mapping(hdev, hi, field, usage, bit, max); 1246 1100 1247 - if (sc->quirks & GH_GUITAR_CONTROLLER) 1101 + /* INSTRUMENT quirk is used as a base mapping for instruments */ 1102 + if (sc->quirks & INSTRUMENT) { 1103 + ret = instrument_mapping(hdev, hi, field, usage, bit, max); 1104 + if (ret != 0) 1105 + return ret; 1106 + } 1107 + 1108 + if (sc->quirks & GH_GUITAR_TILT) 1248 1109 return gh_guitar_mapping(hdev, hi, field, usage, bit, max); 1110 + 1111 + if (sc->quirks & DJH_TURNTABLE) 1112 + return djh_turntable_mapping(hdev, hi, field, usage, bit, max); 1249 1113 1250 1114 if (sc->quirks & (RB4_GUITAR_PS4_USB | RB4_GUITAR_PS4_BT)) 1251 1115 return rb4_guitar_mapping(hdev, hi, field, usage, bit, max); ··· 1309 1153 input_set_abs_params(sc->touchpad, ABS_MT_POSITION_Y, 0, h, 0, 0); 1310 1154 1311 1155 if (touch_major > 0) { 1312 - input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MAJOR, 1156 + input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MAJOR, 1313 1157 0, touch_major, 0, 0); 1314 1158 if (touch_minor > 0) 1315 - input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MINOR, 1159 + input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MINOR, 1316 1160 0, touch_minor, 0, 0); 1317 1161 if (orientation > 0) 1318 - input_set_abs_params(sc->touchpad, ABS_MT_ORIENTATION, 1162 + input_set_abs_params(sc->touchpad, ABS_MT_ORIENTATION, 1319 1163 0, orientation, 0, 0); 1320 1164 } 1321 1165 1322 - if (sc->quirks & NSG_MRXU_REMOTE) { 1166 + if (sc->quirks & NSG_MRXU_REMOTE) 1323 1167 __set_bit(EV_REL, sc->touchpad->evbit); 1324 - } 1325 1168 1326 1169 ret = input_mt_init_slots(sc->touchpad, touch_count, INPUT_MT_POINTER); 1327 1170 if (ret < 0) ··· 1475 1320 1476 1321 int id = sc->device_id; 1477 1322 1478 - BUILD_BUG_ON(MAX_LEDS < ARRAY_SIZE(sixaxis_leds[0])); 1323 + BUILD_BUG_ON(ARRAY_SIZE(sixaxis_leds[0]) > MAX_LEDS); 1479 1324 1480 1325 if (id < 0) 1481 1326 return; ··· 1493 1338 struct hid_report, list); 1494 1339 s32 *value = report->field[0]->value; 1495 1340 1496 - BUILD_BUG_ON(MAX_LEDS < 4); 1341 + BUILD_BUG_ON(4 > MAX_LEDS); 1497 1342 1498 1343 value[0] = 0x00; 1499 1344 value[1] = sc->led_state[0] ? 0xff : 0x00; ··· 1690 1535 name_sz = strlen(dev_name(&hdev->dev)) + strlen(color_name_str[n]) + 2; 1691 1536 1692 1537 led = devm_kzalloc(&hdev->dev, sizeof(struct led_classdev) + name_sz, GFP_KERNEL); 1693 - if (!led) { 1694 - hid_err(hdev, "Couldn't allocate memory for LED %d\n", n); 1538 + if (!led) 1695 1539 return -ENOMEM; 1696 - } 1697 1540 1698 1541 name = (void *)(&led[1]); 1699 1542 if (use_color_names) 1700 - snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), 1701 - color_name_str[n]); 1543 + snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), color_name_str[n]); 1702 1544 else 1703 1545 snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), n + 1); 1704 1546 led->name = name; ··· 2212 2060 } 2213 2061 2214 2062 sony_init_output_report(sc, sixaxis_send_output_report); 2063 + } else if (sc->quirks & RB3_PRO_INSTRUMENT) { 2064 + /* 2065 + * Rock Band 3 PS3 Pro Instruments also do not handle HID Output 2066 + * Reports on the interrupt EP like they should, so we need to force 2067 + * HID output reports to use HID_REQ_SET_REPORT on the Control EP. 2068 + * 2069 + * There is also another issue about HID Output Reports via USB, 2070 + * these instruments do not want the report_id as part of the data 2071 + * packet, so we have to discard buf[0] when sending the actual 2072 + * control message, even for numbered reports. 2073 + */ 2074 + hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP; 2075 + hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID; 2215 2076 } else if (sc->quirks & SIXAXIS_CONTROLLER_USB) { 2216 2077 /* 2217 2078 * The Sony Sixaxis does not handle HID Output Reports on the ··· 2341 2176 quirks |= SHANWAN_GAMEPAD; 2342 2177 2343 2178 sc = devm_kzalloc(&hdev->dev, sizeof(*sc), GFP_KERNEL); 2344 - if (sc == NULL) { 2345 - hid_err(hdev, "can't alloc sony descriptor\n"); 2179 + if (!sc) 2346 2180 return -ENOMEM; 2347 - } 2348 2181 2349 2182 spin_lock_init(&sc->lock); 2350 2183 ··· 2389 2226 ret = -ENODEV; 2390 2227 goto err; 2391 2228 } 2229 + 2230 + if (sc->quirks & RB3_PRO_INSTRUMENT) 2231 + sc->rb3_pro_poke_jiffies = 0; 2392 2232 2393 2233 if (sc->quirks & (GHL_GUITAR_PS3WIIU | GHL_GUITAR_PS4)) { 2394 2234 if (!hid_is_usb(hdev)) { ··· 2530 2364 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR7U_REMOTE), 2531 2365 .driver_data = NSG_MR7U_REMOTE_BT }, 2532 2366 /* Guitar Hero Live PS3 and Wii U guitar dongles */ 2533 - { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE_DONGLE), 2534 - .driver_data = GHL_GUITAR_PS3WIIU | GH_GUITAR_CONTROLLER }, 2367 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE), 2368 + .driver_data = GHL_GUITAR_PS3WIIU | GH_GUITAR_TILT | INSTRUMENT }, 2535 2369 /* Guitar Hero PC Guitar Dongle */ 2536 2370 { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_GUITAR_DONGLE), 2537 - .driver_data = GH_GUITAR_CONTROLLER }, 2538 - /* Guitar Hero PS3 World Tour Guitar Dongle */ 2539 - { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GUITAR_DONGLE), 2540 - .driver_data = GH_GUITAR_CONTROLLER }, 2371 + .driver_data = GH_GUITAR_TILT | INSTRUMENT }, 2372 + /* Guitar Hero PS3 Guitar Dongle */ 2373 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GH_GUITAR), 2374 + .driver_data = GH_GUITAR_TILT | INSTRUMENT }, 2375 + /* Guitar Hero PS3 Drum Dongle */ 2376 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GH_DRUMS), 2377 + .driver_data = INSTRUMENT }, 2378 + /* DJ Hero PS3 Guitar Dongle */ 2379 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_DJH_TURNTABLE), 2380 + .driver_data = DJH_TURNTABLE | INSTRUMENT }, 2541 2381 /* Guitar Hero Live PS4 guitar dongles */ 2542 2382 { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_PS4_GHLIVE_DONGLE), 2543 - .driver_data = GHL_GUITAR_PS4 | GH_GUITAR_CONTROLLER }, 2383 + .driver_data = GHL_GUITAR_PS4 | GH_GUITAR_TILT | INSTRUMENT }, 2384 + /* Rock Band 1 Wii instruments */ 2385 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB1_GUITAR), 2386 + .driver_data = INSTRUMENT }, 2387 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB1_DRUMS), 2388 + .driver_data = INSTRUMENT }, 2389 + /* Rock Band 2 Wii instruments */ 2390 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_GUITAR), 2391 + .driver_data = INSTRUMENT }, 2392 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_DRUMS), 2393 + .driver_data = INSTRUMENT }, 2394 + /* Rock Band 3 Wii instruments */ 2395 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_DRUMS_MODE), 2396 + .driver_data = INSTRUMENT }, 2397 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MUSTANG_GUITAR), 2398 + .driver_data = INSTRUMENT }, 2399 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_MUSTANG_MODE), 2400 + .driver_data = INSTRUMENT }, 2401 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_SQUIER_MODE), 2402 + .driver_data = INSTRUMENT }, 2403 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_KEYBOARD), 2404 + .driver_data = INSTRUMENT }, 2405 + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_KEYBOARD_MODE), 2406 + .driver_data = INSTRUMENT }, 2407 + /* Rock Band 3 PS3 instruments */ 2408 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB_GUITAR), 2409 + .driver_data = INSTRUMENT }, 2410 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB_DRUMS), 2411 + .driver_data = INSTRUMENT }, 2412 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_DRUMS_MODE), 2413 + .driver_data = INSTRUMENT }, 2414 + /* Rock Band 3 PS3 Pro instruments */ 2415 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MUSTANG_GUITAR), 2416 + .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2417 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_MUSTANG_MODE), 2418 + .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2419 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_SQUIER_MODE), 2420 + .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2421 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_KEYBOARD), 2422 + .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2423 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_KEYBOARD_MODE), 2424 + .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2544 2425 /* Rock Band 4 PS4 guitars */ 2545 2426 { HID_USB_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS4_RIFFMASTER), 2546 - .driver_data = RB4_GUITAR_PS4_USB }, 2427 + .driver_data = RB4_GUITAR_PS4_USB | INSTRUMENT }, 2547 2428 { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS4_GIBSON_SG), 2548 - .driver_data = RB4_GUITAR_PS4_USB }, 2429 + .driver_data = RB4_GUITAR_PS4_USB | INSTRUMENT }, 2549 2430 { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS4_GIBSON_SG_DONGLE), 2550 - .driver_data = RB4_GUITAR_PS4_USB }, 2431 + .driver_data = RB4_GUITAR_PS4_USB | INSTRUMENT }, 2551 2432 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS4_JAGUAR), 2552 - .driver_data = RB4_GUITAR_PS4_BT }, 2433 + .driver_data = RB4_GUITAR_PS4_BT | INSTRUMENT }, 2553 2434 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_PS4_STRATOCASTER), 2554 - .driver_data = RB4_GUITAR_PS4_BT }, 2435 + .driver_data = RB4_GUITAR_PS4_BT | INSTRUMENT }, 2555 2436 /* Rock Band 4 PS5 guitars */ 2556 2437 { HID_USB_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS5_RIFFMASTER), 2557 - .driver_data = RB4_GUITAR_PS5 }, 2438 + .driver_data = RB4_GUITAR_PS5 | INSTRUMENT }, 2558 2439 { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS5_GIBSON_SG), 2559 - .driver_data = RB4_GUITAR_PS5 }, 2440 + .driver_data = RB4_GUITAR_PS5 | INSTRUMENT }, 2560 2441 { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS5_GIBSON_SG_DONGLE), 2561 - .driver_data = RB4_GUITAR_PS5 }, 2442 + .driver_data = RB4_GUITAR_PS5 | INSTRUMENT }, 2562 2443 { } 2563 2444 }; 2564 2445 MODULE_DEVICE_TABLE(hid, sony_devices); ··· 2641 2428 module_init(sony_init); 2642 2429 module_exit(sony_exit); 2643 2430 2644 - MODULE_DESCRIPTION("HID driver for Sony / PS2 / PS3 / PS4 BD devices"); 2431 + MODULE_DESCRIPTION("HID driver for Sony / PS2 / PS3 BD / PS4 / PS5 devices"); 2645 2432 MODULE_LICENSE("GPL");