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

HID: sony: Add support for tilt on guitar hero guitars

This commit adds support for tilt on Standard Guitar Hero PS3 Guitars, and GH3
PC Guitars, mapping it to ABS_RY.

Note that GH3 PC Guitars are identical, only they use different VID and PIDs.

Also note that vendor id 0x12ba is used by a variety of different rhythm
controllers on the ps3.

Signed-off-by: Sanjay Govind <sanjay.govind9@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>

authored by

Sanjay Govind and committed by
Jiri Kosina
32e411d0 2bbe17ae

+20 -7
+1
drivers/hid/Kconfig
··· 909 909 * Sony PS3 Blue-ray Disk Remote Control (Bluetooth) 910 910 * Logitech Harmony adapter for Sony Playstation 3 (Bluetooth) 911 911 * Guitar Hero Live PS3 and Wii U guitar dongles 912 + * Guitar Hero PS3 and PC guitar dongles 912 913 913 914 config SONY_FF 914 915 bool "Sony PS2/3/4 accessories force feedback support"
+5 -1
drivers/hid/hid-ids.h
··· 40 40 #define USB_VENDOR_ID_ACTIONSTAR 0x2101 41 41 #define USB_DEVICE_ID_ACTIONSTAR_1011 0x1011 42 42 43 + #define USB_VENDOR_ID_ACTIVISION 0x1430 44 + #define USB_DEVICE_ID_ACTIVISION_GUITAR_DONGLE 0x474c 45 + 43 46 #define USB_VENDOR_ID_ADS_TECH 0x06e1 44 47 #define USB_DEVICE_ID_ADS_TECH_RADIO_SI470X 0xa155 45 48 ··· 1081 1078 #define USB_DEVICE_ID_SONY_BUZZ_CONTROLLER 0x0002 1082 1079 #define USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER 0x1000 1083 1080 1084 - #define USB_VENDOR_ID_SONY_GHLIVE 0x12ba 1081 + #define USB_VENDOR_ID_SONY_RHYTHM 0x12ba 1085 1082 #define USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE_DONGLE 0x074b 1083 + #define USB_DEVICE_ID_SONY_PS3_GUITAR_DONGLE 0x0100 1086 1084 1087 1085 #define USB_VENDOR_ID_SINO_LITE 0x1345 1088 1086 #define USB_DEVICE_ID_SINO_LITE_CONTROLLER 0x3008
+14 -6
drivers/hid/hid-sony.c
··· 12 12 * Copyright (c) 2014-2016 Frank Praznik <frank.praznik@gmail.com> 13 13 * Copyright (c) 2018 Todd Kelner 14 14 * Copyright (c) 2020 Pascal Giard <pascal.giard@etsmtl.ca> 15 + * Copyright (c) 2020 Sanjay Govind <sanjay.govind9@gmail.com> 15 16 */ 16 17 17 18 /* ··· 60 59 #define NSG_MR5U_REMOTE_BT BIT(14) 61 60 #define NSG_MR7U_REMOTE_BT BIT(15) 62 61 #define SHANWAN_GAMEPAD BIT(16) 63 - #define GHL_GUITAR_PS3WIIU BIT(17) 62 + #define GH_GUITAR_CONTROLLER BIT(17) 63 + #define GHL_GUITAR_PS3WIIU BIT(18) 64 64 65 65 #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT) 66 66 #define MOTION_CONTROLLER (MOTION_CONTROLLER_USB | MOTION_CONTROLLER_BT) ··· 86 84 #define NSG_MRXU_MAX_Y 1868 87 85 88 86 #define GHL_GUITAR_POKE_INTERVAL 10 /* In seconds */ 89 - #define GHL_GUITAR_TILT_USAGE 44 87 + #define GUITAR_TILT_USAGE 44 90 88 91 89 /* Magic value and data taken from GHLtarUtility: 92 90 * https://github.com/ghlre/GHLtarUtility/blob/master/PS3Guitar.cs ··· 694 692 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) { 695 693 unsigned int abs = usage->hid & HID_USAGE; 696 694 697 - if (abs == GHL_GUITAR_TILT_USAGE) { 695 + if (abs == GUITAR_TILT_USAGE) { 698 696 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RY); 699 697 return 1; 700 698 } ··· 1483 1481 if (sc->quirks & DUALSHOCK4_CONTROLLER) 1484 1482 return ds4_mapping(hdev, hi, field, usage, bit, max); 1485 1483 1486 - if (sc->quirks & GHL_GUITAR_PS3WIIU) 1484 + if (sc->quirks & GH_GUITAR_CONTROLLER) 1487 1485 return guitar_mapping(hdev, hi, field, usage, bit, max); 1488 1486 1489 1487 /* Let hid-core decide for the others */ ··· 3169 3167 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR7U_REMOTE), 3170 3168 .driver_data = NSG_MR7U_REMOTE_BT }, 3171 3169 /* Guitar Hero Live PS3 and Wii U guitar dongles */ 3172 - { HID_USB_DEVICE(USB_VENDOR_ID_SONY_GHLIVE, USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE_DONGLE), 3173 - .driver_data = GHL_GUITAR_PS3WIIU}, 3170 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE_DONGLE), 3171 + .driver_data = GHL_GUITAR_PS3WIIU | GH_GUITAR_CONTROLLER }, 3172 + /* Guitar Hero PC Guitar Dongle */ 3173 + { HID_USB_DEVICE(USB_VENDOR_ID_ACTIVISION, USB_DEVICE_ID_ACTIVISION_GUITAR_DONGLE), 3174 + .driver_data = GH_GUITAR_CONTROLLER }, 3175 + /* Guitar Hero PS3 World Tour Guitar Dongle */ 3176 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GUITAR_DONGLE), 3177 + .driver_data = GH_GUITAR_CONTROLLER }, 3174 3178 { } 3175 3179 }; 3176 3180 MODULE_DEVICE_TABLE(hid, sony_devices);