1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * HID driver for Sony / PS2 / PS3 BD / PS4 / PS5 devices. 4 * 5 * Copyright (c) 1999 Andreas Gal 6 * Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz> 7 * Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc 8 * Copyright (c) 2008 Jiri Slaby 9 * Copyright (c) 2012 David Dillow <dave@thedillows.org> 10 * Copyright (c) 2006-2013 Jiri Kosina 11 * Copyright (c) 2013 Colin Leitner <colin.leitner@gmail.com> 12 * Copyright (c) 2014-2016 Frank Praznik <frank.praznik@gmail.com> 13 * Copyright (c) 2018 Todd Kelner 14 * Copyright (c) 2020-2021 Pascal Giard <pascal.giard@etsmtl.ca> 15 * Copyright (c) 2020-2026 Sanjay Govind <sanjay.govind9@gmail.com> 16 * Copyright (c) 2021 Daniel Nguyen <daniel.nguyen.1@ens.etsmtl.ca> 17 * Copyright (c) 2026 Rosalie Wanders <rosalie@mailbox.org> 18 * Copyright (c) 2026 Brenton Simpson <appsforartists@google.com> 19 */ 20 21 /* 22 */ 23 24 /* 25 * NOTE: in order for the Sony PS3 BD Remote Control to be found by 26 * a Bluetooth host, the key combination Start+Enter has to be kept pressed 27 * for about 7 seconds with the Bluetooth Host Controller in discovering mode. 28 * 29 * There will be no PIN request from the device. 30 */ 31 32 #include <linux/device.h> 33 #include <linux/hid.h> 34 #include <linux/module.h> 35 #include <linux/slab.h> 36 #include <linux/leds.h> 37 #include <linux/power_supply.h> 38 #include <linux/spinlock.h> 39 #include <linux/list.h> 40 #include <linux/idr.h> 41 #include <linux/input/mt.h> 42 #include <linux/crc32.h> 43 #include <linux/usb.h> 44 #include <linux/timer.h> 45 #include <linux/unaligned.h> 46 47 #include "hid-ids.h" 48 49 #define VAIO_RDESC_CONSTANT BIT(0) 50 #define SIXAXIS_CONTROLLER_USB BIT(1) 51 #define SIXAXIS_CONTROLLER_BT BIT(2) 52 #define BUZZ_CONTROLLER BIT(3) 53 #define PS3REMOTE BIT(4) 54 #define MOTION_CONTROLLER_USB BIT(5) 55 #define MOTION_CONTROLLER_BT BIT(6) 56 #define NAVIGATION_CONTROLLER_USB BIT(7) 57 #define NAVIGATION_CONTROLLER_BT BIT(8) 58 #define SINO_LITE_CONTROLLER BIT(9) 59 #define FUTUREMAX_DANCE_MAT BIT(10) 60 #define NSG_MR5U_REMOTE_BT BIT(11) 61 #define NSG_MR7U_REMOTE_BT BIT(12) 62 #define SHANWAN_GAMEPAD BIT(13) 63 #define INSTRUMENT BIT(14) 64 #define GH_GUITAR_TILT BIT(15) 65 #define GHL_GUITAR_PS3WIIU BIT(16) 66 #define GHL_GUITAR_PS4 BIT(17) 67 #define RB4_GUITAR_PS4_USB BIT(18) 68 #define RB4_GUITAR_PS4_BT BIT(19) 69 #define RB4_GUITAR_PS5 BIT(20) 70 #define RB3_PRO_INSTRUMENT BIT(21) 71 #define DJH_TURNTABLE BIT(22) 72 73 #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT) 74 #define MOTION_CONTROLLER (MOTION_CONTROLLER_USB | MOTION_CONTROLLER_BT) 75 #define NAVIGATION_CONTROLLER (NAVIGATION_CONTROLLER_USB |\ 76 NAVIGATION_CONTROLLER_BT) 77 #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER | BUZZ_CONTROLLER |\ 78 MOTION_CONTROLLER | NAVIGATION_CONTROLLER) 79 #define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER |\ 80 RB4_GUITAR_PS5) 81 #define SONY_FF_SUPPORT (SIXAXIS_CONTROLLER | MOTION_CONTROLLER) 82 #define SONY_BT_DEVICE (SIXAXIS_CONTROLLER_BT | MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER_BT) 83 #define NSG_MRXU_REMOTE (NSG_MR5U_REMOTE_BT | NSG_MR7U_REMOTE_BT) 84 85 #define MAX_LEDS 4 86 #define NSG_MRXU_MAX_X 1667 87 #define NSG_MRXU_MAX_Y 1868 88 89 /* The PS3/Wii U dongles require a poke every 10 seconds, but the PS4 90 * requires one every 8 seconds. Using 8 seconds for all for simplicity. 91 */ 92 #define GHL_GUITAR_POKE_INTERVAL 8 /* In seconds */ 93 #define GUITAR_TILT_USAGE 44 94 95 #define TURNTABLE_EFFECTS_KNOB_USAGE 44 96 #define TURNTABLE_PLATTER_BUTTONS_USAGE 45 97 #define TURNTABLE_CROSS_FADER_USAGE 46 98 99 /* Magic data taken from GHLtarUtility: 100 * https://github.com/ghlre/GHLtarUtility/blob/master/PS3Guitar.cs 101 * Note: The Wii U and PS3 dongles happen to share the same! 102 */ 103 static const char ghl_ps3wiiu_magic_data[] = { 104 0x02, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 105 }; 106 107 /* Magic data for the PS4 dongles sniffed with a USB protocol 108 * analyzer. 109 */ 110 static const char ghl_ps4_magic_data[] = { 111 0x30, 0x02, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00 112 }; 113 114 /* PS/3 Motion controller */ 115 static const u8 motion_rdesc[] = { 116 0x05, 0x01, /* Usage Page (Desktop), */ 117 0x09, 0x04, /* Usage (Joystick), */ 118 0xA1, 0x01, /* Collection (Application), */ 119 0xA1, 0x02, /* Collection (Logical), */ 120 0x85, 0x01, /* Report ID (1), */ 121 0x75, 0x01, /* Report Size (1), */ 122 0x95, 0x15, /* Report Count (21), */ 123 0x15, 0x00, /* Logical Minimum (0), */ 124 0x25, 0x01, /* Logical Maximum (1), */ 125 0x35, 0x00, /* Physical Minimum (0), */ 126 0x45, 0x01, /* Physical Maximum (1), */ 127 0x05, 0x09, /* Usage Page (Button), */ 128 0x19, 0x01, /* Usage Minimum (01h), */ 129 0x29, 0x15, /* Usage Maximum (15h), */ 130 0x81, 0x02, /* Input (Variable), * Buttons */ 131 0x95, 0x0B, /* Report Count (11), */ 132 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */ 133 0x81, 0x03, /* Input (Constant, Variable), * Padding */ 134 0x15, 0x00, /* Logical Minimum (0), */ 135 0x26, 0xFF, 0x00, /* Logical Maximum (255), */ 136 0x05, 0x01, /* Usage Page (Desktop), */ 137 0xA1, 0x00, /* Collection (Physical), */ 138 0x75, 0x08, /* Report Size (8), */ 139 0x95, 0x01, /* Report Count (1), */ 140 0x35, 0x00, /* Physical Minimum (0), */ 141 0x46, 0xFF, 0x00, /* Physical Maximum (255), */ 142 0x09, 0x30, /* Usage (X), */ 143 0x81, 0x02, /* Input (Variable), * Trigger */ 144 0xC0, /* End Collection, */ 145 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */ 146 0x75, 0x08, /* Report Size (8), */ 147 0x95, 0x07, /* Report Count (7), * skip 7 bytes */ 148 0x81, 0x02, /* Input (Variable), */ 149 0x05, 0x01, /* Usage Page (Desktop), */ 150 0x75, 0x10, /* Report Size (16), */ 151 0x46, 0xFF, 0xFF, /* Physical Maximum (65535), */ 152 0x27, 0xFF, 0xFF, 0x00, 0x00, /* Logical Maximum (65535), */ 153 0x95, 0x03, /* Report Count (3), * 3x Accels */ 154 0x09, 0x33, /* Usage (rX), */ 155 0x09, 0x34, /* Usage (rY), */ 156 0x09, 0x35, /* Usage (rZ), */ 157 0x81, 0x02, /* Input (Variable), */ 158 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */ 159 0x95, 0x03, /* Report Count (3), * Skip Accels 2nd frame */ 160 0x81, 0x02, /* Input (Variable), */ 161 0x05, 0x01, /* Usage Page (Desktop), */ 162 0x09, 0x01, /* Usage (Pointer), */ 163 0x95, 0x03, /* Report Count (3), * 3x Gyros */ 164 0x81, 0x02, /* Input (Variable), */ 165 0x06, 0x00, 0xFF, /* Usage Page (FF00h), */ 166 0x95, 0x03, /* Report Count (3), * Skip Gyros 2nd frame */ 167 0x81, 0x02, /* Input (Variable), */ 168 0x75, 0x0C, /* Report Size (12), */ 169 0x46, 0xFF, 0x0F, /* Physical Maximum (4095), */ 170 0x26, 0xFF, 0x0F, /* Logical Maximum (4095), */ 171 0x95, 0x04, /* Report Count (4), * Skip Temp and Magnetometers */ 172 0x81, 0x02, /* Input (Variable), */ 173 0x75, 0x08, /* Report Size (8), */ 174 0x46, 0xFF, 0x00, /* Physical Maximum (255), */ 175 0x26, 0xFF, 0x00, /* Logical Maximum (255), */ 176 0x95, 0x06, /* Report Count (6), * Skip Timestamp and Extension Bytes */ 177 0x81, 0x02, /* Input (Variable), */ 178 0x75, 0x08, /* Report Size (8), */ 179 0x95, 0x30, /* Report Count (48), */ 180 0x09, 0x01, /* Usage (Pointer), */ 181 0x91, 0x02, /* Output (Variable), */ 182 0x75, 0x08, /* Report Size (8), */ 183 0x95, 0x30, /* Report Count (48), */ 184 0x09, 0x01, /* Usage (Pointer), */ 185 0xB1, 0x02, /* Feature (Variable), */ 186 0xC0, /* End Collection, */ 187 0xA1, 0x02, /* Collection (Logical), */ 188 0x85, 0x02, /* Report ID (2), */ 189 0x75, 0x08, /* Report Size (8), */ 190 0x95, 0x30, /* Report Count (48), */ 191 0x09, 0x01, /* Usage (Pointer), */ 192 0xB1, 0x02, /* Feature (Variable), */ 193 0xC0, /* End Collection, */ 194 0xA1, 0x02, /* Collection (Logical), */ 195 0x85, 0xEE, /* Report ID (238), */ 196 0x75, 0x08, /* Report Size (8), */ 197 0x95, 0x30, /* Report Count (48), */ 198 0x09, 0x01, /* Usage (Pointer), */ 199 0xB1, 0x02, /* Feature (Variable), */ 200 0xC0, /* End Collection, */ 201 0xA1, 0x02, /* Collection (Logical), */ 202 0x85, 0xEF, /* Report ID (239), */ 203 0x75, 0x08, /* Report Size (8), */ 204 0x95, 0x30, /* Report Count (48), */ 205 0x09, 0x01, /* Usage (Pointer), */ 206 0xB1, 0x02, /* Feature (Variable), */ 207 0xC0, /* End Collection, */ 208 0xC0 /* End Collection */ 209 }; 210 211 static const u8 ps3remote_rdesc[] = { 212 0x05, 0x01, /* GUsagePage Generic Desktop */ 213 0x09, 0x05, /* LUsage 0x05 [Game Pad] */ 214 0xA1, 0x01, /* MCollection Application (mouse, keyboard) */ 215 216 /* Use collection 1 for joypad buttons */ 217 0xA1, 0x02, /* MCollection Logical (interrelated data) */ 218 219 /* 220 * Ignore the 1st byte, maybe it is used for a controller 221 * number but it's not needed for correct operation 222 */ 223 0x75, 0x08, /* GReportSize 0x08 [8] */ 224 0x95, 0x01, /* GReportCount 0x01 [1] */ 225 0x81, 0x01, /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */ 226 227 /* 228 * Bytes from 2nd to 4th are a bitmap for joypad buttons, for these 229 * buttons multiple keypresses are allowed 230 */ 231 0x05, 0x09, /* GUsagePage Button */ 232 0x19, 0x01, /* LUsageMinimum 0x01 [Button 1 (primary/trigger)] */ 233 0x29, 0x18, /* LUsageMaximum 0x18 [Button 24] */ 234 0x14, /* GLogicalMinimum [0] */ 235 0x25, 0x01, /* GLogicalMaximum 0x01 [1] */ 236 0x75, 0x01, /* GReportSize 0x01 [1] */ 237 0x95, 0x18, /* GReportCount 0x18 [24] */ 238 0x81, 0x02, /* MInput 0x02 (Data[0] Var[1] Abs[2]) */ 239 240 0xC0, /* MEndCollection */ 241 242 /* Use collection 2 for remote control buttons */ 243 0xA1, 0x02, /* MCollection Logical (interrelated data) */ 244 245 /* 5th byte is used for remote control buttons */ 246 0x05, 0x09, /* GUsagePage Button */ 247 0x18, /* LUsageMinimum [No button pressed] */ 248 0x29, 0xFE, /* LUsageMaximum 0xFE [Button 254] */ 249 0x14, /* GLogicalMinimum [0] */ 250 0x26, 0xFE, 0x00, /* GLogicalMaximum 0x00FE [254] */ 251 0x75, 0x08, /* GReportSize 0x08 [8] */ 252 0x95, 0x01, /* GReportCount 0x01 [1] */ 253 0x80, /* MInput */ 254 255 /* 256 * Ignore bytes from 6th to 11th, 6th to 10th are always constant at 257 * 0xff and 11th is for press indication 258 */ 259 0x75, 0x08, /* GReportSize 0x08 [8] */ 260 0x95, 0x06, /* GReportCount 0x06 [6] */ 261 0x81, 0x01, /* MInput 0x01 (Const[0] Arr[1] Abs[2]) */ 262 263 /* 12th byte is for battery strength */ 264 0x05, 0x06, /* GUsagePage Generic Device Controls */ 265 0x09, 0x20, /* LUsage 0x20 [Battery Strength] */ 266 0x14, /* GLogicalMinimum [0] */ 267 0x25, 0x05, /* GLogicalMaximum 0x05 [5] */ 268 0x75, 0x08, /* GReportSize 0x08 [8] */ 269 0x95, 0x01, /* GReportCount 0x01 [1] */ 270 0x81, 0x02, /* MInput 0x02 (Data[0] Var[1] Abs[2]) */ 271 272 0xC0, /* MEndCollection */ 273 274 0xC0 /* MEndCollection [Game Pad] */ 275 }; 276 277 static const unsigned int ps3remote_keymap_joypad_buttons[] = { 278 [0x01] = KEY_SELECT, 279 [0x02] = BTN_THUMBL, /* L3 */ 280 [0x03] = BTN_THUMBR, /* R3 */ 281 [0x04] = BTN_START, 282 [0x05] = KEY_UP, 283 [0x06] = KEY_RIGHT, 284 [0x07] = KEY_DOWN, 285 [0x08] = KEY_LEFT, 286 [0x09] = BTN_TL2, /* L2 */ 287 [0x0a] = BTN_TR2, /* R2 */ 288 [0x0b] = BTN_TL, /* L1 */ 289 [0x0c] = BTN_TR, /* R1 */ 290 [0x0d] = KEY_OPTION, /* options/triangle */ 291 [0x0e] = KEY_BACK, /* back/circle */ 292 [0x0f] = BTN_0, /* cross */ 293 [0x10] = KEY_SCREEN, /* view/square */ 294 [0x11] = KEY_HOMEPAGE, /* PS button */ 295 [0x14] = KEY_ENTER, 296 }; 297 static const unsigned int ps3remote_keymap_remote_buttons[] = { 298 [0x00] = KEY_1, 299 [0x01] = KEY_2, 300 [0x02] = KEY_3, 301 [0x03] = KEY_4, 302 [0x04] = KEY_5, 303 [0x05] = KEY_6, 304 [0x06] = KEY_7, 305 [0x07] = KEY_8, 306 [0x08] = KEY_9, 307 [0x09] = KEY_0, 308 [0x0e] = KEY_ESC, /* return */ 309 [0x0f] = KEY_CLEAR, 310 [0x16] = KEY_EJECTCD, 311 [0x1a] = KEY_MENU, /* top menu */ 312 [0x28] = KEY_TIME, 313 [0x30] = KEY_PREVIOUS, 314 [0x31] = KEY_NEXT, 315 [0x32] = KEY_PLAY, 316 [0x33] = KEY_REWIND, /* scan back */ 317 [0x34] = KEY_FORWARD, /* scan forward */ 318 [0x38] = KEY_STOP, 319 [0x39] = KEY_PAUSE, 320 [0x40] = KEY_CONTEXT_MENU, /* pop up/menu */ 321 [0x60] = KEY_FRAMEBACK, /* slow/step back */ 322 [0x61] = KEY_FRAMEFORWARD, /* slow/step forward */ 323 [0x63] = KEY_SUBTITLE, 324 [0x64] = KEY_AUDIO, 325 [0x65] = KEY_ANGLE, 326 [0x70] = KEY_INFO, /* display */ 327 [0x80] = KEY_BLUE, 328 [0x81] = KEY_RED, 329 [0x82] = KEY_GREEN, 330 [0x83] = KEY_YELLOW, 331 }; 332 333 static const unsigned int buzz_keymap[] = { 334 /* 335 * The controller has 4 remote buzzers, each with one LED and 5 336 * buttons. 337 * 338 * We use the mapping chosen by the controller, which is: 339 * 340 * Key Offset 341 * ------------------- 342 * Buzz 1 343 * Blue 5 344 * Orange 4 345 * Green 3 346 * Yellow 2 347 * 348 * So, for example, the orange button on the third buzzer is mapped to 349 * BTN_TRIGGER_HAPPY14 350 */ 351 [1] = BTN_TRIGGER_HAPPY1, 352 [2] = BTN_TRIGGER_HAPPY2, 353 [3] = BTN_TRIGGER_HAPPY3, 354 [4] = BTN_TRIGGER_HAPPY4, 355 [5] = BTN_TRIGGER_HAPPY5, 356 [6] = BTN_TRIGGER_HAPPY6, 357 [7] = BTN_TRIGGER_HAPPY7, 358 [8] = BTN_TRIGGER_HAPPY8, 359 [9] = BTN_TRIGGER_HAPPY9, 360 [10] = BTN_TRIGGER_HAPPY10, 361 [11] = BTN_TRIGGER_HAPPY11, 362 [12] = BTN_TRIGGER_HAPPY12, 363 [13] = BTN_TRIGGER_HAPPY13, 364 [14] = BTN_TRIGGER_HAPPY14, 365 [15] = BTN_TRIGGER_HAPPY15, 366 [16] = BTN_TRIGGER_HAPPY16, 367 [17] = BTN_TRIGGER_HAPPY17, 368 [18] = BTN_TRIGGER_HAPPY18, 369 [19] = BTN_TRIGGER_HAPPY19, 370 [20] = BTN_TRIGGER_HAPPY20, 371 }; 372 373 /* The Navigation controller is a partial DS3 and uses the same HID report 374 * and hence the same keymap indices, however not all axes/buttons 375 * are physically present. We use the same axis and button mapping as 376 * the DS3, which uses the Linux gamepad spec. 377 */ 378 static const unsigned int navigation_absmap[] = { 379 [0x30] = ABS_X, 380 [0x31] = ABS_Y, 381 [0x33] = ABS_Z, /* L2 */ 382 }; 383 384 /* Buttons not physically available on the device, but still available 385 * in the reports are explicitly set to 0 for documentation purposes. 386 */ 387 static const unsigned int navigation_keymap[] = { 388 [0x01] = 0, /* Select */ 389 [0x02] = BTN_THUMBL, /* L3 */ 390 [0x03] = 0, /* R3 */ 391 [0x04] = 0, /* Start */ 392 [0x05] = BTN_DPAD_UP, /* Up */ 393 [0x06] = BTN_DPAD_RIGHT, /* Right */ 394 [0x07] = BTN_DPAD_DOWN, /* Down */ 395 [0x08] = BTN_DPAD_LEFT, /* Left */ 396 [0x09] = BTN_TL2, /* L2 */ 397 [0x0a] = 0, /* R2 */ 398 [0x0b] = BTN_TL, /* L1 */ 399 [0x0c] = 0, /* R1 */ 400 [0x0d] = BTN_NORTH, /* Triangle */ 401 [0x0e] = BTN_EAST, /* Circle */ 402 [0x0f] = BTN_SOUTH, /* Cross */ 403 [0x10] = BTN_WEST, /* Square */ 404 [0x11] = BTN_MODE, /* PS */ 405 }; 406 407 static const unsigned int sixaxis_absmap[] = { 408 [0x30] = ABS_X, 409 [0x31] = ABS_Y, 410 [0x32] = ABS_RX, /* right stick X */ 411 [0x35] = ABS_RY, /* right stick Y */ 412 }; 413 414 static const unsigned int sixaxis_keymap[] = { 415 [0x01] = BTN_SELECT, /* Select */ 416 [0x02] = BTN_THUMBL, /* L3 */ 417 [0x03] = BTN_THUMBR, /* R3 */ 418 [0x04] = BTN_START, /* Start */ 419 [0x05] = BTN_DPAD_UP, /* Up */ 420 [0x06] = BTN_DPAD_RIGHT, /* Right */ 421 [0x07] = BTN_DPAD_DOWN, /* Down */ 422 [0x08] = BTN_DPAD_LEFT, /* Left */ 423 [0x09] = BTN_TL2, /* L2 */ 424 [0x0a] = BTN_TR2, /* R2 */ 425 [0x0b] = BTN_TL, /* L1 */ 426 [0x0c] = BTN_TR, /* R1 */ 427 [0x0d] = BTN_NORTH, /* Triangle */ 428 [0x0e] = BTN_EAST, /* Circle */ 429 [0x0f] = BTN_SOUTH, /* Cross */ 430 [0x10] = BTN_WEST, /* Square */ 431 [0x11] = BTN_MODE, /* PS */ 432 }; 433 434 static const unsigned int rb4_absmap[] = { 435 [0x30] = ABS_X, 436 [0x31] = ABS_Y, 437 }; 438 439 static const unsigned int ps3_turntable_absmap[] = { 440 [0x32] = ABS_X, 441 [0x35] = ABS_Y, 442 }; 443 444 static const unsigned int instrument_keymap[] = { 445 [0x1] = BTN_WEST, 446 [0x2] = BTN_SOUTH, 447 [0x3] = BTN_EAST, 448 [0x4] = BTN_NORTH, 449 [0x5] = BTN_TL, 450 [0x6] = BTN_TR, 451 [0x7] = BTN_TL2, 452 [0x8] = BTN_TR2, 453 [0x9] = BTN_SELECT, 454 [0xa] = BTN_START, 455 [0xb] = BTN_THUMBL, 456 [0xc] = BTN_THUMBR, 457 [0xd] = BTN_MODE, 458 }; 459 460 static enum power_supply_property sony_battery_props[] = { 461 POWER_SUPPLY_PROP_PRESENT, 462 POWER_SUPPLY_PROP_CAPACITY, 463 POWER_SUPPLY_PROP_SCOPE, 464 POWER_SUPPLY_PROP_STATUS, 465 }; 466 467 struct sixaxis_led { 468 u8 time_enabled; /* the total time the led is active (0xff means forever) */ 469 u8 duty_length; /* how long a cycle is in deciseconds (0 means "really fast") */ 470 u8 enabled; 471 u8 duty_off; /* % of duty_length the led is off (0xff means 100%) */ 472 u8 duty_on; /* % of duty_length the led is on (0xff mean 100%) */ 473 } __packed; 474 static_assert(sizeof(struct sixaxis_led) == 5); 475 476 struct sixaxis_rumble { 477 u8 padding; 478 u8 right_duration; /* Right motor duration (0xff means forever) */ 479 u8 right_motor_on; /* Right (small) motor on/off, only supports values of 0 or 1 (off/on) */ 480 u8 left_duration; /* Left motor duration (0xff means forever) */ 481 u8 left_motor_force; /* left (large) motor, supports force values from 0 to 255 */ 482 } __packed; 483 static_assert(sizeof(struct sixaxis_rumble) == 5); 484 485 struct sixaxis_output_report { 486 u8 report_id; 487 struct sixaxis_rumble rumble; 488 u8 padding[4]; 489 u8 leds_bitmap; /* bitmap of enabled LEDs: LED_1 = 0x02, LED_2 = 0x04, ... */ 490 struct sixaxis_led led[4]; /* LEDx at (4 - x) */ 491 struct sixaxis_led _reserved; /* LED5, not actually soldered */ 492 } __packed; 493 static_assert(sizeof(struct sixaxis_output_report) == 36); 494 495 union sixaxis_output_report_01 { 496 struct sixaxis_output_report data; 497 u8 buf[36]; 498 }; 499 static_assert(sizeof(union sixaxis_output_report_01) == 36); 500 501 struct motion_output_report_02 { 502 u8 type, zero; 503 u8 r, g, b; 504 u8 zero2; 505 u8 rumble; 506 }; 507 static_assert(sizeof(struct motion_output_report_02) == 7); 508 509 #define SIXAXIS_REPORT_0xF2_SIZE 17 510 #define SIXAXIS_REPORT_0xF5_SIZE 8 511 #define MOTION_REPORT_0x02_SIZE 49 512 #define PRO_INSTRUMENT_0x00_SIZE 8 513 514 #define SENSOR_SUFFIX " Motion Sensors" 515 #define TOUCHPAD_SUFFIX " Touchpad" 516 517 #define SIXAXIS_INPUT_REPORT_ACC_X_OFFSET 41 518 #define SIXAXIS_ACC_RES_PER_G 113 519 520 static DEFINE_SPINLOCK(sony_dev_list_lock); 521 static LIST_HEAD(sony_device_list); 522 static DEFINE_IDA(sony_device_id_allocator); 523 524 enum sony_worker { 525 SONY_WORKER_STATE 526 }; 527 528 struct sony_sc { 529 spinlock_t lock; 530 struct list_head list_node; 531 struct hid_device *hdev; 532 struct input_dev *input_dev; 533 struct input_dev *touchpad; 534 struct input_dev *sensor_dev; 535 struct led_classdev *leds[MAX_LEDS]; 536 unsigned long quirks; 537 struct work_struct state_worker; 538 void (*send_output_report)(struct sony_sc *sc); 539 struct power_supply *battery; 540 struct power_supply_desc battery_desc; 541 int device_id; 542 u8 *output_report_dmabuf; 543 544 #ifdef CONFIG_SONY_FF 545 u8 left; 546 u8 right; 547 #endif 548 549 u8 mac_address[6]; 550 u8 state_worker_initialized; 551 u8 defer_initialization; 552 u8 battery_capacity; 553 int battery_status; 554 u8 led_state[MAX_LEDS]; 555 u8 led_delay_on[MAX_LEDS]; 556 u8 led_delay_off[MAX_LEDS]; 557 u8 led_count; 558 559 /* GH Live */ 560 struct urb *ghl_urb; 561 struct timer_list ghl_poke_timer; 562 563 /* Rock Band 3 Pro Instruments */ 564 unsigned long rb3_pro_poke_jiffies; 565 }; 566 567 static void sony_set_leds(struct sony_sc *sc); 568 569 static inline void sony_schedule_work(struct sony_sc *sc, 570 enum sony_worker which) 571 { 572 unsigned long flags; 573 574 switch (which) { 575 case SONY_WORKER_STATE: 576 spin_lock_irqsave(&sc->lock, flags); 577 if (!sc->defer_initialization && sc->state_worker_initialized) 578 schedule_work(&sc->state_worker); 579 spin_unlock_irqrestore(&sc->lock, flags); 580 break; 581 } 582 } 583 584 static void ghl_magic_poke_cb(struct urb *urb) 585 { 586 struct sony_sc *sc = urb->context; 587 588 if (urb->status < 0) 589 hid_err(sc->hdev, "URB transfer failed : %d", urb->status); 590 591 mod_timer(&sc->ghl_poke_timer, jiffies + GHL_GUITAR_POKE_INTERVAL*HZ); 592 } 593 594 static void ghl_magic_poke(struct timer_list *t) 595 { 596 int ret; 597 struct sony_sc *sc = timer_container_of(sc, t, ghl_poke_timer); 598 599 ret = usb_submit_urb(sc->ghl_urb, GFP_ATOMIC); 600 if (ret < 0) 601 hid_err(sc->hdev, "usb_submit_urb failed: %d", ret); 602 } 603 604 static int ghl_init_urb(struct sony_sc *sc, struct usb_device *usbdev, 605 const char ghl_magic_data[], u16 poke_size) 606 { 607 struct usb_ctrlrequest *cr; 608 u8 *databuf; 609 unsigned int pipe; 610 u16 ghl_magic_value = (((HID_OUTPUT_REPORT + 1) << 8) | ghl_magic_data[0]); 611 612 pipe = usb_sndctrlpipe(usbdev, 0); 613 614 cr = devm_kzalloc(&sc->hdev->dev, sizeof(*cr), GFP_ATOMIC); 615 if (!cr) 616 return -ENOMEM; 617 618 databuf = devm_kzalloc(&sc->hdev->dev, poke_size, GFP_ATOMIC); 619 if (!databuf) 620 return -ENOMEM; 621 622 cr->bRequestType = 623 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT; 624 cr->bRequest = USB_REQ_SET_CONFIGURATION; 625 cr->wValue = cpu_to_le16(ghl_magic_value); 626 cr->wIndex = 0; 627 cr->wLength = cpu_to_le16(poke_size); 628 memcpy(databuf, ghl_magic_data, poke_size); 629 usb_fill_control_urb( 630 sc->ghl_urb, usbdev, pipe, 631 (unsigned char *) cr, databuf, poke_size, 632 ghl_magic_poke_cb, sc); 633 return 0; 634 } 635 636 637 638 /* 639 * Sending HID_REQ_SET_REPORT enables the full report. Without this 640 * Rock Band 3 Pro instruments only report navigation events 641 */ 642 static int rb3_pro_instrument_enable_full_report(struct sony_sc *sc) 643 { 644 struct hid_device *hdev = sc->hdev; 645 static const u8 report[] = { 0x00, 0xE9, 0x00, 0x89, 0x1B, 646 0x00, 0x00, 0x00, 0x02, 0x00, 647 0x00, 0x00, 0x00, 0x00, 0x00, 648 0x00, 0x00, 0x00, 0x00, 0x00, 649 0x00, 0x00, 0x80, 0x00, 0x00, 650 0x00, 0x00, 0x89, 0x00, 0x00, 651 0x00, 0x00, 0x00, 0xE9, 0x01, 652 0x00, 0x00, 0x00, 0x00, 0x00, 653 0x00 }; 654 u8 *buf; 655 int ret; 656 657 buf = kmemdup(report, sizeof(report), GFP_KERNEL); 658 if (!buf) 659 return -ENOMEM; 660 661 ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(report), 662 HID_FEATURE_REPORT, HID_REQ_SET_REPORT); 663 664 kfree(buf); 665 666 return ret; 667 } 668 669 static int djh_turntable_mapping(struct hid_device *hdev, struct hid_input *hi, 670 struct hid_field *field, struct hid_usage *usage, 671 unsigned long **bit, int *max) 672 { 673 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) { 674 unsigned int abs = usage->hid & HID_USAGE; 675 676 if (abs == TURNTABLE_CROSS_FADER_USAGE) { 677 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RX); 678 return 1; 679 } else if (abs == TURNTABLE_EFFECTS_KNOB_USAGE) { 680 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RY); 681 return 1; 682 } else if (abs == TURNTABLE_PLATTER_BUTTONS_USAGE) { 683 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RZ); 684 return 1; 685 } 686 } else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) { 687 unsigned int abs = usage->hid & HID_USAGE; 688 689 if (abs >= ARRAY_SIZE(ps3_turntable_absmap)) 690 return -1; 691 692 abs = ps3_turntable_absmap[abs]; 693 694 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs); 695 return 1; 696 } 697 return 0; 698 } 699 700 static int instrument_mapping(struct hid_device *hdev, struct hid_input *hi, 701 struct hid_field *field, struct hid_usage *usage, 702 unsigned long **bit, int *max) 703 { 704 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) { 705 unsigned int key = usage->hid & HID_USAGE; 706 707 if (key >= ARRAY_SIZE(instrument_keymap)) 708 return 0; 709 710 key = instrument_keymap[key]; 711 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key); 712 return 1; 713 } 714 715 return 0; 716 } 717 718 static int gh_guitar_mapping(struct hid_device *hdev, struct hid_input *hi, 719 struct hid_field *field, struct hid_usage *usage, 720 unsigned long **bit, int *max) 721 { 722 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) { 723 unsigned int abs = usage->hid & HID_USAGE; 724 725 if (abs == GUITAR_TILT_USAGE) { 726 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RY); 727 return 1; 728 } 729 } 730 return 0; 731 } 732 733 static int rb4_guitar_mapping(struct hid_device *hdev, struct hid_input *hi, 734 struct hid_field *field, struct hid_usage *usage, 735 unsigned long **bit, int *max) 736 { 737 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) { 738 unsigned int abs = usage->hid & HID_USAGE; 739 740 /* Let the HID parser deal with the HAT. */ 741 if (usage->hid == HID_GD_HATSWITCH) 742 return 0; 743 744 if (abs >= ARRAY_SIZE(rb4_absmap)) 745 return 0; 746 747 abs = rb4_absmap[abs]; 748 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs); 749 return 1; 750 } 751 752 return 0; 753 } 754 755 static const u8 *motion_fixup(struct hid_device *hdev, u8 *rdesc, 756 unsigned int *rsize) 757 { 758 *rsize = sizeof(motion_rdesc); 759 return motion_rdesc; 760 } 761 762 static const u8 *ps3remote_fixup(struct hid_device *hdev, u8 *rdesc, 763 unsigned int *rsize) 764 { 765 *rsize = sizeof(ps3remote_rdesc); 766 return ps3remote_rdesc; 767 } 768 769 static int ps3remote_mapping(struct hid_device *hdev, struct hid_input *hi, 770 struct hid_field *field, struct hid_usage *usage, 771 unsigned long **bit, int *max) 772 { 773 unsigned int key = usage->hid & HID_USAGE; 774 775 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON) 776 return -1; 777 778 switch (usage->collection_index) { 779 case 1: 780 if (key >= ARRAY_SIZE(ps3remote_keymap_joypad_buttons)) 781 return -1; 782 783 key = ps3remote_keymap_joypad_buttons[key]; 784 if (!key) 785 return -1; 786 break; 787 case 2: 788 if (key >= ARRAY_SIZE(ps3remote_keymap_remote_buttons)) 789 return -1; 790 791 key = ps3remote_keymap_remote_buttons[key]; 792 if (!key) 793 return -1; 794 break; 795 default: 796 return -1; 797 } 798 799 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key); 800 return 1; 801 } 802 803 static int navigation_mapping(struct hid_device *hdev, struct hid_input *hi, 804 struct hid_field *field, struct hid_usage *usage, 805 unsigned long **bit, int *max) 806 { 807 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) { 808 unsigned int key = usage->hid & HID_USAGE; 809 810 if (key >= ARRAY_SIZE(sixaxis_keymap)) 811 return -1; 812 813 key = navigation_keymap[key]; 814 if (!key) 815 return -1; 816 817 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key); 818 return 1; 819 } else if (usage->hid == HID_GD_POINTER) { 820 /* See comment in sixaxis_mapping, basically the L2 (and R2) 821 * triggers are reported through GD Pointer. 822 * In addition we ignore any analog button 'axes' and only 823 * support digital buttons. 824 */ 825 switch (usage->usage_index) { 826 case 8: /* L2 */ 827 usage->hid = HID_GD_Z; 828 break; 829 default: 830 return -1; 831 } 832 833 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, usage->hid & 0xf); 834 return 1; 835 } else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) { 836 unsigned int abs = usage->hid & HID_USAGE; 837 838 if (abs >= ARRAY_SIZE(navigation_absmap)) 839 return -1; 840 841 abs = navigation_absmap[abs]; 842 843 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs); 844 return 1; 845 } 846 847 return -1; 848 } 849 850 851 static int sixaxis_mapping(struct hid_device *hdev, struct hid_input *hi, 852 struct hid_field *field, struct hid_usage *usage, 853 unsigned long **bit, int *max) 854 { 855 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) { 856 unsigned int key = usage->hid & HID_USAGE; 857 858 if (key >= ARRAY_SIZE(sixaxis_keymap)) 859 return -1; 860 861 key = sixaxis_keymap[key]; 862 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key); 863 return 1; 864 } else if (usage->hid == HID_GD_POINTER) { 865 /* The DS3 provides analog values for most buttons and even 866 * for HAT axes through GD Pointer. L2 and R2 are reported 867 * among these as well instead of as GD Z / RZ. Remap L2 868 * and R2 and ignore other analog 'button axes' as there is 869 * no good way for reporting them. 870 */ 871 switch (usage->usage_index) { 872 case 8: /* L2 */ 873 usage->hid = HID_GD_Z; 874 break; 875 case 9: /* R2 */ 876 usage->hid = HID_GD_RZ; 877 break; 878 default: 879 return -1; 880 } 881 882 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, usage->hid & 0xf); 883 return 1; 884 } else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) { 885 unsigned int abs = usage->hid & HID_USAGE; 886 887 if (abs >= ARRAY_SIZE(sixaxis_absmap)) 888 return -1; 889 890 abs = sixaxis_absmap[abs]; 891 892 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs); 893 return 1; 894 } 895 896 return -1; 897 } 898 899 static const u8 *sony_report_fixup(struct hid_device *hdev, u8 *rdesc, 900 unsigned int *rsize) 901 { 902 struct sony_sc *sc = hid_get_drvdata(hdev); 903 904 if (sc->quirks & (SINO_LITE_CONTROLLER | FUTUREMAX_DANCE_MAT)) 905 return rdesc; 906 907 /* 908 * Some Sony RF receivers wrongly declare the mouse pointer as a 909 * a constant non-data variable. 910 */ 911 if ((sc->quirks & VAIO_RDESC_CONSTANT) && *rsize >= 56 && 912 /* usage page: generic desktop controls */ 913 /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */ 914 /* usage: mouse */ 915 rdesc[2] == 0x09 && rdesc[3] == 0x02 && 916 /* input (usage page for x,y axes): constant, variable, relative */ 917 rdesc[54] == 0x81 && rdesc[55] == 0x07) { 918 hid_info(hdev, "Fixing up Sony RF Receiver report descriptor\n"); 919 /* input: data, variable, relative */ 920 rdesc[55] = 0x06; 921 } 922 923 if (sc->quirks & MOTION_CONTROLLER) 924 return motion_fixup(hdev, rdesc, rsize); 925 926 if (sc->quirks & PS3REMOTE) 927 return ps3remote_fixup(hdev, rdesc, rsize); 928 929 /* 930 * Some knock-off USB dongles incorrectly report their button count 931 * as 13 instead of 16 causing three non-functional buttons. 932 */ 933 if ((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize >= 45 && 934 /* Report Count (13) */ 935 rdesc[23] == 0x95 && rdesc[24] == 0x0D && 936 /* Usage Maximum (13) */ 937 rdesc[37] == 0x29 && rdesc[38] == 0x0D && 938 /* Report Count (3) */ 939 rdesc[43] == 0x95 && rdesc[44] == 0x03) { 940 hid_info(hdev, "Fixing up USB dongle report descriptor\n"); 941 rdesc[24] = 0x10; 942 rdesc[38] = 0x10; 943 rdesc[44] = 0x00; 944 } 945 946 return rdesc; 947 } 948 949 static void sixaxis_parse_report(struct sony_sc *sc, u8 *rd, int size) 950 { 951 static const u8 sixaxis_battery_capacity[] = { 0, 1, 25, 50, 75, 100 }; 952 unsigned long flags; 953 int offset; 954 u8 index; 955 u8 battery_capacity; 956 int battery_status; 957 958 /* 959 * The sixaxis is charging if the battery value is 0xee 960 * and it is fully charged if the value is 0xef. 961 * It does not report the actual level while charging so it 962 * is set to 100% while charging is in progress. 963 */ 964 offset = (sc->quirks & MOTION_CONTROLLER) ? 12 : 30; 965 966 if (rd[offset] >= 0xee) { 967 battery_capacity = 100; 968 battery_status = (rd[offset] & 0x01) ? POWER_SUPPLY_STATUS_FULL : POWER_SUPPLY_STATUS_CHARGING; 969 } else { 970 index = rd[offset] <= 5 ? rd[offset] : 5; 971 battery_capacity = sixaxis_battery_capacity[index]; 972 battery_status = POWER_SUPPLY_STATUS_DISCHARGING; 973 } 974 975 spin_lock_irqsave(&sc->lock, flags); 976 sc->battery_capacity = battery_capacity; 977 sc->battery_status = battery_status; 978 spin_unlock_irqrestore(&sc->lock, flags); 979 980 if (sc->quirks & SIXAXIS_CONTROLLER) { 981 int val; 982 983 offset = SIXAXIS_INPUT_REPORT_ACC_X_OFFSET; 984 val = ((rd[offset+1] << 8) | rd[offset]) - 511; 985 input_report_abs(sc->sensor_dev, ABS_X, val); 986 987 /* Y and Z are swapped and inversed */ 988 val = 511 - ((rd[offset+5] << 8) | rd[offset+4]); 989 input_report_abs(sc->sensor_dev, ABS_Y, val); 990 991 val = 511 - ((rd[offset+3] << 8) | rd[offset+2]); 992 input_report_abs(sc->sensor_dev, ABS_Z, val); 993 994 input_sync(sc->sensor_dev); 995 } 996 } 997 998 static void nsg_mrxu_parse_report(struct sony_sc *sc, u8 *rd, int size) 999 { 1000 int n, offset, relx, rely; 1001 u8 active; 1002 1003 /* 1004 * The NSG-MRxU multi-touch trackpad data starts at offset 1 and 1005 * the touch-related data starts at offset 2. 1006 * For the first byte, bit 0 is set when touchpad button is pressed. 1007 * 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 1009 * touch point is active. 1010 * Bit 4 is set when only the first touch point is active. 1011 * Bit 6 is set when only the second touch point is active. 1012 * Bits 5 and 7 are set when both touch points are active. 1013 * The next 3 bytes are two 12 bit X/Y coordinates for the first touch. 1014 * The following byte, offset 5, has the touch width and length. 1015 * Bits 0-4=X (width), bits 5-7=Y (length). 1016 * A signed relative X coordinate is at offset 6. 1017 * The bytes at offset 7-9 are the second touch X/Y coordinates. 1018 * Offset 10 has the second touch width and length. 1019 * Offset 11 has the relative Y coordinate. 1020 */ 1021 offset = 1; 1022 1023 input_report_key(sc->touchpad, BTN_LEFT, rd[offset] & 0x0F); 1024 active = (rd[offset] >> 4); 1025 relx = (s8) rd[offset+5]; 1026 rely = ((s8) rd[offset+10]) * -1; 1027 1028 offset++; 1029 1030 for (n = 0; n < 2; n++) { 1031 u16 x, y; 1032 u8 contactx, contacty; 1033 1034 x = rd[offset] | ((rd[offset+1] & 0x0F) << 8); 1035 y = ((rd[offset+1] & 0xF0) >> 4) | (rd[offset+2] << 4); 1036 1037 input_mt_slot(sc->touchpad, n); 1038 input_mt_report_slot_state(sc->touchpad, MT_TOOL_FINGER, active & 0x03); 1039 1040 if (active & 0x03) { 1041 contactx = rd[offset+3] & 0x0F; 1042 contacty = rd[offset+3] >> 4; 1043 input_report_abs(sc->touchpad, ABS_MT_TOUCH_MAJOR, 1044 max(contactx, contacty)); 1045 input_report_abs(sc->touchpad, ABS_MT_TOUCH_MINOR, 1046 min(contactx, contacty)); 1047 input_report_abs(sc->touchpad, ABS_MT_ORIENTATION, 1048 (bool) (contactx > contacty)); 1049 input_report_abs(sc->touchpad, ABS_MT_POSITION_X, x); 1050 input_report_abs(sc->touchpad, ABS_MT_POSITION_Y, 1051 NSG_MRXU_MAX_Y - y); 1052 /* 1053 * The relative coordinates belong to the first touch 1054 * point, when present, or to the second touch point 1055 * when the first is not active. 1056 */ 1057 if ((n == 0) || ((n == 1) && (active & 0x01))) { 1058 input_report_rel(sc->touchpad, REL_X, relx); 1059 input_report_rel(sc->touchpad, REL_Y, rely); 1060 } 1061 } 1062 1063 offset += 5; 1064 active >>= 2; 1065 } 1066 1067 input_mt_sync_frame(sc->touchpad); 1068 1069 input_sync(sc->touchpad); 1070 } 1071 1072 static void rb4_ps4_guitar_parse_report(struct sony_sc *sc, u8 *rd, int size) 1073 { 1074 /* 1075 * Rock Band 4 PS4 guitars have whammy and 1076 * tilt functionality, they're located at 1077 * byte 44 and 45 respectively. 1078 * 1079 * We will map these values to the triggers 1080 * because the guitars don't have anything 1081 * mapped there. 1082 */ 1083 input_report_abs(sc->input_dev, ABS_Z, rd[44]); 1084 input_report_abs(sc->input_dev, ABS_RZ, rd[45]); 1085 1086 input_sync(sc->input_dev); 1087 } 1088 1089 static void rb4_ps5_guitar_parse_report(struct sony_sc *sc, u8 *rd, int size) 1090 { 1091 u8 charging_status; 1092 u8 battery_data; 1093 u8 battery_capacity; 1094 u8 battery_status; 1095 unsigned long flags; 1096 1097 /* 1098 * Rock Band 4 PS5 guitars have whammy and 1099 * tilt functionality, they're located at 1100 * byte 41 and 42 respectively. 1101 * 1102 * We will map these values to the triggers 1103 * because the guitars don't have anything 1104 * mapped there. 1105 */ 1106 input_report_abs(sc->input_dev, ABS_Z, rd[41]); 1107 input_report_abs(sc->input_dev, ABS_RZ, rd[42]); 1108 1109 /* 1110 * Rock Band 4 PS5 guitars also report the 1111 * battery status and level at byte 30. 1112 */ 1113 charging_status = (rd[30] >> 4) & 0x0F; 1114 battery_data = rd[30] & 0x0F; 1115 1116 switch (charging_status) { 1117 case 0x0: 1118 battery_capacity = min(battery_data * 10 + 5, 100); 1119 battery_status = POWER_SUPPLY_STATUS_DISCHARGING; 1120 break; 1121 case 0x1: 1122 battery_capacity = min(battery_data * 10 + 5, 100); 1123 battery_status = POWER_SUPPLY_STATUS_CHARGING; 1124 break; 1125 case 0x2: 1126 battery_capacity = 100; 1127 battery_status = POWER_SUPPLY_STATUS_FULL; 1128 break; 1129 default: 1130 battery_capacity = 0; 1131 battery_status = POWER_SUPPLY_STATUS_UNKNOWN; 1132 break; 1133 } 1134 1135 spin_lock_irqsave(&sc->lock, flags); 1136 sc->battery_capacity = battery_capacity; 1137 sc->battery_status = battery_status; 1138 spin_unlock_irqrestore(&sc->lock, flags); 1139 1140 input_sync(sc->input_dev); 1141 } 1142 1143 static int sony_raw_event(struct hid_device *hdev, struct hid_report *report, 1144 u8 *rd, int size) 1145 { 1146 struct sony_sc *sc = hid_get_drvdata(hdev); 1147 1148 /* 1149 * Sixaxis HID report has acclerometers/gyro with MSByte first, this 1150 * has to be BYTE_SWAPPED before passing up to joystick interface 1151 */ 1152 if ((sc->quirks & SIXAXIS_CONTROLLER) && rd[0] == 0x01 && size == 49) { 1153 /* 1154 * When connected via Bluetooth the Sixaxis occasionally sends 1155 * a report with the second byte 0xff and the rest zeroed. 1156 * 1157 * This report does not reflect the actual state of the 1158 * controller must be ignored to avoid generating false input 1159 * events. 1160 */ 1161 if (rd[1] == 0xff) 1162 return -EINVAL; 1163 1164 swap(rd[41], rd[42]); 1165 swap(rd[43], rd[44]); 1166 swap(rd[45], rd[46]); 1167 swap(rd[47], rd[48]); 1168 1169 sixaxis_parse_report(sc, rd, size); 1170 } else if ((sc->quirks & MOTION_CONTROLLER_BT) && rd[0] == 0x01 && size == 49) { 1171 sixaxis_parse_report(sc, rd, size); 1172 } else if ((sc->quirks & NAVIGATION_CONTROLLER) && rd[0] == 0x01 && 1173 size == 49) { 1174 sixaxis_parse_report(sc, rd, size); 1175 } else if ((sc->quirks & NSG_MRXU_REMOTE) && rd[0] == 0x02) { 1176 nsg_mrxu_parse_report(sc, rd, size); 1177 return 1; 1178 } else if ((sc->quirks & RB4_GUITAR_PS4_USB) && rd[0] == 0x01 && size == 64) { 1179 rb4_ps4_guitar_parse_report(sc, rd, size); 1180 return 1; 1181 } else if ((sc->quirks & RB4_GUITAR_PS4_BT) && rd[0] == 0x01 && size == 78) { 1182 rb4_ps4_guitar_parse_report(sc, rd, size); 1183 return 1; 1184 } else if ((sc->quirks & RB4_GUITAR_PS5) && rd[0] == 0x01 && size == 64) { 1185 rb4_ps5_guitar_parse_report(sc, rd, size); 1186 return 1; 1187 } 1188 1189 /* Rock Band 3 PS3 Pro instruments set rd[24] to 0xE0 when they're 1190 * sending full reports, and 0x02 when only sending navigation. 1191 */ 1192 if ((sc->quirks & RB3_PRO_INSTRUMENT) && rd[24] == 0x02) { 1193 /* Only attempt to enable full report every 8 seconds */ 1194 if (time_after(jiffies, sc->rb3_pro_poke_jiffies)) { 1195 sc->rb3_pro_poke_jiffies = jiffies + secs_to_jiffies(8); 1196 rb3_pro_instrument_enable_full_report(sc); 1197 } 1198 } 1199 1200 if (sc->defer_initialization) { 1201 sc->defer_initialization = 0; 1202 sony_schedule_work(sc, SONY_WORKER_STATE); 1203 } 1204 1205 return 0; 1206 } 1207 1208 static int sony_mapping(struct hid_device *hdev, struct hid_input *hi, 1209 struct hid_field *field, struct hid_usage *usage, 1210 unsigned long **bit, int *max) 1211 { 1212 struct sony_sc *sc = hid_get_drvdata(hdev); 1213 int ret; 1214 1215 if (sc->quirks & BUZZ_CONTROLLER) { 1216 unsigned int key = usage->hid & HID_USAGE; 1217 1218 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON) 1219 return -1; 1220 1221 switch (usage->collection_index) { 1222 case 1: 1223 if (key >= ARRAY_SIZE(buzz_keymap)) 1224 return -1; 1225 1226 key = buzz_keymap[key]; 1227 if (!key) 1228 return -1; 1229 break; 1230 default: 1231 return -1; 1232 } 1233 1234 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key); 1235 return 1; 1236 } 1237 1238 if (sc->quirks & PS3REMOTE) 1239 return ps3remote_mapping(hdev, hi, field, usage, bit, max); 1240 1241 if (sc->quirks & NAVIGATION_CONTROLLER) 1242 return navigation_mapping(hdev, hi, field, usage, bit, max); 1243 1244 if (sc->quirks & SIXAXIS_CONTROLLER) 1245 return sixaxis_mapping(hdev, hi, field, usage, bit, max); 1246 1247 /* INSTRUMENT quirk is used as a base mapping for instruments */ 1248 if (sc->quirks & INSTRUMENT) { 1249 ret = instrument_mapping(hdev, hi, field, usage, bit, max); 1250 if (ret != 0) 1251 return ret; 1252 } 1253 1254 if (sc->quirks & GH_GUITAR_TILT) 1255 return gh_guitar_mapping(hdev, hi, field, usage, bit, max); 1256 1257 if (sc->quirks & DJH_TURNTABLE) 1258 return djh_turntable_mapping(hdev, hi, field, usage, bit, max); 1259 1260 if (sc->quirks & (RB4_GUITAR_PS4_USB | RB4_GUITAR_PS4_BT)) 1261 return rb4_guitar_mapping(hdev, hi, field, usage, bit, max); 1262 1263 if (sc->quirks & RB4_GUITAR_PS5) 1264 return rb4_guitar_mapping(hdev, hi, field, usage, bit, max); 1265 1266 /* Let hid-core decide for the others */ 1267 return 0; 1268 } 1269 1270 static int sony_register_touchpad(struct sony_sc *sc, int touch_count, 1271 int w, int h, int touch_major, int touch_minor, int orientation) 1272 { 1273 size_t name_sz; 1274 char *name; 1275 int ret; 1276 1277 sc->touchpad = devm_input_allocate_device(&sc->hdev->dev); 1278 if (!sc->touchpad) 1279 return -ENOMEM; 1280 1281 input_set_drvdata(sc->touchpad, sc); 1282 sc->touchpad->dev.parent = &sc->hdev->dev; 1283 sc->touchpad->phys = sc->hdev->phys; 1284 sc->touchpad->uniq = sc->hdev->uniq; 1285 sc->touchpad->id.bustype = sc->hdev->bus; 1286 sc->touchpad->id.vendor = sc->hdev->vendor; 1287 sc->touchpad->id.product = sc->hdev->product; 1288 sc->touchpad->id.version = sc->hdev->version; 1289 1290 /* This suffix was originally apended when hid-sony also 1291 * supported DS4 devices. The DS4 was implemented using multiple 1292 * evdev nodes and hence had the need to separete them out using 1293 * a suffix. Other devices which were added later like Sony TV remotes 1294 * inhirited this suffix. 1295 */ 1296 name_sz = strlen(sc->hdev->name) + sizeof(TOUCHPAD_SUFFIX); 1297 name = devm_kzalloc(&sc->hdev->dev, name_sz, GFP_KERNEL); 1298 if (!name) 1299 return -ENOMEM; 1300 snprintf(name, name_sz, "%s" TOUCHPAD_SUFFIX, sc->hdev->name); 1301 sc->touchpad->name = name; 1302 1303 /* We map the button underneath the touchpad to BTN_LEFT. */ 1304 __set_bit(EV_KEY, sc->touchpad->evbit); 1305 __set_bit(BTN_LEFT, sc->touchpad->keybit); 1306 __set_bit(INPUT_PROP_BUTTONPAD, sc->touchpad->propbit); 1307 1308 input_set_abs_params(sc->touchpad, ABS_MT_POSITION_X, 0, w, 0, 0); 1309 input_set_abs_params(sc->touchpad, ABS_MT_POSITION_Y, 0, h, 0, 0); 1310 1311 if (touch_major > 0) { 1312 input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MAJOR, 1313 0, touch_major, 0, 0); 1314 if (touch_minor > 0) 1315 input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MINOR, 1316 0, touch_minor, 0, 0); 1317 if (orientation > 0) 1318 input_set_abs_params(sc->touchpad, ABS_MT_ORIENTATION, 1319 0, orientation, 0, 0); 1320 } 1321 1322 if (sc->quirks & NSG_MRXU_REMOTE) 1323 __set_bit(EV_REL, sc->touchpad->evbit); 1324 1325 ret = input_mt_init_slots(sc->touchpad, touch_count, INPUT_MT_POINTER); 1326 if (ret < 0) 1327 return ret; 1328 1329 ret = input_register_device(sc->touchpad); 1330 if (ret < 0) 1331 return ret; 1332 1333 return 0; 1334 } 1335 1336 static int sony_register_sensors(struct sony_sc *sc) 1337 { 1338 size_t name_sz; 1339 char *name; 1340 int ret; 1341 1342 sc->sensor_dev = devm_input_allocate_device(&sc->hdev->dev); 1343 if (!sc->sensor_dev) 1344 return -ENOMEM; 1345 1346 input_set_drvdata(sc->sensor_dev, sc); 1347 sc->sensor_dev->dev.parent = &sc->hdev->dev; 1348 sc->sensor_dev->phys = sc->hdev->phys; 1349 sc->sensor_dev->uniq = sc->hdev->uniq; 1350 sc->sensor_dev->id.bustype = sc->hdev->bus; 1351 sc->sensor_dev->id.vendor = sc->hdev->vendor; 1352 sc->sensor_dev->id.product = sc->hdev->product; 1353 sc->sensor_dev->id.version = sc->hdev->version; 1354 1355 /* Append a suffix to the controller name as there are various 1356 * DS4 compatible non-Sony devices with different names. 1357 */ 1358 name_sz = strlen(sc->hdev->name) + sizeof(SENSOR_SUFFIX); 1359 name = devm_kzalloc(&sc->hdev->dev, name_sz, GFP_KERNEL); 1360 if (!name) 1361 return -ENOMEM; 1362 snprintf(name, name_sz, "%s" SENSOR_SUFFIX, sc->hdev->name); 1363 sc->sensor_dev->name = name; 1364 1365 if (sc->quirks & SIXAXIS_CONTROLLER) { 1366 /* For the DS3 we only support the accelerometer, which works 1367 * quite well even without calibration. The device also has 1368 * a 1-axis gyro, but it is very difficult to manage from within 1369 * the driver even to get data, the sensor is inaccurate and 1370 * the behavior is very different between hardware revisions. 1371 */ 1372 input_set_abs_params(sc->sensor_dev, ABS_X, -512, 511, 4, 0); 1373 input_set_abs_params(sc->sensor_dev, ABS_Y, -512, 511, 4, 0); 1374 input_set_abs_params(sc->sensor_dev, ABS_Z, -512, 511, 4, 0); 1375 input_abs_set_res(sc->sensor_dev, ABS_X, SIXAXIS_ACC_RES_PER_G); 1376 input_abs_set_res(sc->sensor_dev, ABS_Y, SIXAXIS_ACC_RES_PER_G); 1377 input_abs_set_res(sc->sensor_dev, ABS_Z, SIXAXIS_ACC_RES_PER_G); 1378 } 1379 1380 __set_bit(INPUT_PROP_ACCELEROMETER, sc->sensor_dev->propbit); 1381 1382 ret = input_register_device(sc->sensor_dev); 1383 if (ret < 0) 1384 return ret; 1385 1386 return 0; 1387 } 1388 1389 /* 1390 * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller 1391 * to "operational". Without this, the ps3 controller will not report any 1392 * events. 1393 */ 1394 static int sixaxis_set_operational_usb(struct hid_device *hdev) 1395 { 1396 struct sony_sc *sc = hid_get_drvdata(hdev); 1397 const int buf_size = 1398 max(SIXAXIS_REPORT_0xF2_SIZE, SIXAXIS_REPORT_0xF5_SIZE); 1399 u8 *buf; 1400 int ret; 1401 1402 buf = kmalloc(buf_size, GFP_KERNEL); 1403 if (!buf) 1404 return -ENOMEM; 1405 1406 ret = hid_hw_raw_request(hdev, 0xf2, buf, SIXAXIS_REPORT_0xF2_SIZE, 1407 HID_FEATURE_REPORT, HID_REQ_GET_REPORT); 1408 if (ret < 0) { 1409 hid_err(hdev, "can't set operational mode: step 1\n"); 1410 goto out; 1411 } 1412 1413 /* 1414 * Some compatible controllers like the Speedlink Strike FX and 1415 * Gasia need another query plus an USB interrupt to get operational. 1416 */ 1417 ret = hid_hw_raw_request(hdev, 0xf5, buf, SIXAXIS_REPORT_0xF5_SIZE, 1418 HID_FEATURE_REPORT, HID_REQ_GET_REPORT); 1419 if (ret < 0) { 1420 hid_err(hdev, "can't set operational mode: step 2\n"); 1421 goto out; 1422 } 1423 1424 /* 1425 * But the USB interrupt would cause SHANWAN controllers to 1426 * start rumbling non-stop, so skip step 3 for these controllers. 1427 */ 1428 if (sc->quirks & SHANWAN_GAMEPAD) 1429 goto out; 1430 1431 ret = hid_hw_output_report(hdev, buf, 1); 1432 if (ret < 0) { 1433 hid_info(hdev, "can't set operational mode: step 3, ignoring\n"); 1434 ret = 0; 1435 } 1436 1437 out: 1438 kfree(buf); 1439 1440 return ret; 1441 } 1442 1443 static int sixaxis_set_operational_bt(struct hid_device *hdev) 1444 { 1445 static const u8 report[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 }; 1446 u8 *buf; 1447 int ret; 1448 1449 buf = kmemdup(report, sizeof(report), GFP_KERNEL); 1450 if (!buf) 1451 return -ENOMEM; 1452 1453 ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(report), 1454 HID_FEATURE_REPORT, HID_REQ_SET_REPORT); 1455 1456 kfree(buf); 1457 1458 return ret; 1459 } 1460 1461 static void sixaxis_set_leds_from_id(struct sony_sc *sc) 1462 { 1463 static const u8 sixaxis_leds[10][4] = { 1464 { 0x01, 0x00, 0x00, 0x00 }, 1465 { 0x00, 0x01, 0x00, 0x00 }, 1466 { 0x00, 0x00, 0x01, 0x00 }, 1467 { 0x00, 0x00, 0x00, 0x01 }, 1468 { 0x01, 0x00, 0x00, 0x01 }, 1469 { 0x00, 0x01, 0x00, 0x01 }, 1470 { 0x00, 0x00, 0x01, 0x01 }, 1471 { 0x01, 0x00, 0x01, 0x01 }, 1472 { 0x00, 0x01, 0x01, 0x01 }, 1473 { 0x01, 0x01, 0x01, 0x01 } 1474 }; 1475 1476 int id = sc->device_id; 1477 1478 BUILD_BUG_ON(ARRAY_SIZE(sixaxis_leds[0]) > MAX_LEDS); 1479 1480 if (id < 0) 1481 return; 1482 1483 id %= 10; 1484 memcpy(sc->led_state, sixaxis_leds[id], sizeof(sixaxis_leds[id])); 1485 } 1486 1487 static void buzz_set_leds(struct sony_sc *sc) 1488 { 1489 struct hid_device *hdev = sc->hdev; 1490 struct list_head *report_list = 1491 &hdev->report_enum[HID_OUTPUT_REPORT].report_list; 1492 struct hid_report *report = list_entry(report_list->next, 1493 struct hid_report, list); 1494 s32 *value = report->field[0]->value; 1495 1496 BUILD_BUG_ON(4 > MAX_LEDS); 1497 1498 value[0] = 0x00; 1499 value[1] = sc->led_state[0] ? 0xff : 0x00; 1500 value[2] = sc->led_state[1] ? 0xff : 0x00; 1501 value[3] = sc->led_state[2] ? 0xff : 0x00; 1502 value[4] = sc->led_state[3] ? 0xff : 0x00; 1503 value[5] = 0x00; 1504 value[6] = 0x00; 1505 hid_hw_request(hdev, report, HID_REQ_SET_REPORT); 1506 } 1507 1508 static void sony_set_leds(struct sony_sc *sc) 1509 { 1510 if (!(sc->quirks & BUZZ_CONTROLLER)) 1511 sony_schedule_work(sc, SONY_WORKER_STATE); 1512 else 1513 buzz_set_leds(sc); 1514 } 1515 1516 static void sony_led_set_brightness(struct led_classdev *led, 1517 enum led_brightness value) 1518 { 1519 struct device *dev = led->dev->parent; 1520 struct hid_device *hdev = to_hid_device(dev); 1521 struct sony_sc *drv_data; 1522 1523 int n; 1524 int force_update; 1525 1526 drv_data = hid_get_drvdata(hdev); 1527 if (!drv_data) { 1528 hid_err(hdev, "No device data\n"); 1529 return; 1530 } 1531 1532 /* 1533 * The Sixaxis on USB will override any LED settings sent to it 1534 * and keep flashing all of the LEDs until the PS button is pressed. 1535 * Updates, even if redundant, must be always be sent to the 1536 * controller to avoid having to toggle the state of an LED just to 1537 * stop the flashing later on. 1538 */ 1539 force_update = !!(drv_data->quirks & SIXAXIS_CONTROLLER_USB); 1540 1541 for (n = 0; n < drv_data->led_count; n++) { 1542 if (led == drv_data->leds[n] && (force_update || 1543 (value != drv_data->led_state[n] || 1544 drv_data->led_delay_on[n] || 1545 drv_data->led_delay_off[n]))) { 1546 1547 drv_data->led_state[n] = value; 1548 1549 /* Setting the brightness stops the blinking */ 1550 drv_data->led_delay_on[n] = 0; 1551 drv_data->led_delay_off[n] = 0; 1552 1553 sony_set_leds(drv_data); 1554 break; 1555 } 1556 } 1557 } 1558 1559 static enum led_brightness sony_led_get_brightness(struct led_classdev *led) 1560 { 1561 struct device *dev = led->dev->parent; 1562 struct hid_device *hdev = to_hid_device(dev); 1563 struct sony_sc *drv_data; 1564 1565 int n; 1566 1567 drv_data = hid_get_drvdata(hdev); 1568 if (!drv_data) { 1569 hid_err(hdev, "No device data\n"); 1570 return LED_OFF; 1571 } 1572 1573 for (n = 0; n < drv_data->led_count; n++) { 1574 if (led == drv_data->leds[n]) 1575 return drv_data->led_state[n]; 1576 } 1577 1578 return LED_OFF; 1579 } 1580 1581 static int sony_led_blink_set(struct led_classdev *led, unsigned long *delay_on, 1582 unsigned long *delay_off) 1583 { 1584 struct device *dev = led->dev->parent; 1585 struct hid_device *hdev = to_hid_device(dev); 1586 struct sony_sc *drv_data = hid_get_drvdata(hdev); 1587 int n; 1588 u8 new_on, new_off; 1589 1590 if (!drv_data) { 1591 hid_err(hdev, "No device data\n"); 1592 return -EINVAL; 1593 } 1594 1595 /* Max delay is 255 deciseconds or 2550 milliseconds */ 1596 if (*delay_on > 2550) 1597 *delay_on = 2550; 1598 if (*delay_off > 2550) 1599 *delay_off = 2550; 1600 1601 /* Blink at 1 Hz if both values are zero */ 1602 if (!*delay_on && !*delay_off) 1603 *delay_on = *delay_off = 500; 1604 1605 new_on = *delay_on / 10; 1606 new_off = *delay_off / 10; 1607 1608 for (n = 0; n < drv_data->led_count; n++) { 1609 if (led == drv_data->leds[n]) 1610 break; 1611 } 1612 1613 /* This LED is not registered on this device */ 1614 if (n >= drv_data->led_count) 1615 return -EINVAL; 1616 1617 /* Don't schedule work if the values didn't change */ 1618 if (new_on != drv_data->led_delay_on[n] || 1619 new_off != drv_data->led_delay_off[n]) { 1620 drv_data->led_delay_on[n] = new_on; 1621 drv_data->led_delay_off[n] = new_off; 1622 sony_schedule_work(drv_data, SONY_WORKER_STATE); 1623 } 1624 1625 return 0; 1626 } 1627 1628 static int sony_leds_init(struct sony_sc *sc) 1629 { 1630 struct hid_device *hdev = sc->hdev; 1631 int n, ret = 0; 1632 int use_color_names; 1633 struct led_classdev *led; 1634 size_t name_sz; 1635 char *name; 1636 size_t name_len; 1637 const char *name_fmt; 1638 static const char * const color_name_str[] = { "red", "green", "blue", 1639 "global" }; 1640 u8 max_brightness[MAX_LEDS] = { [0 ... (MAX_LEDS - 1)] = 1 }; 1641 u8 use_hw_blink[MAX_LEDS] = { 0 }; 1642 1643 if (WARN_ON(!(sc->quirks & SONY_LED_SUPPORT))) 1644 return -EINVAL; 1645 1646 if (sc->quirks & BUZZ_CONTROLLER) { 1647 sc->led_count = 4; 1648 use_color_names = 0; 1649 name_len = strlen("::buzz#"); 1650 name_fmt = "%s::buzz%d"; 1651 /* Validate expected report characteristics. */ 1652 if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 0, 0, 7)) 1653 return -ENODEV; 1654 } else if (sc->quirks & MOTION_CONTROLLER) { 1655 sc->led_count = 3; 1656 memset(max_brightness, 255, 3); 1657 use_color_names = 1; 1658 name_len = 0; 1659 name_fmt = "%s:%s"; 1660 } else if (sc->quirks & NAVIGATION_CONTROLLER) { 1661 static const u8 navigation_leds[4] = {0x01, 0x00, 0x00, 0x00}; 1662 1663 memcpy(sc->led_state, navigation_leds, sizeof(navigation_leds)); 1664 sc->led_count = 1; 1665 memset(use_hw_blink, 1, 4); 1666 use_color_names = 0; 1667 name_len = strlen("::sony#"); 1668 name_fmt = "%s::sony%d"; 1669 } else { 1670 sixaxis_set_leds_from_id(sc); 1671 sc->led_count = 4; 1672 memset(use_hw_blink, 1, 4); 1673 use_color_names = 0; 1674 name_len = strlen("::sony#"); 1675 name_fmt = "%s::sony%d"; 1676 } 1677 1678 /* 1679 * Clear LEDs as we have no way of reading their initial state. This is 1680 * only relevant if the driver is loaded after somebody actively set the 1681 * LEDs to on 1682 */ 1683 sony_set_leds(sc); 1684 1685 name_sz = strlen(dev_name(&hdev->dev)) + name_len + 1; 1686 1687 for (n = 0; n < sc->led_count; n++) { 1688 1689 if (use_color_names) 1690 name_sz = strlen(dev_name(&hdev->dev)) + strlen(color_name_str[n]) + 2; 1691 1692 led = devm_kzalloc(&hdev->dev, sizeof(struct led_classdev) + name_sz, GFP_KERNEL); 1693 if (!led) 1694 return -ENOMEM; 1695 1696 name = (void *)(&led[1]); 1697 if (use_color_names) 1698 snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), color_name_str[n]); 1699 else 1700 snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), n + 1); 1701 led->name = name; 1702 led->brightness = sc->led_state[n]; 1703 led->max_brightness = max_brightness[n]; 1704 led->flags = LED_CORE_SUSPENDRESUME; 1705 led->brightness_get = sony_led_get_brightness; 1706 led->brightness_set = sony_led_set_brightness; 1707 1708 if (use_hw_blink[n]) 1709 led->blink_set = sony_led_blink_set; 1710 1711 sc->leds[n] = led; 1712 1713 ret = devm_led_classdev_register(&hdev->dev, led); 1714 if (ret) { 1715 hid_err(hdev, "Failed to register LED %d\n", n); 1716 return ret; 1717 } 1718 } 1719 1720 return 0; 1721 } 1722 1723 static void sixaxis_send_output_report(struct sony_sc *sc) 1724 { 1725 static const union sixaxis_output_report_01 default_report = { 1726 .buf = { 1727 0x01, 1728 0x01, 0xff, 0x00, 0xff, 0x00, 1729 0x00, 0x00, 0x00, 0x00, 0x00, 1730 0xff, 0x27, 0x10, 0x00, 0x32, 1731 0xff, 0x27, 0x10, 0x00, 0x32, 1732 0xff, 0x27, 0x10, 0x00, 0x32, 1733 0xff, 0x27, 0x10, 0x00, 0x32, 1734 0x00, 0x00, 0x00, 0x00, 0x00 1735 } 1736 }; 1737 struct sixaxis_output_report *report = 1738 (struct sixaxis_output_report *)sc->output_report_dmabuf; 1739 int n; 1740 1741 /* Initialize the report with default values */ 1742 memcpy(report, &default_report, sizeof(struct sixaxis_output_report)); 1743 1744 #ifdef CONFIG_SONY_FF 1745 report->rumble.right_motor_on = sc->right ? 1 : 0; 1746 report->rumble.left_motor_force = sc->left; 1747 #endif 1748 1749 report->leds_bitmap |= sc->led_state[0] << 1; 1750 report->leds_bitmap |= sc->led_state[1] << 2; 1751 report->leds_bitmap |= sc->led_state[2] << 3; 1752 report->leds_bitmap |= sc->led_state[3] << 4; 1753 1754 /* Set flag for all leds off, required for 3rd party INTEC controller */ 1755 if ((report->leds_bitmap & 0x1E) == 0) 1756 report->leds_bitmap |= 0x20; 1757 1758 /* 1759 * The LEDs in the report are indexed in reverse order to their 1760 * corresponding light on the controller. 1761 * Index 0 = LED 4, index 1 = LED 3, etc... 1762 * 1763 * In the case of both delay values being zero (blinking disabled) the 1764 * default report values should be used or the controller LED will be 1765 * always off. 1766 */ 1767 for (n = 0; n < 4; n++) { 1768 if (sc->led_delay_on[n] || sc->led_delay_off[n]) { 1769 report->led[3 - n].duty_off = sc->led_delay_off[n]; 1770 report->led[3 - n].duty_on = sc->led_delay_on[n]; 1771 } 1772 } 1773 1774 /* SHANWAN controllers require output reports via intr channel */ 1775 if (sc->quirks & SHANWAN_GAMEPAD) 1776 hid_hw_output_report(sc->hdev, (u8 *)report, 1777 sizeof(struct sixaxis_output_report)); 1778 else 1779 hid_hw_raw_request(sc->hdev, report->report_id, (u8 *)report, 1780 sizeof(struct sixaxis_output_report), 1781 HID_OUTPUT_REPORT, HID_REQ_SET_REPORT); 1782 } 1783 1784 static void motion_send_output_report(struct sony_sc *sc) 1785 { 1786 struct hid_device *hdev = sc->hdev; 1787 struct motion_output_report_02 *report = 1788 (struct motion_output_report_02 *)sc->output_report_dmabuf; 1789 1790 memset(report, 0, MOTION_REPORT_0x02_SIZE); 1791 1792 report->type = 0x02; /* set leds */ 1793 report->r = sc->led_state[0]; 1794 report->g = sc->led_state[1]; 1795 report->b = sc->led_state[2]; 1796 1797 #ifdef CONFIG_SONY_FF 1798 report->rumble = max(sc->right, sc->left); 1799 #endif 1800 1801 hid_hw_output_report(hdev, (u8 *)report, MOTION_REPORT_0x02_SIZE); 1802 } 1803 1804 #ifdef CONFIG_SONY_FF 1805 static inline void sony_send_output_report(struct sony_sc *sc) 1806 { 1807 if (sc->send_output_report) 1808 sc->send_output_report(sc); 1809 } 1810 #endif 1811 1812 static void sony_state_worker(struct work_struct *work) 1813 { 1814 struct sony_sc *sc = container_of(work, struct sony_sc, state_worker); 1815 1816 sc->send_output_report(sc); 1817 } 1818 1819 static int sony_allocate_output_report(struct sony_sc *sc) 1820 { 1821 if ((sc->quirks & SIXAXIS_CONTROLLER) || 1822 (sc->quirks & NAVIGATION_CONTROLLER)) 1823 sc->output_report_dmabuf = 1824 devm_kmalloc(&sc->hdev->dev, 1825 sizeof(union sixaxis_output_report_01), 1826 GFP_KERNEL); 1827 else if (sc->quirks & MOTION_CONTROLLER) 1828 sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev, 1829 MOTION_REPORT_0x02_SIZE, 1830 GFP_KERNEL); 1831 else 1832 return 0; 1833 1834 if (!sc->output_report_dmabuf) 1835 return -ENOMEM; 1836 1837 return 0; 1838 } 1839 1840 #ifdef CONFIG_SONY_FF 1841 static int sony_play_effect(struct input_dev *dev, void *data, 1842 struct ff_effect *effect) 1843 { 1844 struct hid_device *hid = input_get_drvdata(dev); 1845 struct sony_sc *sc = hid_get_drvdata(hid); 1846 1847 if (effect->type != FF_RUMBLE) 1848 return 0; 1849 1850 sc->left = effect->u.rumble.strong_magnitude / 256; 1851 sc->right = effect->u.rumble.weak_magnitude / 256; 1852 1853 sony_schedule_work(sc, SONY_WORKER_STATE); 1854 return 0; 1855 } 1856 1857 static int sony_init_ff(struct sony_sc *sc) 1858 { 1859 struct hid_input *hidinput; 1860 struct input_dev *input_dev; 1861 1862 if (list_empty(&sc->hdev->inputs)) { 1863 hid_err(sc->hdev, "no inputs found\n"); 1864 return -ENODEV; 1865 } 1866 hidinput = list_entry(sc->hdev->inputs.next, struct hid_input, list); 1867 input_dev = hidinput->input; 1868 1869 input_set_capability(input_dev, EV_FF, FF_RUMBLE); 1870 return input_ff_create_memless(input_dev, NULL, sony_play_effect); 1871 } 1872 1873 #else 1874 static int sony_init_ff(struct sony_sc *sc) 1875 { 1876 return 0; 1877 } 1878 1879 #endif 1880 1881 static int sony_battery_get_property(struct power_supply *psy, 1882 enum power_supply_property psp, 1883 union power_supply_propval *val) 1884 { 1885 struct sony_sc *sc = power_supply_get_drvdata(psy); 1886 unsigned long flags; 1887 int ret = 0; 1888 u8 battery_capacity; 1889 int battery_status; 1890 1891 spin_lock_irqsave(&sc->lock, flags); 1892 battery_capacity = sc->battery_capacity; 1893 battery_status = sc->battery_status; 1894 spin_unlock_irqrestore(&sc->lock, flags); 1895 1896 switch (psp) { 1897 case POWER_SUPPLY_PROP_PRESENT: 1898 val->intval = 1; 1899 break; 1900 case POWER_SUPPLY_PROP_SCOPE: 1901 val->intval = POWER_SUPPLY_SCOPE_DEVICE; 1902 break; 1903 case POWER_SUPPLY_PROP_CAPACITY: 1904 val->intval = battery_capacity; 1905 break; 1906 case POWER_SUPPLY_PROP_STATUS: 1907 val->intval = battery_status; 1908 break; 1909 default: 1910 ret = -EINVAL; 1911 break; 1912 } 1913 return ret; 1914 } 1915 1916 static int sony_battery_probe(struct sony_sc *sc, int append_dev_id) 1917 { 1918 const char *battery_str_fmt = append_dev_id ? 1919 "sony_controller_battery_%pMR_%i" : 1920 "sony_controller_battery_%pMR"; 1921 struct power_supply_config psy_cfg = { .drv_data = sc, }; 1922 struct hid_device *hdev = sc->hdev; 1923 int ret; 1924 1925 /* 1926 * Set the default battery level to 100% to avoid low battery warnings 1927 * if the battery is polled before the first device report is received. 1928 */ 1929 sc->battery_capacity = 100; 1930 1931 sc->battery_desc.properties = sony_battery_props; 1932 sc->battery_desc.num_properties = ARRAY_SIZE(sony_battery_props); 1933 sc->battery_desc.get_property = sony_battery_get_property; 1934 sc->battery_desc.type = POWER_SUPPLY_TYPE_BATTERY; 1935 sc->battery_desc.use_for_apm = 0; 1936 sc->battery_desc.name = devm_kasprintf(&hdev->dev, GFP_KERNEL, 1937 battery_str_fmt, sc->mac_address, sc->device_id); 1938 if (!sc->battery_desc.name) 1939 return -ENOMEM; 1940 1941 sc->battery = devm_power_supply_register(&hdev->dev, &sc->battery_desc, 1942 &psy_cfg); 1943 if (IS_ERR(sc->battery)) { 1944 ret = PTR_ERR(sc->battery); 1945 hid_err(hdev, "Unable to register battery device\n"); 1946 return ret; 1947 } 1948 1949 power_supply_powers(sc->battery, &hdev->dev); 1950 return 0; 1951 } 1952 1953 /* 1954 * If a controller is plugged in via USB while already connected via Bluetooth 1955 * it will show up as two devices. A global list of connected controllers and 1956 * their MAC addresses is maintained to ensure that a device is only connected 1957 * once. 1958 * 1959 * Some USB-only devices masquerade as Sixaxis controllers and all have the 1960 * same dummy Bluetooth address, so a comparison of the connection type is 1961 * required. Devices are only rejected in the case where two devices have 1962 * matching Bluetooth addresses on different bus types. 1963 */ 1964 static inline int sony_compare_connection_type(struct sony_sc *sc0, 1965 struct sony_sc *sc1) 1966 { 1967 const int sc0_not_bt = !(sc0->quirks & SONY_BT_DEVICE); 1968 const int sc1_not_bt = !(sc1->quirks & SONY_BT_DEVICE); 1969 1970 return sc0_not_bt == sc1_not_bt; 1971 } 1972 1973 static int sony_check_add_dev_list(struct sony_sc *sc) 1974 { 1975 struct sony_sc *entry; 1976 unsigned long flags; 1977 int ret; 1978 1979 spin_lock_irqsave(&sony_dev_list_lock, flags); 1980 1981 list_for_each_entry(entry, &sony_device_list, list_node) { 1982 ret = memcmp(sc->mac_address, entry->mac_address, 1983 sizeof(sc->mac_address)); 1984 if (!ret) { 1985 if (sony_compare_connection_type(sc, entry)) { 1986 ret = 1; 1987 } else { 1988 ret = -EEXIST; 1989 hid_info(sc->hdev, 1990 "controller with MAC address %pMR already connected\n", 1991 sc->mac_address); 1992 } 1993 goto unlock; 1994 } 1995 } 1996 1997 ret = 0; 1998 list_add(&(sc->list_node), &sony_device_list); 1999 2000 unlock: 2001 spin_unlock_irqrestore(&sony_dev_list_lock, flags); 2002 return ret; 2003 } 2004 2005 static void sony_remove_dev_list(struct sony_sc *sc) 2006 { 2007 unsigned long flags; 2008 2009 if (sc->list_node.next) { 2010 spin_lock_irqsave(&sony_dev_list_lock, flags); 2011 list_del(&(sc->list_node)); 2012 spin_unlock_irqrestore(&sony_dev_list_lock, flags); 2013 } 2014 } 2015 2016 static int sony_get_bt_devaddr(struct sony_sc *sc) 2017 { 2018 int ret; 2019 2020 /* HIDP stores the device MAC address as a string in the uniq field. */ 2021 ret = strlen(sc->hdev->uniq); 2022 if (ret != 17) 2023 return -EINVAL; 2024 2025 ret = sscanf(sc->hdev->uniq, 2026 "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", 2027 &sc->mac_address[5], &sc->mac_address[4], &sc->mac_address[3], 2028 &sc->mac_address[2], &sc->mac_address[1], &sc->mac_address[0]); 2029 2030 if (ret != 6) 2031 return -EINVAL; 2032 2033 return 0; 2034 } 2035 2036 static int sony_check_add(struct sony_sc *sc) 2037 { 2038 u8 *buf = NULL; 2039 int n, ret; 2040 2041 if ((sc->quirks & MOTION_CONTROLLER_BT) || 2042 (sc->quirks & NAVIGATION_CONTROLLER_BT) || 2043 (sc->quirks & SIXAXIS_CONTROLLER_BT)) { 2044 /* 2045 * sony_get_bt_devaddr() attempts to parse the Bluetooth MAC 2046 * address from the uniq string where HIDP stores it. 2047 * As uniq cannot be guaranteed to be a MAC address in all cases 2048 * a failure of this function should not prevent the connection. 2049 */ 2050 if (sony_get_bt_devaddr(sc) < 0) { 2051 hid_warn(sc->hdev, "UNIQ does not contain a MAC address; duplicate check skipped\n"); 2052 return 0; 2053 } 2054 } else if ((sc->quirks & SIXAXIS_CONTROLLER_USB) || 2055 (sc->quirks & NAVIGATION_CONTROLLER_USB)) { 2056 buf = kmalloc(SIXAXIS_REPORT_0xF2_SIZE, GFP_KERNEL); 2057 if (!buf) 2058 return -ENOMEM; 2059 2060 /* 2061 * The MAC address of a Sixaxis controller connected via USB can 2062 * be retrieved with feature report 0xf2. The address begins at 2063 * offset 4. 2064 */ 2065 ret = hid_hw_raw_request(sc->hdev, 0xf2, buf, 2066 SIXAXIS_REPORT_0xF2_SIZE, HID_FEATURE_REPORT, 2067 HID_REQ_GET_REPORT); 2068 2069 if (ret != SIXAXIS_REPORT_0xF2_SIZE) { 2070 hid_err(sc->hdev, "failed to retrieve feature report 0xf2 with the Sixaxis MAC address\n"); 2071 ret = ret < 0 ? ret : -EINVAL; 2072 goto out_free; 2073 } 2074 2075 /* 2076 * The Sixaxis device MAC in the report is big-endian and must 2077 * be byte-swapped. 2078 */ 2079 for (n = 0; n < 6; n++) 2080 sc->mac_address[5-n] = buf[4+n]; 2081 2082 snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq), 2083 "%pMR", sc->mac_address); 2084 } else { 2085 return 0; 2086 } 2087 2088 ret = sony_check_add_dev_list(sc); 2089 2090 out_free: 2091 2092 kfree(buf); 2093 2094 return ret; 2095 } 2096 2097 static int sony_set_device_id(struct sony_sc *sc) 2098 { 2099 int ret; 2100 2101 /* 2102 * Only Sixaxis controllers get an id. 2103 * All others are set to -1. 2104 */ 2105 if (sc->quirks & SIXAXIS_CONTROLLER) { 2106 ret = ida_alloc(&sony_device_id_allocator, GFP_KERNEL); 2107 if (ret < 0) { 2108 sc->device_id = -1; 2109 return ret; 2110 } 2111 sc->device_id = ret; 2112 } else { 2113 sc->device_id = -1; 2114 } 2115 2116 return 0; 2117 } 2118 2119 static void sony_release_device_id(struct sony_sc *sc) 2120 { 2121 if (sc->device_id >= 0) { 2122 ida_free(&sony_device_id_allocator, sc->device_id); 2123 sc->device_id = -1; 2124 } 2125 } 2126 2127 static inline void sony_init_output_report(struct sony_sc *sc, 2128 void (*send_output_report)(struct sony_sc *)) 2129 { 2130 sc->send_output_report = send_output_report; 2131 2132 if (!sc->state_worker_initialized) 2133 INIT_WORK(&sc->state_worker, sony_state_worker); 2134 2135 sc->state_worker_initialized = 1; 2136 } 2137 2138 static inline void sony_cancel_work_sync(struct sony_sc *sc) 2139 { 2140 unsigned long flags; 2141 2142 if (sc->state_worker_initialized) { 2143 spin_lock_irqsave(&sc->lock, flags); 2144 sc->state_worker_initialized = 0; 2145 spin_unlock_irqrestore(&sc->lock, flags); 2146 cancel_work_sync(&sc->state_worker); 2147 } 2148 } 2149 2150 static int sony_input_configured(struct hid_device *hdev, 2151 struct hid_input *hidinput) 2152 { 2153 struct sony_sc *sc = hid_get_drvdata(hdev); 2154 int append_dev_id; 2155 int ret; 2156 2157 ret = sony_set_device_id(sc); 2158 if (ret < 0) { 2159 hid_err(hdev, "failed to allocate the device id\n"); 2160 goto err_stop; 2161 } 2162 2163 ret = append_dev_id = sony_check_add(sc); 2164 if (ret < 0) 2165 goto err_stop; 2166 2167 ret = sony_allocate_output_report(sc); 2168 if (ret < 0) { 2169 hid_err(hdev, "failed to allocate the output report buffer\n"); 2170 goto err_stop; 2171 } 2172 2173 if (sc->quirks & NAVIGATION_CONTROLLER_USB) { 2174 /* 2175 * The Sony Sixaxis does not handle HID Output Reports on the 2176 * Interrupt EP like it could, so we need to force HID Output 2177 * Reports to use HID_REQ_SET_REPORT on the Control EP. 2178 * 2179 * There is also another issue about HID Output Reports via USB, 2180 * the Sixaxis does not want the report_id as part of the data 2181 * packet, so we have to discard buf[0] when sending the actual 2182 * control message, even for numbered reports, humpf! 2183 * 2184 * Additionally, the Sixaxis on USB isn't properly initialized 2185 * until the PS logo button is pressed and as such won't retain 2186 * any state set by an output report, so the initial 2187 * configuration report is deferred until the first input 2188 * report arrives. 2189 */ 2190 hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP; 2191 hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID; 2192 sc->defer_initialization = 1; 2193 2194 ret = sixaxis_set_operational_usb(hdev); 2195 if (ret < 0) { 2196 hid_err(hdev, "Failed to set controller into operational mode\n"); 2197 goto err_stop; 2198 } 2199 2200 sony_init_output_report(sc, sixaxis_send_output_report); 2201 } else if (sc->quirks & NAVIGATION_CONTROLLER_BT) { 2202 /* 2203 * The Navigation controller wants output reports sent on the ctrl 2204 * endpoint when connected via Bluetooth. 2205 */ 2206 hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP; 2207 2208 ret = sixaxis_set_operational_bt(hdev); 2209 if (ret < 0) { 2210 hid_err(hdev, "Failed to set controller into operational mode\n"); 2211 goto err_stop; 2212 } 2213 2214 sony_init_output_report(sc, sixaxis_send_output_report); 2215 } else if (sc->quirks & RB3_PRO_INSTRUMENT) { 2216 /* 2217 * Rock Band 3 PS3 Pro Instruments also do not handle HID Output 2218 * Reports on the interrupt EP like they should, so we need to force 2219 * HID output reports to use HID_REQ_SET_REPORT on the Control EP. 2220 * 2221 * There is also another issue about HID Output Reports via USB, 2222 * these instruments do not want the report_id as part of the data 2223 * packet, so we have to discard buf[0] when sending the actual 2224 * control message, even for numbered reports. 2225 */ 2226 hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP; 2227 hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID; 2228 } else if (sc->quirks & SIXAXIS_CONTROLLER_USB) { 2229 /* 2230 * The Sony Sixaxis does not handle HID Output Reports on the 2231 * Interrupt EP and the device only becomes active when the 2232 * PS button is pressed. See comment for Navigation controller 2233 * above for more details. 2234 */ 2235 hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP; 2236 hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID; 2237 sc->defer_initialization = 1; 2238 2239 ret = sixaxis_set_operational_usb(hdev); 2240 if (ret < 0) { 2241 hid_err(hdev, "Failed to set controller into operational mode\n"); 2242 goto err_stop; 2243 } 2244 2245 ret = sony_register_sensors(sc); 2246 if (ret) { 2247 hid_err(sc->hdev, 2248 "Unable to initialize motion sensors: %d\n", ret); 2249 goto err_stop; 2250 } 2251 2252 sony_init_output_report(sc, sixaxis_send_output_report); 2253 } else if (sc->quirks & SIXAXIS_CONTROLLER_BT) { 2254 /* 2255 * The Sixaxis wants output reports sent on the ctrl endpoint 2256 * when connected via Bluetooth. 2257 */ 2258 hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP; 2259 2260 ret = sixaxis_set_operational_bt(hdev); 2261 if (ret < 0) { 2262 hid_err(hdev, "Failed to set controller into operational mode\n"); 2263 goto err_stop; 2264 } 2265 2266 ret = sony_register_sensors(sc); 2267 if (ret) { 2268 hid_err(sc->hdev, 2269 "Unable to initialize motion sensors: %d\n", ret); 2270 goto err_stop; 2271 } 2272 2273 sony_init_output_report(sc, sixaxis_send_output_report); 2274 } else if (sc->quirks & NSG_MRXU_REMOTE) { 2275 /* 2276 * The NSG-MRxU touchpad supports 2 touches and has a 2277 * resolution of 1667x1868 2278 */ 2279 ret = sony_register_touchpad(sc, 2, 2280 NSG_MRXU_MAX_X, NSG_MRXU_MAX_Y, 15, 15, 1); 2281 if (ret) { 2282 hid_err(sc->hdev, 2283 "Unable to initialize multi-touch slots: %d\n", 2284 ret); 2285 goto err_stop; 2286 } 2287 2288 } else if (sc->quirks & MOTION_CONTROLLER) { 2289 sony_init_output_report(sc, motion_send_output_report); 2290 } 2291 2292 if (sc->quirks & SONY_LED_SUPPORT) { 2293 ret = sony_leds_init(sc); 2294 if (ret < 0) 2295 goto err_stop; 2296 } 2297 2298 if (sc->quirks & SONY_BATTERY_SUPPORT) { 2299 ret = sony_battery_probe(sc, append_dev_id); 2300 if (ret < 0) 2301 goto err_stop; 2302 2303 /* Open the device to receive reports with battery info */ 2304 ret = hid_hw_open(hdev); 2305 if (ret < 0) { 2306 hid_err(hdev, "hw open failed\n"); 2307 goto err_stop; 2308 } 2309 } 2310 2311 if (sc->quirks & SONY_FF_SUPPORT) { 2312 ret = sony_init_ff(sc); 2313 if (ret < 0) 2314 goto err_close; 2315 } 2316 2317 sc->input_dev = hidinput->input; 2318 return 0; 2319 err_close: 2320 hid_hw_close(hdev); 2321 err_stop: 2322 sony_cancel_work_sync(sc); 2323 sony_remove_dev_list(sc); 2324 sony_release_device_id(sc); 2325 return ret; 2326 } 2327 2328 static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id) 2329 { 2330 int ret; 2331 unsigned long quirks = id->driver_data; 2332 struct sony_sc *sc; 2333 struct usb_device *usbdev; 2334 unsigned int connect_mask = HID_CONNECT_DEFAULT; 2335 2336 if (!strcmp(hdev->name, "FutureMax Dance Mat")) 2337 quirks |= FUTUREMAX_DANCE_MAT; 2338 2339 if (!strcmp(hdev->name, "SHANWAN PS3 GamePad") || 2340 !strcmp(hdev->name, "ShanWan PS(R) Ga`epad")) 2341 quirks |= SHANWAN_GAMEPAD; 2342 2343 sc = devm_kzalloc(&hdev->dev, sizeof(*sc), GFP_KERNEL); 2344 if (!sc) 2345 return -ENOMEM; 2346 2347 spin_lock_init(&sc->lock); 2348 2349 sc->quirks = quirks; 2350 hid_set_drvdata(hdev, sc); 2351 sc->hdev = hdev; 2352 2353 ret = hid_parse(hdev); 2354 if (ret) { 2355 hid_err(hdev, "parse failed\n"); 2356 return ret; 2357 } 2358 2359 if (sc->quirks & VAIO_RDESC_CONSTANT) 2360 connect_mask |= HID_CONNECT_HIDDEV_FORCE; 2361 else if (sc->quirks & SIXAXIS_CONTROLLER) 2362 connect_mask |= HID_CONNECT_HIDDEV_FORCE; 2363 2364 /* Patch the hw version on DS3 compatible devices, so applications can 2365 * distinguish between the default HID mappings and the mappings defined 2366 * by the Linux game controller spec. This is important for the SDL2 2367 * library, which has a game controller database, which uses device ids 2368 * in combination with version as a key. 2369 */ 2370 if (sc->quirks & SIXAXIS_CONTROLLER) 2371 hdev->version |= 0x8000; 2372 2373 ret = hid_hw_start(hdev, connect_mask); 2374 if (ret) { 2375 hid_err(hdev, "hw start failed\n"); 2376 return ret; 2377 } 2378 2379 /* sony_input_configured can fail, but this doesn't result 2380 * in hid_hw_start failures (intended). Check whether 2381 * the HID layer claimed the device else fail. 2382 * We don't know the actual reason for the failure, most 2383 * likely it is due to EEXIST in case of double connection 2384 * of USB and Bluetooth, but could have been due to ENOMEM 2385 * or other reasons as well. 2386 */ 2387 if (!(hdev->claimed & HID_CLAIMED_INPUT)) { 2388 hid_err(hdev, "failed to claim input\n"); 2389 ret = -ENODEV; 2390 goto err; 2391 } 2392 2393 if (sc->quirks & RB3_PRO_INSTRUMENT) 2394 sc->rb3_pro_poke_jiffies = 0; 2395 2396 if (sc->quirks & (GHL_GUITAR_PS3WIIU | GHL_GUITAR_PS4)) { 2397 if (!hid_is_usb(hdev)) { 2398 ret = -EINVAL; 2399 goto err; 2400 } 2401 2402 usbdev = to_usb_device(sc->hdev->dev.parent->parent); 2403 2404 sc->ghl_urb = usb_alloc_urb(0, GFP_ATOMIC); 2405 if (!sc->ghl_urb) { 2406 ret = -ENOMEM; 2407 goto err; 2408 } 2409 2410 if (sc->quirks & GHL_GUITAR_PS3WIIU) 2411 ret = ghl_init_urb(sc, usbdev, ghl_ps3wiiu_magic_data, 2412 ARRAY_SIZE(ghl_ps3wiiu_magic_data)); 2413 else if (sc->quirks & GHL_GUITAR_PS4) 2414 ret = ghl_init_urb(sc, usbdev, ghl_ps4_magic_data, 2415 ARRAY_SIZE(ghl_ps4_magic_data)); 2416 if (ret) { 2417 hid_err(hdev, "error preparing URB\n"); 2418 goto err; 2419 } 2420 2421 timer_setup(&sc->ghl_poke_timer, ghl_magic_poke, 0); 2422 mod_timer(&sc->ghl_poke_timer, 2423 jiffies + GHL_GUITAR_POKE_INTERVAL*HZ); 2424 } 2425 2426 return ret; 2427 2428 err: 2429 usb_free_urb(sc->ghl_urb); 2430 2431 hid_hw_stop(hdev); 2432 return ret; 2433 } 2434 2435 static void sony_remove(struct hid_device *hdev) 2436 { 2437 struct sony_sc *sc = hid_get_drvdata(hdev); 2438 2439 if (sc->quirks & (GHL_GUITAR_PS3WIIU | GHL_GUITAR_PS4)) { 2440 timer_delete_sync(&sc->ghl_poke_timer); 2441 usb_free_urb(sc->ghl_urb); 2442 } 2443 2444 hid_hw_close(hdev); 2445 2446 sony_cancel_work_sync(sc); 2447 2448 sony_remove_dev_list(sc); 2449 2450 sony_release_device_id(sc); 2451 2452 hid_hw_stop(hdev); 2453 } 2454 2455 2456 static int sony_suspend(struct hid_device *hdev, pm_message_t message) 2457 { 2458 #ifdef CONFIG_SONY_FF 2459 2460 /* On suspend stop any running force-feedback events */ 2461 if (SONY_FF_SUPPORT) { 2462 struct sony_sc *sc = hid_get_drvdata(hdev); 2463 2464 sc->left = sc->right = 0; 2465 sony_send_output_report(sc); 2466 } 2467 2468 #endif 2469 return 0; 2470 } 2471 2472 static int sony_resume(struct hid_device *hdev) 2473 { 2474 struct sony_sc *sc = hid_get_drvdata(hdev); 2475 2476 /* 2477 * The Sixaxis and navigation controllers on USB need to be 2478 * reinitialized on resume or they won't behave properly. 2479 */ 2480 if ((sc->quirks & SIXAXIS_CONTROLLER_USB) || 2481 (sc->quirks & NAVIGATION_CONTROLLER_USB)) { 2482 sixaxis_set_operational_usb(sc->hdev); 2483 sc->defer_initialization = 1; 2484 } 2485 2486 return 0; 2487 } 2488 2489 static const struct hid_device_id sony_devices[] = { 2490 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER), 2491 .driver_data = SIXAXIS_CONTROLLER_USB }, 2492 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER), 2493 .driver_data = NAVIGATION_CONTROLLER_USB }, 2494 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER), 2495 .driver_data = NAVIGATION_CONTROLLER_BT }, 2496 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER), 2497 .driver_data = MOTION_CONTROLLER_USB }, 2498 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER), 2499 .driver_data = MOTION_CONTROLLER_BT }, 2500 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER), 2501 .driver_data = SIXAXIS_CONTROLLER_BT }, 2502 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE), 2503 .driver_data = VAIO_RDESC_CONSTANT }, 2504 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE), 2505 .driver_data = VAIO_RDESC_CONSTANT }, 2506 /* 2507 * Wired Buzz Controller. Reported as Sony Hub from its USB ID and as 2508 * Logitech joystick from the device descriptor. 2509 */ 2510 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER), 2511 .driver_data = BUZZ_CONTROLLER }, 2512 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER), 2513 .driver_data = BUZZ_CONTROLLER }, 2514 /* PS3 BD Remote Control */ 2515 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE), 2516 .driver_data = PS3REMOTE }, 2517 /* Logitech Harmony Adapter for PS3 */ 2518 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3), 2519 .driver_data = PS3REMOTE }, 2520 /* SMK-Link PS3 BD Remote Control */ 2521 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE), 2522 .driver_data = PS3REMOTE }, 2523 /* Nyko Core Controller for PS3 */ 2524 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER), 2525 .driver_data = SIXAXIS_CONTROLLER_USB | SINO_LITE_CONTROLLER }, 2526 /* SMK-Link NSG-MR5U Remote Control */ 2527 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR5U_REMOTE), 2528 .driver_data = NSG_MR5U_REMOTE_BT }, 2529 /* SMK-Link NSG-MR7U Remote Control */ 2530 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR7U_REMOTE), 2531 .driver_data = NSG_MR7U_REMOTE_BT }, 2532 /* Guitar Hero Live PS3 and Wii U guitar dongles */ 2533 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE), 2534 .driver_data = GHL_GUITAR_PS3WIIU | GH_GUITAR_TILT | INSTRUMENT }, 2535 /* Guitar Hero PC Guitar Dongle */ 2536 { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_GUITAR_DONGLE), 2537 .driver_data = GH_GUITAR_TILT | INSTRUMENT }, 2538 /* Guitar Hero PS3 Guitar Dongle */ 2539 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GH_GUITAR), 2540 .driver_data = GH_GUITAR_TILT | INSTRUMENT }, 2541 /* Guitar Hero PS3 Drum Dongle */ 2542 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GH_DRUMS), 2543 .driver_data = INSTRUMENT }, 2544 /* DJ Hero PS3 Guitar Dongle */ 2545 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_DJH_TURNTABLE), 2546 .driver_data = DJH_TURNTABLE | INSTRUMENT }, 2547 /* Guitar Hero Live PS4 guitar dongles */ 2548 { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_PS4_GHLIVE_DONGLE), 2549 .driver_data = GHL_GUITAR_PS4 | GH_GUITAR_TILT | INSTRUMENT }, 2550 /* Rock Band 1 Wii instruments */ 2551 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB1_GUITAR), 2552 .driver_data = INSTRUMENT }, 2553 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB1_DRUMS), 2554 .driver_data = INSTRUMENT }, 2555 /* Rock Band 2 Wii instruments */ 2556 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_GUITAR), 2557 .driver_data = INSTRUMENT }, 2558 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB2_DRUMS), 2559 .driver_data = INSTRUMENT }, 2560 /* Rock Band 3 Wii instruments */ 2561 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_DRUMS_MODE), 2562 .driver_data = INSTRUMENT }, 2563 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MUSTANG_GUITAR), 2564 .driver_data = INSTRUMENT }, 2565 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_MUSTANG_MODE), 2566 .driver_data = INSTRUMENT }, 2567 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_SQUIER_MODE), 2568 .driver_data = INSTRUMENT }, 2569 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_KEYBOARD), 2570 .driver_data = INSTRUMENT }, 2571 { HID_USB_DEVICE(USB_VENDOR_ID_HARMONIX, USB_DEVICE_ID_HARMONIX_WII_RB3_MPA_KEYBOARD_MODE), 2572 .driver_data = INSTRUMENT }, 2573 /* Rock Band 3 PS3 instruments */ 2574 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB_GUITAR), 2575 .driver_data = INSTRUMENT }, 2576 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB_DRUMS), 2577 .driver_data = INSTRUMENT }, 2578 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_DRUMS_MODE), 2579 .driver_data = INSTRUMENT }, 2580 /* Rock Band 3 PS3 Pro instruments */ 2581 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MUSTANG_GUITAR), 2582 .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2583 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_MUSTANG_MODE), 2584 .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2585 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_SQUIER_MODE), 2586 .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2587 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_KEYBOARD), 2588 .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2589 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_RB3_MPA_KEYBOARD_MODE), 2590 .driver_data = INSTRUMENT | RB3_PRO_INSTRUMENT }, 2591 /* Rock Band 4 PS4 guitars */ 2592 { HID_USB_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS4_RIFFMASTER), 2593 .driver_data = RB4_GUITAR_PS4_USB | INSTRUMENT }, 2594 { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS4_GIBSON_SG), 2595 .driver_data = RB4_GUITAR_PS4_USB | INSTRUMENT }, 2596 { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS4_GIBSON_SG_DONGLE), 2597 .driver_data = RB4_GUITAR_PS4_USB | INSTRUMENT }, 2598 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS4_JAGUAR), 2599 .driver_data = RB4_GUITAR_PS4_BT | INSTRUMENT }, 2600 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_PS4_STRATOCASTER), 2601 .driver_data = RB4_GUITAR_PS4_BT | INSTRUMENT }, 2602 /* Rock Band 4 PS5 guitars */ 2603 { HID_USB_DEVICE(USB_VENDOR_ID_PDP, USB_DEVICE_ID_PDP_PS5_RIFFMASTER), 2604 .driver_data = RB4_GUITAR_PS5 | INSTRUMENT }, 2605 { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS5_GIBSON_SG), 2606 .driver_data = RB4_GUITAR_PS5 | INSTRUMENT }, 2607 { HID_USB_DEVICE(USB_VENDOR_ID_CRKD, USB_DEVICE_ID_CRKD_PS5_GIBSON_SG_DONGLE), 2608 .driver_data = RB4_GUITAR_PS5 | INSTRUMENT }, 2609 { } 2610 }; 2611 MODULE_DEVICE_TABLE(hid, sony_devices); 2612 2613 static struct hid_driver sony_driver = { 2614 .name = "sony", 2615 .id_table = sony_devices, 2616 .input_mapping = sony_mapping, 2617 .input_configured = sony_input_configured, 2618 .probe = sony_probe, 2619 .remove = sony_remove, 2620 .report_fixup = sony_report_fixup, 2621 .raw_event = sony_raw_event, 2622 .suspend = pm_ptr(sony_suspend), 2623 .resume = pm_ptr(sony_resume), 2624 .reset_resume = pm_ptr(sony_resume), 2625 }; 2626 2627 static int __init sony_init(void) 2628 { 2629 dbg_hid("Sony:%s\n", __func__); 2630 2631 return hid_register_driver(&sony_driver); 2632 } 2633 2634 static void __exit sony_exit(void) 2635 { 2636 dbg_hid("Sony:%s\n", __func__); 2637 2638 hid_unregister_driver(&sony_driver); 2639 ida_destroy(&sony_device_id_allocator); 2640 } 2641 module_init(sony_init); 2642 module_exit(sony_exit); 2643 2644 MODULE_DESCRIPTION("HID driver for Sony / PS2 / PS3 BD / PS4 / PS5 devices"); 2645 MODULE_LICENSE("GPL"); 2646