Re: [PATCH] HID: sony: add support for Rock Band 2 instruments
From: Antheas Kapenekakis
Date: Tue Feb 24 2026 - 14:20:05 EST
On Tue, 24 Feb 2026 at 20:19, Antheas Kapenekakis <lkml@xxxxxxxxxxx> wrote:
>
> On Tue, 24 Feb 2026 at 19:48, Brenton Simpson <appsforartists@xxxxxxxxxx> wrote:
> >
> > Thanks Antheas!
> >
> > Sanjay, Rosalie, and I got in touch off-thread. We'll be submitting a
> > patch that handles Rock Band instruments more holistically (not just
> > the Wii ones) shortly.
> >
> > Preview here:
> > https://github.com/Rosalie241/hid-sony/tree/rb2-instruments
>
> I reviewed that. If you want to merge quickly, I'd suggest less
> renames though. You are making changes there that are hard to review.
>
> Renames are typically a separate patch. If you truly believe in them
> and want to battle it out, that's where they'll go.
>
> I'd suggest you apply my suggestions to your patch anyhow and keep it
> separate. It is self contained and can merge quickly.
>
> I will leave it up to you if you want to have it as 1st patch of a
> series that Rosalie submits, or submit it on your own, get it merged
> to HID, then send the other patches on top of that remote.
>
> My recommendation would be the former.
*latter
>
> Best,
> Antheas
>
> > On Tue, Feb 24, 2026 at 1:01 PM Antheas Kapenekakis <lkml@xxxxxxxxxxx> wrote:
> > >
> > > Hi Brenton,
> > >
> > > Let me give you a quirk review. Nice to hear from you again.
> > >
> > > On Fri, 20 Feb 2026 at 17:50, <appsforartists@xxxxxxxxxx> wrote:
> > > >
> > > > From: Brenton Simpson <appsforartists@xxxxxxxxxx>
> > > >
> > > > Rock Band 2 for the Nintendo Wii and for the Sony PlayStation 3 use the
> > > > same mapping as later games:
> > > >
> > > > Green: SOUTH (A)
> > > > Red: EAST (B)
> > > > Yellow: NORTH (Y)
> > > > Blue: WEST (X)
> > > > Orange/pedal: TL (L1)
> > > > Solo flag: TL2 (L2)
> > > > Tilt: TR (R1)
> > > > Pad flag: THUMBL (L3)
> > > > Instrument button: MODE (Steam/Xbox)
> > > > Whammy bar: ABS_Z (Axis 4)
> > > > Effects switch: Z (Axis 5)
> > > >
> > > > As documented at https://github.com/TheNathannator/PlasticBand/blob/main/Docs/.
> > >
> > > The checkpatch hits this line. Remove this line and replace with see below.
> > >
> > > >
> > > > The guitar and drums both use the same mapping. Tested using the Wii
> > > > versions of the instruments.
> > > >
> > >
> > > A link tag.
> > >
> > > Link: https://github.com/TheNathannator/PlasticBand/blob/main/Docs/
> > > > Signed-off-by: Brenton Simpson <appsforartists@xxxxxxxxxx>
> > > > ---
> > > > drivers/hid/hid-ids.h | 8 +++++++-
> > > > drivers/hid/hid-sony.c | 45 +++++++++++++++++++++++++++++-------------
> > > > 2 files changed, 38 insertions(+), 15 deletions(-)
> > > >
> > > > diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> > > > index 3e299a30dcde..644d3c4df144 100644
> > > > --- a/drivers/hid/hid-ids.h
> > > > +++ b/drivers/hid/hid-ids.h
> > > > @@ -664,6 +664,10 @@
> > > > #define USB_DEVICE_ID_UGCI_FLYING 0x0020
> > > > #define USB_DEVICE_ID_UGCI_FIGHTING 0x0030
> > > >
> > > > +#define USB_VENDOR_ID_HARMONIX 0x1bad
> > > > +#define USB_DEVICE_ID_HARMONIX_WII_RB2_GUITAR_DONGLE 0x3010
> > > > +#define USB_DEVICE_ID_HARMONIX_WII_RB2_DRUMS_DONGLE 0x3110
> > > > +
> > > > #define USB_VENDOR_ID_HP 0x03f0
> > > > #define USB_PRODUCT_ID_HP_ELITE_PRESENTER_MOUSE_464A 0x464a
> > > > #define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A 0x0a4a
> > > > @@ -1299,7 +1303,9 @@
> > > >
> > > > #define USB_VENDOR_ID_SONY_RHYTHM 0x12ba
> > > > #define USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE_DONGLE 0x074b
> > > > -#define USB_DEVICE_ID_SONY_PS3_GUITAR_DONGLE 0x0100
> > > > +#define USB_DEVICE_ID_SONY_PS3_GH_GUITAR_DONGLE 0x0100
> > > > +#define USB_DEVICE_ID_SONY_PS3_RB2_GUITAR_DONGLE 0x0200
> > > > +#define USB_DEVICE_ID_SONY_PS3_RB2_DRUMS_DONGLE 0x0210
> > >
> > > Indentation on first glance seems incorrect. But this file seems to
> > > follow the rule of vendor gets one tab, and others are aligned. And
> > > your additions match that.
> > >
> > > But other than that, it is true that it is a mess and everyone does
> > > what they do.
> > >
> > > > #define USB_VENDOR_ID_SINO_LITE 0x1345
> > > > #define USB_DEVICE_ID_SINO_LITE_CONTROLLER 0x3008
> > > > diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
> > > > index a89af14e4acc..f6975f6ae882 100644
> > > > --- a/drivers/hid/hid-sony.c
> > > > +++ b/drivers/hid/hid-sony.c
> > > > @@ -62,9 +62,10 @@
> > > > #define GH_GUITAR_CONTROLLER BIT(14)
> > > > #define GHL_GUITAR_PS3WIIU BIT(15)
> > > > #define GHL_GUITAR_PS4 BIT(16)
> > > > -#define RB4_GUITAR_PS4_USB BIT(17)
> > > > -#define RB4_GUITAR_PS4_BT BIT(18)
> > > > -#define RB4_GUITAR_PS5 BIT(19)
> > > > +#define RB2_INSTRUMENT BIT(17)
> > > > +#define RB4_GUITAR_PS4_USB BIT(18)
> > > > +#define RB4_GUITAR_PS4_BT BIT(19)
> > > > +#define RB4_GUITAR_PS5 BIT(20)
> > >
> > > I thought these were not formatted correctly. But they are. You added
> > > RB2_INSTRUMENT above. I would suggest pulling it down and making it
> > > BIT(20) instead. It minimizes the diff.
> > >
> > > >
> > > > #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)
> > > > #define MOTION_CONTROLLER (MOTION_CONTROLLER_USB | MOTION_CONTROLLER_BT)
> > > > @@ -422,12 +423,12 @@ static const unsigned int sixaxis_keymap[] = {
> > > > [0x11] = BTN_MODE, /* PS */
> > > > };
> > > >
> > > > -static const unsigned int rb4_absmap[] = {
> > > > +static const unsigned int rb_absmap[] = {
> > > > [0x30] = ABS_X,
> > > > [0x31] = ABS_Y,
> > > > };
> > > >
> > > > -static const unsigned int rb4_keymap[] = {
> > > > +static const unsigned int rb_keymap[] = {
> > > > [0x1] = BTN_WEST, /* Square */
> > > > [0x2] = BTN_SOUTH, /* Cross */
> > > > [0x3] = BTN_EAST, /* Circle */
> > > > @@ -625,17 +626,17 @@ static int gh_guitar_mapping(struct hid_device *hdev, struct hid_input *hi,
> > > > return 0;
> > > > }
> > > >
> > > > -static int rb4_guitar_mapping(struct hid_device *hdev, struct hid_input *hi,
> > > > +static int rb_instrument_mapping(struct hid_device *hdev, struct hid_input *hi,
> > > > struct hid_field *field, struct hid_usage *usage,
> > > > unsigned long **bit, int *max)
> > > > {
> > > > if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
> > > > unsigned int key = usage->hid & HID_USAGE;
> > > >
> > > > - if (key >= ARRAY_SIZE(rb4_keymap))
> > > > + if (key >= ARRAY_SIZE(rb_keymap))
> > > > return 0;
> > > >
> > > > - key = rb4_keymap[key];
> > > > + key = rb_keymap[key];
> > > > hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
> > > > return 1;
> > > > } else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
> > > > @@ -645,10 +646,10 @@ static int rb4_guitar_mapping(struct hid_device *hdev, struct hid_input *hi,
> > > > if (usage->hid == HID_GD_HATSWITCH)
> > > > return 0;
> > > >
> > > > - if (abs >= ARRAY_SIZE(rb4_absmap))
> > > > + if (abs >= ARRAY_SIZE(rb_absmap))
> > > > return 0;
> > > >
> > > > - abs = rb4_absmap[abs];
> > > > + abs = rb_absmap[abs];
> > > > hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
> > > > return 1;
> > > > }
> > > > @@ -1101,11 +1102,14 @@ static int sony_mapping(struct hid_device *hdev, struct hid_input *hi,
> > > > if (sc->quirks & GH_GUITAR_CONTROLLER)
> > > > return gh_guitar_mapping(hdev, hi, field, usage, bit, max);
> > > >
> > > > + if (sc->quirks & RB2_INSTRUMENT)
> > > > + return rb_instrument_mapping(hdev, hi, field, usage, bit, max);
> > > > +
> > > > if (sc->quirks & (RB4_GUITAR_PS4_USB | RB4_GUITAR_PS4_BT))
> > > > - return rb4_guitar_mapping(hdev, hi, field, usage, bit, max);
> > > > + return rb_instrument_mapping(hdev, hi, field, usage, bit, max);
> > > >
> > > > if (sc->quirks & RB4_GUITAR_PS5)
> > > > - return rb4_guitar_mapping(hdev, hi, field, usage, bit, max);
> > > > + return rb_instrument_mapping(hdev, hi, field, usage, bit, max);
> > > >
> > > > /* Let hid-core decide for the others */
> > > > return 0;
> > > > @@ -2369,12 +2373,25 @@ static const struct hid_device_id sony_devices[] = {
> > > > /* Guitar Hero PC Guitar Dongle */
> > > > { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_GUITAR_DONGLE),
> > > > .driver_data = GH_GUITAR_CONTROLLER },
> > > > - /* Guitar Hero PS3 World Tour Guitar Dongle */
> > > > - { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GUITAR_DONGLE),
> > > > + /* Guitar Hero World Tour PS3 Guitar Dongle */
> > > > + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GH_GUITAR_DONGLE),
> > > > .driver_data = GH_GUITAR_CONTROLLER },
> > > > /* Guitar Hero Live PS4 guitar dongles */
> > > > { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_PS4_GHLIVE_DONGLE),
> > > > .driver_data = GHL_GUITAR_PS4 | GH_GUITAR_CONTROLLER },
> > > > + /* Rock Band 2 instruments
> > > > + * Nintendo Wii instruments are included in `hid-sony` because `hid-nintendo`
> > > > + * is for the newer Nintendo Switch, and the Wii instruments use the same
> > > > + * protocol as their Sony PlayStation 3 cousins.
> > > > + */
> > >
> > > I would simplify it to "Rock Band 2 Instruments for Wii U. They use
> > > the hid-sony protocol.". Readers do not need more context.
> > >
> > > Other than that, I would drop all the renames from your patch. They
> > > triple the diff and just make it harder to merge. Without those, the
> > > patch is essentially the hunk below, the new PIDs, and the quirk. The
> > > justification of the quirk is that you do not want your code to hit
> > > rb4_ps4_guitar_parse_report(sc, rd, size); (?)
> > >
> > > This patch is very reasonable to merge as it makes no code changes
> > > after you clean it up a bit.
> > >
> > > As for why the buttons are jumbled, this is standard HID gamepad
> > > handling. You are not supposed to read them directly, but instead use
> > > something like [1] or PR to [2]. If the gamepad does not have
> > > vibration, there is no functionality loss either. But... this patch is
> > > also very welcome.
> > >
> > > Best,
> > > Antheas
> > >
> > > [1] https://github.com/mdqinc/SDL_GameControllerDB
> > > [2] https://github.com/libsdl-org/SDL
> > >
> > > > + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_GUITAR_DONGLE),
> > > > + .driver_data = RB2_INSTRUMENT },
> > > > + { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_DRUMS_DONGLE),
> > > > + .driver_data = RB2_INSTRUMENT },
> > > > + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB2_GUITAR_DONGLE),
> > > > + .driver_data = RB2_INSTRUMENT },
> > > > + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB2_DRUMS_DONGLE),
> > > > + .driver_data = RB2_INSTRUMENT },
> > > > /* Rock Band 4 PS4 guitars */
> > > > { HID_USB_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS4_RIFFMASTER),
> > > > .driver_data = RB4_GUITAR_PS4_USB },
> > > > --
> > > > 2.53.0.414.gf7e9f6c205-goog
> > > >
> > > >
> > >
> >