0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 #include <linux/device.h>
0031 #include <linux/hid.h>
0032 #include <linux/module.h>
0033 #include <linux/slab.h>
0034 #include <linux/leds.h>
0035 #include <linux/power_supply.h>
0036 #include <linux/spinlock.h>
0037 #include <linux/list.h>
0038 #include <linux/idr.h>
0039 #include <linux/input/mt.h>
0040 #include <linux/crc32.h>
0041 #include <linux/usb.h>
0042 #include <linux/timer.h>
0043 #include <asm/unaligned.h>
0044
0045 #include "hid-ids.h"
0046
0047 #define VAIO_RDESC_CONSTANT BIT(0)
0048 #define SIXAXIS_CONTROLLER_USB BIT(1)
0049 #define SIXAXIS_CONTROLLER_BT BIT(2)
0050 #define BUZZ_CONTROLLER BIT(3)
0051 #define PS3REMOTE BIT(4)
0052 #define DUALSHOCK4_CONTROLLER_USB BIT(5)
0053 #define DUALSHOCK4_CONTROLLER_BT BIT(6)
0054 #define DUALSHOCK4_DONGLE BIT(7)
0055 #define MOTION_CONTROLLER_USB BIT(8)
0056 #define MOTION_CONTROLLER_BT BIT(9)
0057 #define NAVIGATION_CONTROLLER_USB BIT(10)
0058 #define NAVIGATION_CONTROLLER_BT BIT(11)
0059 #define SINO_LITE_CONTROLLER BIT(12)
0060 #define FUTUREMAX_DANCE_MAT BIT(13)
0061 #define NSG_MR5U_REMOTE_BT BIT(14)
0062 #define NSG_MR7U_REMOTE_BT BIT(15)
0063 #define SHANWAN_GAMEPAD BIT(16)
0064 #define GH_GUITAR_CONTROLLER BIT(17)
0065 #define GHL_GUITAR_PS3WIIU BIT(18)
0066 #define GHL_GUITAR_PS4 BIT(19)
0067
0068 #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)
0069 #define MOTION_CONTROLLER (MOTION_CONTROLLER_USB | MOTION_CONTROLLER_BT)
0070 #define NAVIGATION_CONTROLLER (NAVIGATION_CONTROLLER_USB |\
0071 NAVIGATION_CONTROLLER_BT)
0072 #define DUALSHOCK4_CONTROLLER (DUALSHOCK4_CONTROLLER_USB |\
0073 DUALSHOCK4_CONTROLLER_BT | \
0074 DUALSHOCK4_DONGLE)
0075 #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER | BUZZ_CONTROLLER |\
0076 DUALSHOCK4_CONTROLLER | MOTION_CONTROLLER |\
0077 NAVIGATION_CONTROLLER)
0078 #define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER |\
0079 MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER)
0080 #define SONY_FF_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER |\
0081 MOTION_CONTROLLER)
0082 #define SONY_BT_DEVICE (SIXAXIS_CONTROLLER_BT | DUALSHOCK4_CONTROLLER_BT |\
0083 MOTION_CONTROLLER_BT | NAVIGATION_CONTROLLER_BT)
0084 #define NSG_MRXU_REMOTE (NSG_MR5U_REMOTE_BT | NSG_MR7U_REMOTE_BT)
0085
0086 #define MAX_LEDS 4
0087 #define NSG_MRXU_MAX_X 1667
0088 #define NSG_MRXU_MAX_Y 1868
0089
0090
0091
0092
0093 #define GHL_GUITAR_POKE_INTERVAL 8
0094 #define GUITAR_TILT_USAGE 44
0095
0096
0097
0098
0099
0100 static const char ghl_ps3wiiu_magic_data[] = {
0101 0x02, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
0102 };
0103
0104
0105
0106
0107 static const char ghl_ps4_magic_data[] = {
0108 0x30, 0x02, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00
0109 };
0110
0111
0112 static u8 motion_rdesc[] = {
0113 0x05, 0x01,
0114 0x09, 0x04,
0115 0xA1, 0x01,
0116 0xA1, 0x02,
0117 0x85, 0x01,
0118 0x75, 0x01,
0119 0x95, 0x15,
0120 0x15, 0x00,
0121 0x25, 0x01,
0122 0x35, 0x00,
0123 0x45, 0x01,
0124 0x05, 0x09,
0125 0x19, 0x01,
0126 0x29, 0x15,
0127 0x81, 0x02,
0128 0x95, 0x0B,
0129 0x06, 0x00, 0xFF,
0130 0x81, 0x03,
0131 0x15, 0x00,
0132 0x26, 0xFF, 0x00,
0133 0x05, 0x01,
0134 0xA1, 0x00,
0135 0x75, 0x08,
0136 0x95, 0x01,
0137 0x35, 0x00,
0138 0x46, 0xFF, 0x00,
0139 0x09, 0x30,
0140 0x81, 0x02,
0141 0xC0,
0142 0x06, 0x00, 0xFF,
0143 0x75, 0x08,
0144 0x95, 0x07,
0145 0x81, 0x02,
0146 0x05, 0x01,
0147 0x75, 0x10,
0148 0x46, 0xFF, 0xFF,
0149 0x27, 0xFF, 0xFF, 0x00, 0x00,
0150 0x95, 0x03,
0151 0x09, 0x33,
0152 0x09, 0x34,
0153 0x09, 0x35,
0154 0x81, 0x02,
0155 0x06, 0x00, 0xFF,
0156 0x95, 0x03,
0157 0x81, 0x02,
0158 0x05, 0x01,
0159 0x09, 0x01,
0160 0x95, 0x03,
0161 0x81, 0x02,
0162 0x06, 0x00, 0xFF,
0163 0x95, 0x03,
0164 0x81, 0x02,
0165 0x75, 0x0C,
0166 0x46, 0xFF, 0x0F,
0167 0x26, 0xFF, 0x0F,
0168 0x95, 0x04,
0169 0x81, 0x02,
0170 0x75, 0x08,
0171 0x46, 0xFF, 0x00,
0172 0x26, 0xFF, 0x00,
0173 0x95, 0x06,
0174 0x81, 0x02,
0175 0x75, 0x08,
0176 0x95, 0x30,
0177 0x09, 0x01,
0178 0x91, 0x02,
0179 0x75, 0x08,
0180 0x95, 0x30,
0181 0x09, 0x01,
0182 0xB1, 0x02,
0183 0xC0,
0184 0xA1, 0x02,
0185 0x85, 0x02,
0186 0x75, 0x08,
0187 0x95, 0x30,
0188 0x09, 0x01,
0189 0xB1, 0x02,
0190 0xC0,
0191 0xA1, 0x02,
0192 0x85, 0xEE,
0193 0x75, 0x08,
0194 0x95, 0x30,
0195 0x09, 0x01,
0196 0xB1, 0x02,
0197 0xC0,
0198 0xA1, 0x02,
0199 0x85, 0xEF,
0200 0x75, 0x08,
0201 0x95, 0x30,
0202 0x09, 0x01,
0203 0xB1, 0x02,
0204 0xC0,
0205 0xC0
0206 };
0207
0208 static u8 ps3remote_rdesc[] = {
0209 0x05, 0x01,
0210 0x09, 0x05,
0211 0xA1, 0x01,
0212
0213
0214 0xA1, 0x02,
0215
0216
0217
0218
0219
0220 0x75, 0x08,
0221 0x95, 0x01,
0222 0x81, 0x01,
0223
0224
0225
0226
0227
0228 0x05, 0x09,
0229 0x19, 0x01,
0230 0x29, 0x18,
0231 0x14,
0232 0x25, 0x01,
0233 0x75, 0x01,
0234 0x95, 0x18,
0235 0x81, 0x02,
0236
0237 0xC0,
0238
0239
0240 0xA1, 0x02,
0241
0242
0243 0x05, 0x09,
0244 0x18,
0245 0x29, 0xFE,
0246 0x14,
0247 0x26, 0xFE, 0x00,
0248 0x75, 0x08,
0249 0x95, 0x01,
0250 0x80,
0251
0252
0253
0254
0255
0256 0x75, 0x08,
0257 0x95, 0x06,
0258 0x81, 0x01,
0259
0260
0261 0x05, 0x06,
0262 0x09, 0x20,
0263 0x14,
0264 0x25, 0x05,
0265 0x75, 0x08,
0266 0x95, 0x01,
0267 0x81, 0x02,
0268
0269 0xC0,
0270
0271 0xC0
0272 };
0273
0274 static const unsigned int ps3remote_keymap_joypad_buttons[] = {
0275 [0x01] = KEY_SELECT,
0276 [0x02] = BTN_THUMBL,
0277 [0x03] = BTN_THUMBR,
0278 [0x04] = BTN_START,
0279 [0x05] = KEY_UP,
0280 [0x06] = KEY_RIGHT,
0281 [0x07] = KEY_DOWN,
0282 [0x08] = KEY_LEFT,
0283 [0x09] = BTN_TL2,
0284 [0x0a] = BTN_TR2,
0285 [0x0b] = BTN_TL,
0286 [0x0c] = BTN_TR,
0287 [0x0d] = KEY_OPTION,
0288 [0x0e] = KEY_BACK,
0289 [0x0f] = BTN_0,
0290 [0x10] = KEY_SCREEN,
0291 [0x11] = KEY_HOMEPAGE,
0292 [0x14] = KEY_ENTER,
0293 };
0294 static const unsigned int ps3remote_keymap_remote_buttons[] = {
0295 [0x00] = KEY_1,
0296 [0x01] = KEY_2,
0297 [0x02] = KEY_3,
0298 [0x03] = KEY_4,
0299 [0x04] = KEY_5,
0300 [0x05] = KEY_6,
0301 [0x06] = KEY_7,
0302 [0x07] = KEY_8,
0303 [0x08] = KEY_9,
0304 [0x09] = KEY_0,
0305 [0x0e] = KEY_ESC,
0306 [0x0f] = KEY_CLEAR,
0307 [0x16] = KEY_EJECTCD,
0308 [0x1a] = KEY_MENU,
0309 [0x28] = KEY_TIME,
0310 [0x30] = KEY_PREVIOUS,
0311 [0x31] = KEY_NEXT,
0312 [0x32] = KEY_PLAY,
0313 [0x33] = KEY_REWIND,
0314 [0x34] = KEY_FORWARD,
0315 [0x38] = KEY_STOP,
0316 [0x39] = KEY_PAUSE,
0317 [0x40] = KEY_CONTEXT_MENU,
0318 [0x60] = KEY_FRAMEBACK,
0319 [0x61] = KEY_FRAMEFORWARD,
0320 [0x63] = KEY_SUBTITLE,
0321 [0x64] = KEY_AUDIO,
0322 [0x65] = KEY_ANGLE,
0323 [0x70] = KEY_INFO,
0324 [0x80] = KEY_BLUE,
0325 [0x81] = KEY_RED,
0326 [0x82] = KEY_GREEN,
0327 [0x83] = KEY_YELLOW,
0328 };
0329
0330 static const unsigned int buzz_keymap[] = {
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348 [1] = BTN_TRIGGER_HAPPY1,
0349 [2] = BTN_TRIGGER_HAPPY2,
0350 [3] = BTN_TRIGGER_HAPPY3,
0351 [4] = BTN_TRIGGER_HAPPY4,
0352 [5] = BTN_TRIGGER_HAPPY5,
0353 [6] = BTN_TRIGGER_HAPPY6,
0354 [7] = BTN_TRIGGER_HAPPY7,
0355 [8] = BTN_TRIGGER_HAPPY8,
0356 [9] = BTN_TRIGGER_HAPPY9,
0357 [10] = BTN_TRIGGER_HAPPY10,
0358 [11] = BTN_TRIGGER_HAPPY11,
0359 [12] = BTN_TRIGGER_HAPPY12,
0360 [13] = BTN_TRIGGER_HAPPY13,
0361 [14] = BTN_TRIGGER_HAPPY14,
0362 [15] = BTN_TRIGGER_HAPPY15,
0363 [16] = BTN_TRIGGER_HAPPY16,
0364 [17] = BTN_TRIGGER_HAPPY17,
0365 [18] = BTN_TRIGGER_HAPPY18,
0366 [19] = BTN_TRIGGER_HAPPY19,
0367 [20] = BTN_TRIGGER_HAPPY20,
0368 };
0369
0370
0371
0372
0373
0374
0375 static const unsigned int navigation_absmap[] = {
0376 [0x30] = ABS_X,
0377 [0x31] = ABS_Y,
0378 [0x33] = ABS_Z,
0379 };
0380
0381
0382
0383
0384 static const unsigned int navigation_keymap[] = {
0385 [0x01] = 0,
0386 [0x02] = BTN_THUMBL,
0387 [0x03] = 0,
0388 [0x04] = 0,
0389 [0x05] = BTN_DPAD_UP,
0390 [0x06] = BTN_DPAD_RIGHT,
0391 [0x07] = BTN_DPAD_DOWN,
0392 [0x08] = BTN_DPAD_LEFT,
0393 [0x09] = BTN_TL2,
0394 [0x0a] = 0,
0395 [0x0b] = BTN_TL,
0396 [0x0c] = 0,
0397 [0x0d] = BTN_NORTH,
0398 [0x0e] = BTN_EAST,
0399 [0x0f] = BTN_SOUTH,
0400 [0x10] = BTN_WEST,
0401 [0x11] = BTN_MODE,
0402 };
0403
0404 static const unsigned int sixaxis_absmap[] = {
0405 [0x30] = ABS_X,
0406 [0x31] = ABS_Y,
0407 [0x32] = ABS_RX,
0408 [0x35] = ABS_RY,
0409 };
0410
0411 static const unsigned int sixaxis_keymap[] = {
0412 [0x01] = BTN_SELECT,
0413 [0x02] = BTN_THUMBL,
0414 [0x03] = BTN_THUMBR,
0415 [0x04] = BTN_START,
0416 [0x05] = BTN_DPAD_UP,
0417 [0x06] = BTN_DPAD_RIGHT,
0418 [0x07] = BTN_DPAD_DOWN,
0419 [0x08] = BTN_DPAD_LEFT,
0420 [0x09] = BTN_TL2,
0421 [0x0a] = BTN_TR2,
0422 [0x0b] = BTN_TL,
0423 [0x0c] = BTN_TR,
0424 [0x0d] = BTN_NORTH,
0425 [0x0e] = BTN_EAST,
0426 [0x0f] = BTN_SOUTH,
0427 [0x10] = BTN_WEST,
0428 [0x11] = BTN_MODE,
0429 };
0430
0431 static const unsigned int ds4_absmap[] = {
0432 [0x30] = ABS_X,
0433 [0x31] = ABS_Y,
0434 [0x32] = ABS_RX,
0435 [0x33] = ABS_Z,
0436 [0x34] = ABS_RZ,
0437 [0x35] = ABS_RY,
0438 };
0439
0440 static const unsigned int ds4_keymap[] = {
0441 [0x1] = BTN_WEST,
0442 [0x2] = BTN_SOUTH,
0443 [0x3] = BTN_EAST,
0444 [0x4] = BTN_NORTH,
0445 [0x5] = BTN_TL,
0446 [0x6] = BTN_TR,
0447 [0x7] = BTN_TL2,
0448 [0x8] = BTN_TR2,
0449 [0x9] = BTN_SELECT,
0450 [0xa] = BTN_START,
0451 [0xb] = BTN_THUMBL,
0452 [0xc] = BTN_THUMBR,
0453 [0xd] = BTN_MODE,
0454 };
0455
0456 static const struct {int x; int y; } ds4_hat_mapping[] = {
0457 {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1},
0458 {0, 0}
0459 };
0460
0461 static enum power_supply_property sony_battery_props[] = {
0462 POWER_SUPPLY_PROP_PRESENT,
0463 POWER_SUPPLY_PROP_CAPACITY,
0464 POWER_SUPPLY_PROP_SCOPE,
0465 POWER_SUPPLY_PROP_STATUS,
0466 };
0467
0468 struct sixaxis_led {
0469 u8 time_enabled;
0470 u8 duty_length;
0471 u8 enabled;
0472 u8 duty_off;
0473 u8 duty_on;
0474 } __packed;
0475
0476 struct sixaxis_rumble {
0477 u8 padding;
0478 u8 right_duration;
0479 u8 right_motor_on;
0480 u8 left_duration;
0481 u8 left_motor_force;
0482 } __packed;
0483
0484 struct sixaxis_output_report {
0485 u8 report_id;
0486 struct sixaxis_rumble rumble;
0487 u8 padding[4];
0488 u8 leds_bitmap;
0489 struct sixaxis_led led[4];
0490 struct sixaxis_led _reserved;
0491 } __packed;
0492
0493 union sixaxis_output_report_01 {
0494 struct sixaxis_output_report data;
0495 u8 buf[36];
0496 };
0497
0498 struct motion_output_report_02 {
0499 u8 type, zero;
0500 u8 r, g, b;
0501 u8 zero2;
0502 u8 rumble;
0503 };
0504
0505 #define DS4_FEATURE_REPORT_0x02_SIZE 37
0506 #define DS4_FEATURE_REPORT_0x05_SIZE 41
0507 #define DS4_FEATURE_REPORT_0x81_SIZE 7
0508 #define DS4_FEATURE_REPORT_0xA3_SIZE 49
0509 #define DS4_INPUT_REPORT_0x11_SIZE 78
0510 #define DS4_OUTPUT_REPORT_0x05_SIZE 32
0511 #define DS4_OUTPUT_REPORT_0x11_SIZE 78
0512 #define SIXAXIS_REPORT_0xF2_SIZE 17
0513 #define SIXAXIS_REPORT_0xF5_SIZE 8
0514 #define MOTION_REPORT_0x02_SIZE 49
0515
0516
0517
0518
0519 #define DS4_INPUT_REPORT_AXIS_OFFSET 1
0520 #define DS4_INPUT_REPORT_BUTTON_OFFSET 5
0521 #define DS4_INPUT_REPORT_TIMESTAMP_OFFSET 10
0522 #define DS4_INPUT_REPORT_GYRO_X_OFFSET 13
0523 #define DS4_INPUT_REPORT_BATTERY_OFFSET 30
0524 #define DS4_INPUT_REPORT_TOUCHPAD_OFFSET 33
0525
0526 #define SENSOR_SUFFIX " Motion Sensors"
0527 #define DS4_TOUCHPAD_SUFFIX " Touchpad"
0528
0529
0530 #define DS4_BT_DEFAULT_POLL_INTERVAL_MS 4
0531 #define DS4_BT_MAX_POLL_INTERVAL_MS 62
0532 #define DS4_GYRO_RES_PER_DEG_S 1024
0533 #define DS4_ACC_RES_PER_G 8192
0534
0535 #define SIXAXIS_INPUT_REPORT_ACC_X_OFFSET 41
0536 #define SIXAXIS_ACC_RES_PER_G 113
0537
0538 static DEFINE_SPINLOCK(sony_dev_list_lock);
0539 static LIST_HEAD(sony_device_list);
0540 static DEFINE_IDA(sony_device_id_allocator);
0541
0542
0543 struct ds4_calibration_data {
0544 int abs_code;
0545 short bias;
0546
0547
0548
0549
0550 int sens_numer;
0551 int sens_denom;
0552 };
0553
0554 enum ds4_dongle_state {
0555 DONGLE_DISCONNECTED,
0556 DONGLE_CALIBRATING,
0557 DONGLE_CONNECTED,
0558 DONGLE_DISABLED
0559 };
0560
0561 enum sony_worker {
0562 SONY_WORKER_STATE,
0563 SONY_WORKER_HOTPLUG
0564 };
0565
0566 struct sony_sc {
0567 spinlock_t lock;
0568 struct list_head list_node;
0569 struct hid_device *hdev;
0570 struct input_dev *touchpad;
0571 struct input_dev *sensor_dev;
0572 struct led_classdev *leds[MAX_LEDS];
0573 unsigned long quirks;
0574 struct work_struct hotplug_worker;
0575 struct work_struct state_worker;
0576 void (*send_output_report)(struct sony_sc *);
0577 struct power_supply *battery;
0578 struct power_supply_desc battery_desc;
0579 int device_id;
0580 unsigned fw_version;
0581 bool fw_version_created;
0582 unsigned hw_version;
0583 bool hw_version_created;
0584 u8 *output_report_dmabuf;
0585
0586 #ifdef CONFIG_SONY_FF
0587 u8 left;
0588 u8 right;
0589 #endif
0590
0591 u8 mac_address[6];
0592 u8 hotplug_worker_initialized;
0593 u8 state_worker_initialized;
0594 u8 defer_initialization;
0595 u8 battery_capacity;
0596 int battery_status;
0597 u8 led_state[MAX_LEDS];
0598 u8 led_delay_on[MAX_LEDS];
0599 u8 led_delay_off[MAX_LEDS];
0600 u8 led_count;
0601
0602 bool timestamp_initialized;
0603 u16 prev_timestamp;
0604 unsigned int timestamp_us;
0605
0606 u8 ds4_bt_poll_interval;
0607 enum ds4_dongle_state ds4_dongle_state;
0608
0609 struct ds4_calibration_data ds4_calib_data[6];
0610
0611 struct urb *ghl_urb;
0612 struct timer_list ghl_poke_timer;
0613 };
0614
0615 static void sony_set_leds(struct sony_sc *sc);
0616
0617 static inline void sony_schedule_work(struct sony_sc *sc,
0618 enum sony_worker which)
0619 {
0620 unsigned long flags;
0621
0622 switch (which) {
0623 case SONY_WORKER_STATE:
0624 spin_lock_irqsave(&sc->lock, flags);
0625 if (!sc->defer_initialization && sc->state_worker_initialized)
0626 schedule_work(&sc->state_worker);
0627 spin_unlock_irqrestore(&sc->lock, flags);
0628 break;
0629 case SONY_WORKER_HOTPLUG:
0630 if (sc->hotplug_worker_initialized)
0631 schedule_work(&sc->hotplug_worker);
0632 break;
0633 }
0634 }
0635
0636 static void ghl_magic_poke_cb(struct urb *urb)
0637 {
0638 struct sony_sc *sc = urb->context;
0639
0640 if (urb->status < 0)
0641 hid_err(sc->hdev, "URB transfer failed : %d", urb->status);
0642
0643 mod_timer(&sc->ghl_poke_timer, jiffies + GHL_GUITAR_POKE_INTERVAL*HZ);
0644 }
0645
0646 static void ghl_magic_poke(struct timer_list *t)
0647 {
0648 int ret;
0649 struct sony_sc *sc = from_timer(sc, t, ghl_poke_timer);
0650
0651 ret = usb_submit_urb(sc->ghl_urb, GFP_ATOMIC);
0652 if (ret < 0)
0653 hid_err(sc->hdev, "usb_submit_urb failed: %d", ret);
0654 }
0655
0656 static int ghl_init_urb(struct sony_sc *sc, struct usb_device *usbdev,
0657 const char ghl_magic_data[], u16 poke_size)
0658 {
0659 struct usb_ctrlrequest *cr;
0660 u8 *databuf;
0661 unsigned int pipe;
0662 u16 ghl_magic_value = (((HID_OUTPUT_REPORT + 1) << 8) | ghl_magic_data[0]);
0663
0664 pipe = usb_sndctrlpipe(usbdev, 0);
0665
0666 cr = devm_kzalloc(&sc->hdev->dev, sizeof(*cr), GFP_ATOMIC);
0667 if (cr == NULL)
0668 return -ENOMEM;
0669
0670 databuf = devm_kzalloc(&sc->hdev->dev, poke_size, GFP_ATOMIC);
0671 if (databuf == NULL)
0672 return -ENOMEM;
0673
0674 cr->bRequestType =
0675 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT;
0676 cr->bRequest = USB_REQ_SET_CONFIGURATION;
0677 cr->wValue = cpu_to_le16(ghl_magic_value);
0678 cr->wIndex = 0;
0679 cr->wLength = cpu_to_le16(poke_size);
0680 memcpy(databuf, ghl_magic_data, poke_size);
0681 usb_fill_control_urb(
0682 sc->ghl_urb, usbdev, pipe,
0683 (unsigned char *) cr, databuf, poke_size,
0684 ghl_magic_poke_cb, sc);
0685 return 0;
0686 }
0687
0688 static int guitar_mapping(struct hid_device *hdev, struct hid_input *hi,
0689 struct hid_field *field, struct hid_usage *usage,
0690 unsigned long **bit, int *max)
0691 {
0692 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_MSVENDOR) {
0693 unsigned int abs = usage->hid & HID_USAGE;
0694
0695 if (abs == GUITAR_TILT_USAGE) {
0696 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, ABS_RY);
0697 return 1;
0698 }
0699 }
0700 return 0;
0701 }
0702
0703 static ssize_t ds4_show_poll_interval(struct device *dev,
0704 struct device_attribute
0705 *attr, char *buf)
0706 {
0707 struct hid_device *hdev = to_hid_device(dev);
0708 struct sony_sc *sc = hid_get_drvdata(hdev);
0709
0710 return snprintf(buf, PAGE_SIZE, "%i\n", sc->ds4_bt_poll_interval);
0711 }
0712
0713 static ssize_t ds4_store_poll_interval(struct device *dev,
0714 struct device_attribute *attr,
0715 const char *buf, size_t count)
0716 {
0717 struct hid_device *hdev = to_hid_device(dev);
0718 struct sony_sc *sc = hid_get_drvdata(hdev);
0719 unsigned long flags;
0720 u8 interval;
0721
0722 if (kstrtou8(buf, 0, &interval))
0723 return -EINVAL;
0724
0725 if (interval > DS4_BT_MAX_POLL_INTERVAL_MS)
0726 return -EINVAL;
0727
0728 spin_lock_irqsave(&sc->lock, flags);
0729 sc->ds4_bt_poll_interval = interval;
0730 spin_unlock_irqrestore(&sc->lock, flags);
0731
0732 sony_schedule_work(sc, SONY_WORKER_STATE);
0733
0734 return count;
0735 }
0736
0737 static DEVICE_ATTR(bt_poll_interval, 0644, ds4_show_poll_interval,
0738 ds4_store_poll_interval);
0739
0740 static ssize_t sony_show_firmware_version(struct device *dev,
0741 struct device_attribute
0742 *attr, char *buf)
0743 {
0744 struct hid_device *hdev = to_hid_device(dev);
0745 struct sony_sc *sc = hid_get_drvdata(hdev);
0746
0747 return snprintf(buf, PAGE_SIZE, "0x%04x\n", sc->fw_version);
0748 }
0749
0750 static DEVICE_ATTR(firmware_version, 0444, sony_show_firmware_version, NULL);
0751
0752 static ssize_t sony_show_hardware_version(struct device *dev,
0753 struct device_attribute
0754 *attr, char *buf)
0755 {
0756 struct hid_device *hdev = to_hid_device(dev);
0757 struct sony_sc *sc = hid_get_drvdata(hdev);
0758
0759 return snprintf(buf, PAGE_SIZE, "0x%04x\n", sc->hw_version);
0760 }
0761
0762 static DEVICE_ATTR(hardware_version, 0444, sony_show_hardware_version, NULL);
0763
0764 static u8 *motion_fixup(struct hid_device *hdev, u8 *rdesc,
0765 unsigned int *rsize)
0766 {
0767 *rsize = sizeof(motion_rdesc);
0768 return motion_rdesc;
0769 }
0770
0771 static u8 *ps3remote_fixup(struct hid_device *hdev, u8 *rdesc,
0772 unsigned int *rsize)
0773 {
0774 *rsize = sizeof(ps3remote_rdesc);
0775 return ps3remote_rdesc;
0776 }
0777
0778 static int ps3remote_mapping(struct hid_device *hdev, struct hid_input *hi,
0779 struct hid_field *field, struct hid_usage *usage,
0780 unsigned long **bit, int *max)
0781 {
0782 unsigned int key = usage->hid & HID_USAGE;
0783
0784 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
0785 return -1;
0786
0787 switch (usage->collection_index) {
0788 case 1:
0789 if (key >= ARRAY_SIZE(ps3remote_keymap_joypad_buttons))
0790 return -1;
0791
0792 key = ps3remote_keymap_joypad_buttons[key];
0793 if (!key)
0794 return -1;
0795 break;
0796 case 2:
0797 if (key >= ARRAY_SIZE(ps3remote_keymap_remote_buttons))
0798 return -1;
0799
0800 key = ps3remote_keymap_remote_buttons[key];
0801 if (!key)
0802 return -1;
0803 break;
0804 default:
0805 return -1;
0806 }
0807
0808 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
0809 return 1;
0810 }
0811
0812 static int navigation_mapping(struct hid_device *hdev, struct hid_input *hi,
0813 struct hid_field *field, struct hid_usage *usage,
0814 unsigned long **bit, int *max)
0815 {
0816 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
0817 unsigned int key = usage->hid & HID_USAGE;
0818
0819 if (key >= ARRAY_SIZE(sixaxis_keymap))
0820 return -1;
0821
0822 key = navigation_keymap[key];
0823 if (!key)
0824 return -1;
0825
0826 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
0827 return 1;
0828 } else if (usage->hid == HID_GD_POINTER) {
0829
0830
0831
0832
0833
0834 switch (usage->usage_index) {
0835 case 8:
0836 usage->hid = HID_GD_Z;
0837 break;
0838 default:
0839 return -1;
0840 }
0841
0842 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, usage->hid & 0xf);
0843 return 1;
0844 } else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
0845 unsigned int abs = usage->hid & HID_USAGE;
0846
0847 if (abs >= ARRAY_SIZE(navigation_absmap))
0848 return -1;
0849
0850 abs = navigation_absmap[abs];
0851
0852 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
0853 return 1;
0854 }
0855
0856 return -1;
0857 }
0858
0859
0860 static int sixaxis_mapping(struct hid_device *hdev, struct hid_input *hi,
0861 struct hid_field *field, struct hid_usage *usage,
0862 unsigned long **bit, int *max)
0863 {
0864 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
0865 unsigned int key = usage->hid & HID_USAGE;
0866
0867 if (key >= ARRAY_SIZE(sixaxis_keymap))
0868 return -1;
0869
0870 key = sixaxis_keymap[key];
0871 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
0872 return 1;
0873 } else if (usage->hid == HID_GD_POINTER) {
0874
0875
0876
0877
0878
0879
0880 switch (usage->usage_index) {
0881 case 8:
0882 usage->hid = HID_GD_Z;
0883 break;
0884 case 9:
0885 usage->hid = HID_GD_RZ;
0886 break;
0887 default:
0888 return -1;
0889 }
0890
0891 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, usage->hid & 0xf);
0892 return 1;
0893 } else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
0894 unsigned int abs = usage->hid & HID_USAGE;
0895
0896 if (abs >= ARRAY_SIZE(sixaxis_absmap))
0897 return -1;
0898
0899 abs = sixaxis_absmap[abs];
0900
0901 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
0902 return 1;
0903 }
0904
0905 return -1;
0906 }
0907
0908 static int ds4_mapping(struct hid_device *hdev, struct hid_input *hi,
0909 struct hid_field *field, struct hid_usage *usage,
0910 unsigned long **bit, int *max)
0911 {
0912 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
0913 unsigned int key = usage->hid & HID_USAGE;
0914
0915 if (key >= ARRAY_SIZE(ds4_keymap))
0916 return -1;
0917
0918 key = ds4_keymap[key];
0919 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
0920 return 1;
0921 } else if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK) {
0922 unsigned int abs = usage->hid & HID_USAGE;
0923
0924
0925 if (usage->hid == HID_GD_HATSWITCH)
0926 return 0;
0927
0928 if (abs >= ARRAY_SIZE(ds4_absmap))
0929 return -1;
0930
0931 abs = ds4_absmap[abs];
0932 hid_map_usage_clear(hi, usage, bit, max, EV_ABS, abs);
0933 return 1;
0934 }
0935
0936 return 0;
0937 }
0938
0939 static u8 *sony_report_fixup(struct hid_device *hdev, u8 *rdesc,
0940 unsigned int *rsize)
0941 {
0942 struct sony_sc *sc = hid_get_drvdata(hdev);
0943
0944 if (sc->quirks & (SINO_LITE_CONTROLLER | FUTUREMAX_DANCE_MAT))
0945 return rdesc;
0946
0947
0948
0949
0950
0951 if ((sc->quirks & VAIO_RDESC_CONSTANT) && *rsize >= 56 &&
0952
0953
0954
0955 rdesc[2] == 0x09 && rdesc[3] == 0x02 &&
0956
0957 rdesc[54] == 0x81 && rdesc[55] == 0x07) {
0958 hid_info(hdev, "Fixing up Sony RF Receiver report descriptor\n");
0959
0960 rdesc[55] = 0x06;
0961 }
0962
0963 if (sc->quirks & MOTION_CONTROLLER)
0964 return motion_fixup(hdev, rdesc, rsize);
0965
0966 if (sc->quirks & PS3REMOTE)
0967 return ps3remote_fixup(hdev, rdesc, rsize);
0968
0969
0970
0971
0972
0973 if ((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize >= 45 &&
0974
0975 rdesc[23] == 0x95 && rdesc[24] == 0x0D &&
0976
0977 rdesc[37] == 0x29 && rdesc[38] == 0x0D &&
0978
0979 rdesc[43] == 0x95 && rdesc[44] == 0x03) {
0980 hid_info(hdev, "Fixing up USB dongle report descriptor\n");
0981 rdesc[24] = 0x10;
0982 rdesc[38] = 0x10;
0983 rdesc[44] = 0x00;
0984 }
0985
0986 return rdesc;
0987 }
0988
0989 static void sixaxis_parse_report(struct sony_sc *sc, u8 *rd, int size)
0990 {
0991 static const u8 sixaxis_battery_capacity[] = { 0, 1, 25, 50, 75, 100 };
0992 unsigned long flags;
0993 int offset;
0994 u8 battery_capacity;
0995 int battery_status;
0996
0997
0998
0999
1000
1001
1002
1003 offset = (sc->quirks & MOTION_CONTROLLER) ? 12 : 30;
1004
1005 if (rd[offset] >= 0xee) {
1006 battery_capacity = 100;
1007 battery_status = (rd[offset] & 0x01) ? POWER_SUPPLY_STATUS_FULL : POWER_SUPPLY_STATUS_CHARGING;
1008 } else {
1009 u8 index = rd[offset] <= 5 ? rd[offset] : 5;
1010 battery_capacity = sixaxis_battery_capacity[index];
1011 battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
1012 }
1013
1014 spin_lock_irqsave(&sc->lock, flags);
1015 sc->battery_capacity = battery_capacity;
1016 sc->battery_status = battery_status;
1017 spin_unlock_irqrestore(&sc->lock, flags);
1018
1019 if (sc->quirks & SIXAXIS_CONTROLLER) {
1020 int val;
1021
1022 offset = SIXAXIS_INPUT_REPORT_ACC_X_OFFSET;
1023 val = ((rd[offset+1] << 8) | rd[offset]) - 511;
1024 input_report_abs(sc->sensor_dev, ABS_X, val);
1025
1026
1027 val = 511 - ((rd[offset+5] << 8) | rd[offset+4]);
1028 input_report_abs(sc->sensor_dev, ABS_Y, val);
1029
1030 val = 511 - ((rd[offset+3] << 8) | rd[offset+2]);
1031 input_report_abs(sc->sensor_dev, ABS_Z, val);
1032
1033 input_sync(sc->sensor_dev);
1034 }
1035 }
1036
1037 static void dualshock4_parse_report(struct sony_sc *sc, u8 *rd, int size)
1038 {
1039 struct hid_input *hidinput = list_entry(sc->hdev->inputs.next,
1040 struct hid_input, list);
1041 struct input_dev *input_dev = hidinput->input;
1042 unsigned long flags;
1043 int n, m, offset, num_touch_data, max_touch_data;
1044 u8 cable_state, battery_capacity;
1045 int battery_status;
1046 u16 timestamp;
1047
1048
1049 int data_offset = (sc->quirks & DUALSHOCK4_CONTROLLER_BT) ? 2 : 0;
1050
1051
1052 offset = data_offset + DS4_INPUT_REPORT_BUTTON_OFFSET;
1053 input_report_key(sc->touchpad, BTN_LEFT, rd[offset+2] & 0x2);
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069 if (rd[0] == 17) {
1070 int value;
1071
1072 offset = data_offset + DS4_INPUT_REPORT_AXIS_OFFSET;
1073 input_report_abs(input_dev, ABS_X, rd[offset]);
1074 input_report_abs(input_dev, ABS_Y, rd[offset+1]);
1075 input_report_abs(input_dev, ABS_RX, rd[offset+2]);
1076 input_report_abs(input_dev, ABS_RY, rd[offset+3]);
1077
1078 value = rd[offset+4] & 0xf;
1079 if (value > 7)
1080 value = 8;
1081 input_report_abs(input_dev, ABS_HAT0X, ds4_hat_mapping[value].x);
1082 input_report_abs(input_dev, ABS_HAT0Y, ds4_hat_mapping[value].y);
1083
1084 input_report_key(input_dev, BTN_WEST, rd[offset+4] & 0x10);
1085 input_report_key(input_dev, BTN_SOUTH, rd[offset+4] & 0x20);
1086 input_report_key(input_dev, BTN_EAST, rd[offset+4] & 0x40);
1087 input_report_key(input_dev, BTN_NORTH, rd[offset+4] & 0x80);
1088
1089 input_report_key(input_dev, BTN_TL, rd[offset+5] & 0x1);
1090 input_report_key(input_dev, BTN_TR, rd[offset+5] & 0x2);
1091 input_report_key(input_dev, BTN_TL2, rd[offset+5] & 0x4);
1092 input_report_key(input_dev, BTN_TR2, rd[offset+5] & 0x8);
1093 input_report_key(input_dev, BTN_SELECT, rd[offset+5] & 0x10);
1094 input_report_key(input_dev, BTN_START, rd[offset+5] & 0x20);
1095 input_report_key(input_dev, BTN_THUMBL, rd[offset+5] & 0x40);
1096 input_report_key(input_dev, BTN_THUMBR, rd[offset+5] & 0x80);
1097
1098 input_report_key(input_dev, BTN_MODE, rd[offset+6] & 0x1);
1099
1100 input_report_abs(input_dev, ABS_Z, rd[offset+7]);
1101 input_report_abs(input_dev, ABS_RZ, rd[offset+8]);
1102
1103 input_sync(input_dev);
1104 }
1105
1106
1107 offset = data_offset + DS4_INPUT_REPORT_TIMESTAMP_OFFSET;
1108 timestamp = get_unaligned_le16(&rd[offset]);
1109 if (!sc->timestamp_initialized) {
1110 sc->timestamp_us = ((unsigned int)timestamp * 16) / 3;
1111 sc->timestamp_initialized = true;
1112 } else {
1113 u16 delta;
1114
1115 if (sc->prev_timestamp > timestamp)
1116 delta = (U16_MAX - sc->prev_timestamp + timestamp + 1);
1117 else
1118 delta = timestamp - sc->prev_timestamp;
1119 sc->timestamp_us += (delta * 16) / 3;
1120 }
1121 sc->prev_timestamp = timestamp;
1122 input_event(sc->sensor_dev, EV_MSC, MSC_TIMESTAMP, sc->timestamp_us);
1123
1124 offset = data_offset + DS4_INPUT_REPORT_GYRO_X_OFFSET;
1125 for (n = 0; n < 6; n++) {
1126
1127 int raw_data = (short)((rd[offset+1] << 8) | rd[offset]);
1128 struct ds4_calibration_data *calib = &sc->ds4_calib_data[n];
1129
1130
1131
1132
1133
1134
1135 int calib_data = mult_frac(calib->sens_numer,
1136 raw_data - calib->bias,
1137 calib->sens_denom);
1138
1139 input_report_abs(sc->sensor_dev, calib->abs_code, calib_data);
1140 offset += 2;
1141 }
1142 input_sync(sc->sensor_dev);
1143
1144
1145
1146
1147
1148 offset = data_offset + DS4_INPUT_REPORT_BATTERY_OFFSET;
1149 cable_state = (rd[offset] >> 4) & 0x01;
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161 if (cable_state) {
1162 u8 battery_data = rd[offset] & 0xf;
1163
1164 if (battery_data < 10) {
1165
1166
1167
1168
1169
1170 battery_capacity = battery_data * 10 + 5;
1171 battery_status = POWER_SUPPLY_STATUS_CHARGING;
1172 } else if (battery_data == 10) {
1173 battery_capacity = 100;
1174 battery_status = POWER_SUPPLY_STATUS_CHARGING;
1175 } else if (battery_data == 11) {
1176 battery_capacity = 100;
1177 battery_status = POWER_SUPPLY_STATUS_FULL;
1178 } else {
1179 battery_capacity = 0;
1180 battery_status = POWER_SUPPLY_STATUS_UNKNOWN;
1181 }
1182 } else {
1183 u8 battery_data = rd[offset] & 0xf;
1184
1185 if (battery_data < 10)
1186 battery_capacity = battery_data * 10 + 5;
1187 else
1188 battery_capacity = 100;
1189
1190 battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
1191 }
1192
1193 spin_lock_irqsave(&sc->lock, flags);
1194 sc->battery_capacity = battery_capacity;
1195 sc->battery_status = battery_status;
1196 spin_unlock_irqrestore(&sc->lock, flags);
1197
1198
1199
1200
1201
1202
1203
1204 offset = data_offset + DS4_INPUT_REPORT_TOUCHPAD_OFFSET;
1205 max_touch_data = (sc->quirks & DUALSHOCK4_CONTROLLER_BT) ? 4 : 3;
1206 if (rd[offset] > 0 && rd[offset] <= max_touch_data)
1207 num_touch_data = rd[offset];
1208 else
1209 num_touch_data = 1;
1210 offset += 1;
1211
1212 for (m = 0; m < num_touch_data; m++) {
1213
1214 offset += 1;
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224 for (n = 0; n < 2; n++) {
1225 u16 x, y;
1226 bool active;
1227
1228 x = rd[offset+1] | ((rd[offset+2] & 0xF) << 8);
1229 y = ((rd[offset+2] & 0xF0) >> 4) | (rd[offset+3] << 4);
1230
1231 active = !(rd[offset] >> 7);
1232 input_mt_slot(sc->touchpad, n);
1233 input_mt_report_slot_state(sc->touchpad, MT_TOOL_FINGER, active);
1234
1235 if (active) {
1236 input_report_abs(sc->touchpad, ABS_MT_POSITION_X, x);
1237 input_report_abs(sc->touchpad, ABS_MT_POSITION_Y, y);
1238 }
1239
1240 offset += 4;
1241 }
1242 input_mt_sync_frame(sc->touchpad);
1243 input_sync(sc->touchpad);
1244 }
1245 }
1246
1247 static void nsg_mrxu_parse_report(struct sony_sc *sc, u8 *rd, int size)
1248 {
1249 int n, offset, relx, rely;
1250 u8 active;
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270 offset = 1;
1271
1272 input_report_key(sc->touchpad, BTN_LEFT, rd[offset] & 0x0F);
1273 active = (rd[offset] >> 4);
1274 relx = (s8) rd[offset+5];
1275 rely = ((s8) rd[offset+10]) * -1;
1276
1277 offset++;
1278
1279 for (n = 0; n < 2; n++) {
1280 u16 x, y;
1281 u8 contactx, contacty;
1282
1283 x = rd[offset] | ((rd[offset+1] & 0x0F) << 8);
1284 y = ((rd[offset+1] & 0xF0) >> 4) | (rd[offset+2] << 4);
1285
1286 input_mt_slot(sc->touchpad, n);
1287 input_mt_report_slot_state(sc->touchpad, MT_TOOL_FINGER, active & 0x03);
1288
1289 if (active & 0x03) {
1290 contactx = rd[offset+3] & 0x0F;
1291 contacty = rd[offset+3] >> 4;
1292 input_report_abs(sc->touchpad, ABS_MT_TOUCH_MAJOR,
1293 max(contactx, contacty));
1294 input_report_abs(sc->touchpad, ABS_MT_TOUCH_MINOR,
1295 min(contactx, contacty));
1296 input_report_abs(sc->touchpad, ABS_MT_ORIENTATION,
1297 (bool) (contactx > contacty));
1298 input_report_abs(sc->touchpad, ABS_MT_POSITION_X, x);
1299 input_report_abs(sc->touchpad, ABS_MT_POSITION_Y,
1300 NSG_MRXU_MAX_Y - y);
1301
1302
1303
1304
1305
1306 if ((n == 0) || ((n == 1) && (active & 0x01))) {
1307 input_report_rel(sc->touchpad, REL_X, relx);
1308 input_report_rel(sc->touchpad, REL_Y, rely);
1309 }
1310 }
1311
1312 offset += 5;
1313 active >>= 2;
1314 }
1315
1316 input_mt_sync_frame(sc->touchpad);
1317
1318 input_sync(sc->touchpad);
1319 }
1320
1321 static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
1322 u8 *rd, int size)
1323 {
1324 struct sony_sc *sc = hid_get_drvdata(hdev);
1325
1326
1327
1328
1329
1330 if ((sc->quirks & SIXAXIS_CONTROLLER) && rd[0] == 0x01 && size == 49) {
1331
1332
1333
1334
1335
1336
1337
1338
1339 if (rd[1] == 0xff)
1340 return -EINVAL;
1341
1342 swap(rd[41], rd[42]);
1343 swap(rd[43], rd[44]);
1344 swap(rd[45], rd[46]);
1345 swap(rd[47], rd[48]);
1346
1347 sixaxis_parse_report(sc, rd, size);
1348 } else if ((sc->quirks & MOTION_CONTROLLER_BT) && rd[0] == 0x01 && size == 49) {
1349 sixaxis_parse_report(sc, rd, size);
1350 } else if ((sc->quirks & NAVIGATION_CONTROLLER) && rd[0] == 0x01 &&
1351 size == 49) {
1352 sixaxis_parse_report(sc, rd, size);
1353 } else if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) && rd[0] == 0x01 &&
1354 size == 64) {
1355 dualshock4_parse_report(sc, rd, size);
1356 } else if (((sc->quirks & DUALSHOCK4_CONTROLLER_BT) && rd[0] == 0x11 &&
1357 size == 78)) {
1358
1359 u8 bthdr = 0xA1;
1360 u32 crc;
1361 u32 report_crc;
1362
1363 crc = crc32_le(0xFFFFFFFF, &bthdr, 1);
1364 crc = ~crc32_le(crc, rd, DS4_INPUT_REPORT_0x11_SIZE-4);
1365 report_crc = get_unaligned_le32(&rd[DS4_INPUT_REPORT_0x11_SIZE-4]);
1366 if (crc != report_crc) {
1367 hid_dbg(sc->hdev, "DualShock 4 input report's CRC check failed, received crc 0x%0x != 0x%0x\n",
1368 report_crc, crc);
1369 return -EILSEQ;
1370 }
1371
1372 dualshock4_parse_report(sc, rd, size);
1373 } else if ((sc->quirks & DUALSHOCK4_DONGLE) && rd[0] == 0x01 &&
1374 size == 64) {
1375 unsigned long flags;
1376 enum ds4_dongle_state dongle_state;
1377
1378
1379
1380
1381
1382
1383 bool connected = (rd[31] & 0x04) ? false : true;
1384
1385 spin_lock_irqsave(&sc->lock, flags);
1386 dongle_state = sc->ds4_dongle_state;
1387 spin_unlock_irqrestore(&sc->lock, flags);
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397 if (dongle_state == DONGLE_DISCONNECTED && connected) {
1398 hid_info(sc->hdev, "DualShock 4 USB dongle: controller connected\n");
1399 sony_set_leds(sc);
1400
1401 spin_lock_irqsave(&sc->lock, flags);
1402 sc->ds4_dongle_state = DONGLE_CALIBRATING;
1403 spin_unlock_irqrestore(&sc->lock, flags);
1404
1405 sony_schedule_work(sc, SONY_WORKER_HOTPLUG);
1406
1407
1408
1409
1410 return 0;
1411 } else if ((dongle_state == DONGLE_CONNECTED ||
1412 dongle_state == DONGLE_DISABLED) && !connected) {
1413 hid_info(sc->hdev, "DualShock 4 USB dongle: controller disconnected\n");
1414
1415 spin_lock_irqsave(&sc->lock, flags);
1416 sc->ds4_dongle_state = DONGLE_DISCONNECTED;
1417 spin_unlock_irqrestore(&sc->lock, flags);
1418
1419
1420 return 0;
1421 } else if (dongle_state == DONGLE_CALIBRATING ||
1422 dongle_state == DONGLE_DISABLED ||
1423 dongle_state == DONGLE_DISCONNECTED) {
1424
1425 return 0;
1426 }
1427
1428 dualshock4_parse_report(sc, rd, size);
1429
1430 } else if ((sc->quirks & NSG_MRXU_REMOTE) && rd[0] == 0x02) {
1431 nsg_mrxu_parse_report(sc, rd, size);
1432 return 1;
1433 }
1434
1435 if (sc->defer_initialization) {
1436 sc->defer_initialization = 0;
1437 sony_schedule_work(sc, SONY_WORKER_STATE);
1438 }
1439
1440 return 0;
1441 }
1442
1443 static int sony_mapping(struct hid_device *hdev, struct hid_input *hi,
1444 struct hid_field *field, struct hid_usage *usage,
1445 unsigned long **bit, int *max)
1446 {
1447 struct sony_sc *sc = hid_get_drvdata(hdev);
1448
1449 if (sc->quirks & BUZZ_CONTROLLER) {
1450 unsigned int key = usage->hid & HID_USAGE;
1451
1452 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_BUTTON)
1453 return -1;
1454
1455 switch (usage->collection_index) {
1456 case 1:
1457 if (key >= ARRAY_SIZE(buzz_keymap))
1458 return -1;
1459
1460 key = buzz_keymap[key];
1461 if (!key)
1462 return -1;
1463 break;
1464 default:
1465 return -1;
1466 }
1467
1468 hid_map_usage_clear(hi, usage, bit, max, EV_KEY, key);
1469 return 1;
1470 }
1471
1472 if (sc->quirks & PS3REMOTE)
1473 return ps3remote_mapping(hdev, hi, field, usage, bit, max);
1474
1475 if (sc->quirks & NAVIGATION_CONTROLLER)
1476 return navigation_mapping(hdev, hi, field, usage, bit, max);
1477
1478 if (sc->quirks & SIXAXIS_CONTROLLER)
1479 return sixaxis_mapping(hdev, hi, field, usage, bit, max);
1480
1481 if (sc->quirks & DUALSHOCK4_CONTROLLER)
1482 return ds4_mapping(hdev, hi, field, usage, bit, max);
1483
1484 if (sc->quirks & GH_GUITAR_CONTROLLER)
1485 return guitar_mapping(hdev, hi, field, usage, bit, max);
1486
1487
1488 return 0;
1489 }
1490
1491 static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
1492 int w, int h, int touch_major, int touch_minor, int orientation)
1493 {
1494 size_t name_sz;
1495 char *name;
1496 int ret;
1497
1498 sc->touchpad = devm_input_allocate_device(&sc->hdev->dev);
1499 if (!sc->touchpad)
1500 return -ENOMEM;
1501
1502 input_set_drvdata(sc->touchpad, sc);
1503 sc->touchpad->dev.parent = &sc->hdev->dev;
1504 sc->touchpad->phys = sc->hdev->phys;
1505 sc->touchpad->uniq = sc->hdev->uniq;
1506 sc->touchpad->id.bustype = sc->hdev->bus;
1507 sc->touchpad->id.vendor = sc->hdev->vendor;
1508 sc->touchpad->id.product = sc->hdev->product;
1509 sc->touchpad->id.version = sc->hdev->version;
1510
1511
1512
1513
1514 name_sz = strlen(sc->hdev->name) + sizeof(DS4_TOUCHPAD_SUFFIX);
1515 name = devm_kzalloc(&sc->hdev->dev, name_sz, GFP_KERNEL);
1516 if (!name)
1517 return -ENOMEM;
1518 snprintf(name, name_sz, "%s" DS4_TOUCHPAD_SUFFIX, sc->hdev->name);
1519 sc->touchpad->name = name;
1520
1521
1522 __set_bit(EV_KEY, sc->touchpad->evbit);
1523 __set_bit(BTN_LEFT, sc->touchpad->keybit);
1524 __set_bit(INPUT_PROP_BUTTONPAD, sc->touchpad->propbit);
1525
1526 input_set_abs_params(sc->touchpad, ABS_MT_POSITION_X, 0, w, 0, 0);
1527 input_set_abs_params(sc->touchpad, ABS_MT_POSITION_Y, 0, h, 0, 0);
1528
1529 if (touch_major > 0) {
1530 input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MAJOR,
1531 0, touch_major, 0, 0);
1532 if (touch_minor > 0)
1533 input_set_abs_params(sc->touchpad, ABS_MT_TOUCH_MINOR,
1534 0, touch_minor, 0, 0);
1535 if (orientation > 0)
1536 input_set_abs_params(sc->touchpad, ABS_MT_ORIENTATION,
1537 0, orientation, 0, 0);
1538 }
1539
1540 if (sc->quirks & NSG_MRXU_REMOTE) {
1541 __set_bit(EV_REL, sc->touchpad->evbit);
1542 }
1543
1544 ret = input_mt_init_slots(sc->touchpad, touch_count, INPUT_MT_POINTER);
1545 if (ret < 0)
1546 return ret;
1547
1548 ret = input_register_device(sc->touchpad);
1549 if (ret < 0)
1550 return ret;
1551
1552 return 0;
1553 }
1554
1555 static int sony_register_sensors(struct sony_sc *sc)
1556 {
1557 size_t name_sz;
1558 char *name;
1559 int ret;
1560 int range;
1561
1562 sc->sensor_dev = devm_input_allocate_device(&sc->hdev->dev);
1563 if (!sc->sensor_dev)
1564 return -ENOMEM;
1565
1566 input_set_drvdata(sc->sensor_dev, sc);
1567 sc->sensor_dev->dev.parent = &sc->hdev->dev;
1568 sc->sensor_dev->phys = sc->hdev->phys;
1569 sc->sensor_dev->uniq = sc->hdev->uniq;
1570 sc->sensor_dev->id.bustype = sc->hdev->bus;
1571 sc->sensor_dev->id.vendor = sc->hdev->vendor;
1572 sc->sensor_dev->id.product = sc->hdev->product;
1573 sc->sensor_dev->id.version = sc->hdev->version;
1574
1575
1576
1577
1578 name_sz = strlen(sc->hdev->name) + sizeof(SENSOR_SUFFIX);
1579 name = devm_kzalloc(&sc->hdev->dev, name_sz, GFP_KERNEL);
1580 if (!name)
1581 return -ENOMEM;
1582 snprintf(name, name_sz, "%s" SENSOR_SUFFIX, sc->hdev->name);
1583 sc->sensor_dev->name = name;
1584
1585 if (sc->quirks & SIXAXIS_CONTROLLER) {
1586
1587
1588
1589
1590
1591
1592 input_set_abs_params(sc->sensor_dev, ABS_X, -512, 511, 4, 0);
1593 input_set_abs_params(sc->sensor_dev, ABS_Y, -512, 511, 4, 0);
1594 input_set_abs_params(sc->sensor_dev, ABS_Z, -512, 511, 4, 0);
1595 input_abs_set_res(sc->sensor_dev, ABS_X, SIXAXIS_ACC_RES_PER_G);
1596 input_abs_set_res(sc->sensor_dev, ABS_Y, SIXAXIS_ACC_RES_PER_G);
1597 input_abs_set_res(sc->sensor_dev, ABS_Z, SIXAXIS_ACC_RES_PER_G);
1598 } else if (sc->quirks & DUALSHOCK4_CONTROLLER) {
1599 range = DS4_ACC_RES_PER_G*4;
1600 input_set_abs_params(sc->sensor_dev, ABS_X, -range, range, 16, 0);
1601 input_set_abs_params(sc->sensor_dev, ABS_Y, -range, range, 16, 0);
1602 input_set_abs_params(sc->sensor_dev, ABS_Z, -range, range, 16, 0);
1603 input_abs_set_res(sc->sensor_dev, ABS_X, DS4_ACC_RES_PER_G);
1604 input_abs_set_res(sc->sensor_dev, ABS_Y, DS4_ACC_RES_PER_G);
1605 input_abs_set_res(sc->sensor_dev, ABS_Z, DS4_ACC_RES_PER_G);
1606
1607 range = DS4_GYRO_RES_PER_DEG_S*2048;
1608 input_set_abs_params(sc->sensor_dev, ABS_RX, -range, range, 16, 0);
1609 input_set_abs_params(sc->sensor_dev, ABS_RY, -range, range, 16, 0);
1610 input_set_abs_params(sc->sensor_dev, ABS_RZ, -range, range, 16, 0);
1611 input_abs_set_res(sc->sensor_dev, ABS_RX, DS4_GYRO_RES_PER_DEG_S);
1612 input_abs_set_res(sc->sensor_dev, ABS_RY, DS4_GYRO_RES_PER_DEG_S);
1613 input_abs_set_res(sc->sensor_dev, ABS_RZ, DS4_GYRO_RES_PER_DEG_S);
1614
1615 __set_bit(EV_MSC, sc->sensor_dev->evbit);
1616 __set_bit(MSC_TIMESTAMP, sc->sensor_dev->mscbit);
1617 }
1618
1619 __set_bit(INPUT_PROP_ACCELEROMETER, sc->sensor_dev->propbit);
1620
1621 ret = input_register_device(sc->sensor_dev);
1622 if (ret < 0)
1623 return ret;
1624
1625 return 0;
1626 }
1627
1628
1629
1630
1631
1632
1633 static int sixaxis_set_operational_usb(struct hid_device *hdev)
1634 {
1635 struct sony_sc *sc = hid_get_drvdata(hdev);
1636 const int buf_size =
1637 max(SIXAXIS_REPORT_0xF2_SIZE, SIXAXIS_REPORT_0xF5_SIZE);
1638 u8 *buf;
1639 int ret;
1640
1641 buf = kmalloc(buf_size, GFP_KERNEL);
1642 if (!buf)
1643 return -ENOMEM;
1644
1645 ret = hid_hw_raw_request(hdev, 0xf2, buf, SIXAXIS_REPORT_0xF2_SIZE,
1646 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
1647 if (ret < 0) {
1648 hid_err(hdev, "can't set operational mode: step 1\n");
1649 goto out;
1650 }
1651
1652
1653
1654
1655
1656 ret = hid_hw_raw_request(hdev, 0xf5, buf, SIXAXIS_REPORT_0xF5_SIZE,
1657 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
1658 if (ret < 0) {
1659 hid_err(hdev, "can't set operational mode: step 2\n");
1660 goto out;
1661 }
1662
1663
1664
1665
1666
1667 if (sc->quirks & SHANWAN_GAMEPAD)
1668 goto out;
1669
1670 ret = hid_hw_output_report(hdev, buf, 1);
1671 if (ret < 0) {
1672 hid_info(hdev, "can't set operational mode: step 3, ignoring\n");
1673 ret = 0;
1674 }
1675
1676 out:
1677 kfree(buf);
1678
1679 return ret;
1680 }
1681
1682 static int sixaxis_set_operational_bt(struct hid_device *hdev)
1683 {
1684 static const u8 report[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 };
1685 u8 *buf;
1686 int ret;
1687
1688 buf = kmemdup(report, sizeof(report), GFP_KERNEL);
1689 if (!buf)
1690 return -ENOMEM;
1691
1692 ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(report),
1693 HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
1694
1695 kfree(buf);
1696
1697 return ret;
1698 }
1699
1700
1701
1702
1703
1704 static int dualshock4_get_calibration_data(struct sony_sc *sc)
1705 {
1706 u8 *buf;
1707 int ret;
1708 short gyro_pitch_bias, gyro_pitch_plus, gyro_pitch_minus;
1709 short gyro_yaw_bias, gyro_yaw_plus, gyro_yaw_minus;
1710 short gyro_roll_bias, gyro_roll_plus, gyro_roll_minus;
1711 short gyro_speed_plus, gyro_speed_minus;
1712 short acc_x_plus, acc_x_minus;
1713 short acc_y_plus, acc_y_minus;
1714 short acc_z_plus, acc_z_minus;
1715 int speed_2x;
1716 int range_2g;
1717
1718
1719
1720
1721
1722 if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE)) {
1723 int retries;
1724
1725 buf = kmalloc(DS4_FEATURE_REPORT_0x02_SIZE, GFP_KERNEL);
1726 if (!buf)
1727 return -ENOMEM;
1728
1729
1730
1731
1732
1733
1734
1735 for (retries = 0; retries < 3; retries++) {
1736 ret = hid_hw_raw_request(sc->hdev, 0x02, buf,
1737 DS4_FEATURE_REPORT_0x02_SIZE,
1738 HID_FEATURE_REPORT,
1739 HID_REQ_GET_REPORT);
1740 if (ret < 0)
1741 goto err_stop;
1742
1743 if (buf[0] != 0x02) {
1744 if (retries < 2) {
1745 hid_warn(sc->hdev, "Retrying DualShock 4 get calibration report (0x02) request\n");
1746 continue;
1747 } else {
1748 ret = -EILSEQ;
1749 goto err_stop;
1750 }
1751 } else {
1752 break;
1753 }
1754 }
1755 } else {
1756 u8 bthdr = 0xA3;
1757 u32 crc;
1758 u32 report_crc;
1759 int retries;
1760
1761 buf = kmalloc(DS4_FEATURE_REPORT_0x05_SIZE, GFP_KERNEL);
1762 if (!buf)
1763 return -ENOMEM;
1764
1765 for (retries = 0; retries < 3; retries++) {
1766 ret = hid_hw_raw_request(sc->hdev, 0x05, buf,
1767 DS4_FEATURE_REPORT_0x05_SIZE,
1768 HID_FEATURE_REPORT,
1769 HID_REQ_GET_REPORT);
1770 if (ret < 0)
1771 goto err_stop;
1772
1773
1774 crc = crc32_le(0xFFFFFFFF, &bthdr, 1);
1775 crc = ~crc32_le(crc, buf, DS4_FEATURE_REPORT_0x05_SIZE-4);
1776 report_crc = get_unaligned_le32(&buf[DS4_FEATURE_REPORT_0x05_SIZE-4]);
1777 if (crc != report_crc) {
1778 hid_warn(sc->hdev, "DualShock 4 calibration report's CRC check failed, received crc 0x%0x != 0x%0x\n",
1779 report_crc, crc);
1780 if (retries < 2) {
1781 hid_warn(sc->hdev, "Retrying DualShock 4 get calibration report request\n");
1782 continue;
1783 } else {
1784 ret = -EILSEQ;
1785 goto err_stop;
1786 }
1787 } else {
1788 break;
1789 }
1790 }
1791 }
1792
1793 gyro_pitch_bias = get_unaligned_le16(&buf[1]);
1794 gyro_yaw_bias = get_unaligned_le16(&buf[3]);
1795 gyro_roll_bias = get_unaligned_le16(&buf[5]);
1796 if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
1797 gyro_pitch_plus = get_unaligned_le16(&buf[7]);
1798 gyro_pitch_minus = get_unaligned_le16(&buf[9]);
1799 gyro_yaw_plus = get_unaligned_le16(&buf[11]);
1800 gyro_yaw_minus = get_unaligned_le16(&buf[13]);
1801 gyro_roll_plus = get_unaligned_le16(&buf[15]);
1802 gyro_roll_minus = get_unaligned_le16(&buf[17]);
1803 } else {
1804
1805 gyro_pitch_plus = get_unaligned_le16(&buf[7]);
1806 gyro_yaw_plus = get_unaligned_le16(&buf[9]);
1807 gyro_roll_plus = get_unaligned_le16(&buf[11]);
1808 gyro_pitch_minus = get_unaligned_le16(&buf[13]);
1809 gyro_yaw_minus = get_unaligned_le16(&buf[15]);
1810 gyro_roll_minus = get_unaligned_le16(&buf[17]);
1811 }
1812 gyro_speed_plus = get_unaligned_le16(&buf[19]);
1813 gyro_speed_minus = get_unaligned_le16(&buf[21]);
1814 acc_x_plus = get_unaligned_le16(&buf[23]);
1815 acc_x_minus = get_unaligned_le16(&buf[25]);
1816 acc_y_plus = get_unaligned_le16(&buf[27]);
1817 acc_y_minus = get_unaligned_le16(&buf[29]);
1818 acc_z_plus = get_unaligned_le16(&buf[31]);
1819 acc_z_minus = get_unaligned_le16(&buf[33]);
1820
1821
1822
1823
1824 speed_2x = (gyro_speed_plus + gyro_speed_minus);
1825 sc->ds4_calib_data[0].abs_code = ABS_RX;
1826 sc->ds4_calib_data[0].bias = gyro_pitch_bias;
1827 sc->ds4_calib_data[0].sens_numer = speed_2x*DS4_GYRO_RES_PER_DEG_S;
1828 sc->ds4_calib_data[0].sens_denom = gyro_pitch_plus - gyro_pitch_minus;
1829
1830 sc->ds4_calib_data[1].abs_code = ABS_RY;
1831 sc->ds4_calib_data[1].bias = gyro_yaw_bias;
1832 sc->ds4_calib_data[1].sens_numer = speed_2x*DS4_GYRO_RES_PER_DEG_S;
1833 sc->ds4_calib_data[1].sens_denom = gyro_yaw_plus - gyro_yaw_minus;
1834
1835 sc->ds4_calib_data[2].abs_code = ABS_RZ;
1836 sc->ds4_calib_data[2].bias = gyro_roll_bias;
1837 sc->ds4_calib_data[2].sens_numer = speed_2x*DS4_GYRO_RES_PER_DEG_S;
1838 sc->ds4_calib_data[2].sens_denom = gyro_roll_plus - gyro_roll_minus;
1839
1840
1841
1842
1843 range_2g = acc_x_plus - acc_x_minus;
1844 sc->ds4_calib_data[3].abs_code = ABS_X;
1845 sc->ds4_calib_data[3].bias = acc_x_plus - range_2g / 2;
1846 sc->ds4_calib_data[3].sens_numer = 2*DS4_ACC_RES_PER_G;
1847 sc->ds4_calib_data[3].sens_denom = range_2g;
1848
1849 range_2g = acc_y_plus - acc_y_minus;
1850 sc->ds4_calib_data[4].abs_code = ABS_Y;
1851 sc->ds4_calib_data[4].bias = acc_y_plus - range_2g / 2;
1852 sc->ds4_calib_data[4].sens_numer = 2*DS4_ACC_RES_PER_G;
1853 sc->ds4_calib_data[4].sens_denom = range_2g;
1854
1855 range_2g = acc_z_plus - acc_z_minus;
1856 sc->ds4_calib_data[5].abs_code = ABS_Z;
1857 sc->ds4_calib_data[5].bias = acc_z_plus - range_2g / 2;
1858 sc->ds4_calib_data[5].sens_numer = 2*DS4_ACC_RES_PER_G;
1859 sc->ds4_calib_data[5].sens_denom = range_2g;
1860
1861 err_stop:
1862 kfree(buf);
1863 return ret;
1864 }
1865
1866 static void dualshock4_calibration_work(struct work_struct *work)
1867 {
1868 struct sony_sc *sc = container_of(work, struct sony_sc, hotplug_worker);
1869 unsigned long flags;
1870 enum ds4_dongle_state dongle_state;
1871 int ret;
1872
1873 ret = dualshock4_get_calibration_data(sc);
1874 if (ret < 0) {
1875
1876
1877
1878
1879
1880
1881 hid_err(sc->hdev, "DualShock 4 USB dongle: calibration failed, disabling device\n");
1882 dongle_state = DONGLE_DISABLED;
1883 } else {
1884 hid_info(sc->hdev, "DualShock 4 USB dongle: calibration completed\n");
1885 dongle_state = DONGLE_CONNECTED;
1886 }
1887
1888 spin_lock_irqsave(&sc->lock, flags);
1889 sc->ds4_dongle_state = dongle_state;
1890 spin_unlock_irqrestore(&sc->lock, flags);
1891 }
1892
1893 static int dualshock4_get_version_info(struct sony_sc *sc)
1894 {
1895 u8 *buf;
1896 int ret;
1897
1898 buf = kmalloc(DS4_FEATURE_REPORT_0xA3_SIZE, GFP_KERNEL);
1899 if (!buf)
1900 return -ENOMEM;
1901
1902 ret = hid_hw_raw_request(sc->hdev, 0xA3, buf,
1903 DS4_FEATURE_REPORT_0xA3_SIZE,
1904 HID_FEATURE_REPORT,
1905 HID_REQ_GET_REPORT);
1906 if (ret < 0) {
1907 kfree(buf);
1908 return ret;
1909 }
1910
1911 sc->hw_version = get_unaligned_le16(&buf[35]);
1912 sc->fw_version = get_unaligned_le16(&buf[41]);
1913
1914 kfree(buf);
1915 return 0;
1916 }
1917
1918 static void sixaxis_set_leds_from_id(struct sony_sc *sc)
1919 {
1920 static const u8 sixaxis_leds[10][4] = {
1921 { 0x01, 0x00, 0x00, 0x00 },
1922 { 0x00, 0x01, 0x00, 0x00 },
1923 { 0x00, 0x00, 0x01, 0x00 },
1924 { 0x00, 0x00, 0x00, 0x01 },
1925 { 0x01, 0x00, 0x00, 0x01 },
1926 { 0x00, 0x01, 0x00, 0x01 },
1927 { 0x00, 0x00, 0x01, 0x01 },
1928 { 0x01, 0x00, 0x01, 0x01 },
1929 { 0x00, 0x01, 0x01, 0x01 },
1930 { 0x01, 0x01, 0x01, 0x01 }
1931 };
1932
1933 int id = sc->device_id;
1934
1935 BUILD_BUG_ON(MAX_LEDS < ARRAY_SIZE(sixaxis_leds[0]));
1936
1937 if (id < 0)
1938 return;
1939
1940 id %= 10;
1941 memcpy(sc->led_state, sixaxis_leds[id], sizeof(sixaxis_leds[id]));
1942 }
1943
1944 static void dualshock4_set_leds_from_id(struct sony_sc *sc)
1945 {
1946
1947 static const u8 color_code[7][3] = {
1948 { 0x00, 0x00, 0x40 },
1949 { 0x40, 0x00, 0x00 },
1950 { 0x00, 0x40, 0x00 },
1951 { 0x20, 0x00, 0x20 },
1952 { 0x02, 0x01, 0x00 },
1953 { 0x00, 0x01, 0x01 },
1954 { 0x01, 0x01, 0x01 }
1955 };
1956
1957 int id = sc->device_id;
1958
1959 BUILD_BUG_ON(MAX_LEDS < ARRAY_SIZE(color_code[0]));
1960
1961 if (id < 0)
1962 return;
1963
1964 id %= 7;
1965 memcpy(sc->led_state, color_code[id], sizeof(color_code[id]));
1966 }
1967
1968 static void buzz_set_leds(struct sony_sc *sc)
1969 {
1970 struct hid_device *hdev = sc->hdev;
1971 struct list_head *report_list =
1972 &hdev->report_enum[HID_OUTPUT_REPORT].report_list;
1973 struct hid_report *report = list_entry(report_list->next,
1974 struct hid_report, list);
1975 s32 *value = report->field[0]->value;
1976
1977 BUILD_BUG_ON(MAX_LEDS < 4);
1978
1979 value[0] = 0x00;
1980 value[1] = sc->led_state[0] ? 0xff : 0x00;
1981 value[2] = sc->led_state[1] ? 0xff : 0x00;
1982 value[3] = sc->led_state[2] ? 0xff : 0x00;
1983 value[4] = sc->led_state[3] ? 0xff : 0x00;
1984 value[5] = 0x00;
1985 value[6] = 0x00;
1986 hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
1987 }
1988
1989 static void sony_set_leds(struct sony_sc *sc)
1990 {
1991 if (!(sc->quirks & BUZZ_CONTROLLER))
1992 sony_schedule_work(sc, SONY_WORKER_STATE);
1993 else
1994 buzz_set_leds(sc);
1995 }
1996
1997 static void sony_led_set_brightness(struct led_classdev *led,
1998 enum led_brightness value)
1999 {
2000 struct device *dev = led->dev->parent;
2001 struct hid_device *hdev = to_hid_device(dev);
2002 struct sony_sc *drv_data;
2003
2004 int n;
2005 int force_update;
2006
2007 drv_data = hid_get_drvdata(hdev);
2008 if (!drv_data) {
2009 hid_err(hdev, "No device data\n");
2010 return;
2011 }
2012
2013
2014
2015
2016
2017
2018
2019
2020 force_update = !!(drv_data->quirks & SIXAXIS_CONTROLLER_USB);
2021
2022 for (n = 0; n < drv_data->led_count; n++) {
2023 if (led == drv_data->leds[n] && (force_update ||
2024 (value != drv_data->led_state[n] ||
2025 drv_data->led_delay_on[n] ||
2026 drv_data->led_delay_off[n]))) {
2027
2028 drv_data->led_state[n] = value;
2029
2030
2031 drv_data->led_delay_on[n] = 0;
2032 drv_data->led_delay_off[n] = 0;
2033
2034 sony_set_leds(drv_data);
2035 break;
2036 }
2037 }
2038 }
2039
2040 static enum led_brightness sony_led_get_brightness(struct led_classdev *led)
2041 {
2042 struct device *dev = led->dev->parent;
2043 struct hid_device *hdev = to_hid_device(dev);
2044 struct sony_sc *drv_data;
2045
2046 int n;
2047
2048 drv_data = hid_get_drvdata(hdev);
2049 if (!drv_data) {
2050 hid_err(hdev, "No device data\n");
2051 return LED_OFF;
2052 }
2053
2054 for (n = 0; n < drv_data->led_count; n++) {
2055 if (led == drv_data->leds[n])
2056 return drv_data->led_state[n];
2057 }
2058
2059 return LED_OFF;
2060 }
2061
2062 static int sony_led_blink_set(struct led_classdev *led, unsigned long *delay_on,
2063 unsigned long *delay_off)
2064 {
2065 struct device *dev = led->dev->parent;
2066 struct hid_device *hdev = to_hid_device(dev);
2067 struct sony_sc *drv_data = hid_get_drvdata(hdev);
2068 int n;
2069 u8 new_on, new_off;
2070
2071 if (!drv_data) {
2072 hid_err(hdev, "No device data\n");
2073 return -EINVAL;
2074 }
2075
2076
2077 if (*delay_on > 2550)
2078 *delay_on = 2550;
2079 if (*delay_off > 2550)
2080 *delay_off = 2550;
2081
2082
2083 if (!*delay_on && !*delay_off)
2084 *delay_on = *delay_off = 500;
2085
2086 new_on = *delay_on / 10;
2087 new_off = *delay_off / 10;
2088
2089 for (n = 0; n < drv_data->led_count; n++) {
2090 if (led == drv_data->leds[n])
2091 break;
2092 }
2093
2094
2095 if (n >= drv_data->led_count)
2096 return -EINVAL;
2097
2098
2099 if (new_on != drv_data->led_delay_on[n] ||
2100 new_off != drv_data->led_delay_off[n]) {
2101 drv_data->led_delay_on[n] = new_on;
2102 drv_data->led_delay_off[n] = new_off;
2103 sony_schedule_work(drv_data, SONY_WORKER_STATE);
2104 }
2105
2106 return 0;
2107 }
2108
2109 static int sony_leds_init(struct sony_sc *sc)
2110 {
2111 struct hid_device *hdev = sc->hdev;
2112 int n, ret = 0;
2113 int use_ds4_names;
2114 struct led_classdev *led;
2115 size_t name_sz;
2116 char *name;
2117 size_t name_len;
2118 const char *name_fmt;
2119 static const char * const ds4_name_str[] = { "red", "green", "blue",
2120 "global" };
2121 u8 max_brightness[MAX_LEDS] = { [0 ... (MAX_LEDS - 1)] = 1 };
2122 u8 use_hw_blink[MAX_LEDS] = { 0 };
2123
2124 BUG_ON(!(sc->quirks & SONY_LED_SUPPORT));
2125
2126 if (sc->quirks & BUZZ_CONTROLLER) {
2127 sc->led_count = 4;
2128 use_ds4_names = 0;
2129 name_len = strlen("::buzz#");
2130 name_fmt = "%s::buzz%d";
2131
2132 if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 0, 0, 7))
2133 return -ENODEV;
2134 } else if (sc->quirks & DUALSHOCK4_CONTROLLER) {
2135 dualshock4_set_leds_from_id(sc);
2136 sc->led_state[3] = 1;
2137 sc->led_count = 4;
2138 memset(max_brightness, 255, 3);
2139 use_hw_blink[3] = 1;
2140 use_ds4_names = 1;
2141 name_len = 0;
2142 name_fmt = "%s:%s";
2143 } else if (sc->quirks & MOTION_CONTROLLER) {
2144 sc->led_count = 3;
2145 memset(max_brightness, 255, 3);
2146 use_ds4_names = 1;
2147 name_len = 0;
2148 name_fmt = "%s:%s";
2149 } else if (sc->quirks & NAVIGATION_CONTROLLER) {
2150 static const u8 navigation_leds[4] = {0x01, 0x00, 0x00, 0x00};
2151
2152 memcpy(sc->led_state, navigation_leds, sizeof(navigation_leds));
2153 sc->led_count = 1;
2154 memset(use_hw_blink, 1, 4);
2155 use_ds4_names = 0;
2156 name_len = strlen("::sony#");
2157 name_fmt = "%s::sony%d";
2158 } else {
2159 sixaxis_set_leds_from_id(sc);
2160 sc->led_count = 4;
2161 memset(use_hw_blink, 1, 4);
2162 use_ds4_names = 0;
2163 name_len = strlen("::sony#");
2164 name_fmt = "%s::sony%d";
2165 }
2166
2167
2168
2169
2170
2171
2172 sony_set_leds(sc);
2173
2174 name_sz = strlen(dev_name(&hdev->dev)) + name_len + 1;
2175
2176 for (n = 0; n < sc->led_count; n++) {
2177
2178 if (use_ds4_names)
2179 name_sz = strlen(dev_name(&hdev->dev)) + strlen(ds4_name_str[n]) + 2;
2180
2181 led = devm_kzalloc(&hdev->dev, sizeof(struct led_classdev) + name_sz, GFP_KERNEL);
2182 if (!led) {
2183 hid_err(hdev, "Couldn't allocate memory for LED %d\n", n);
2184 return -ENOMEM;
2185 }
2186
2187 name = (void *)(&led[1]);
2188 if (use_ds4_names)
2189 snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev),
2190 ds4_name_str[n]);
2191 else
2192 snprintf(name, name_sz, name_fmt, dev_name(&hdev->dev), n + 1);
2193 led->name = name;
2194 led->brightness = sc->led_state[n];
2195 led->max_brightness = max_brightness[n];
2196 led->flags = LED_CORE_SUSPENDRESUME;
2197 led->brightness_get = sony_led_get_brightness;
2198 led->brightness_set = sony_led_set_brightness;
2199
2200 if (use_hw_blink[n])
2201 led->blink_set = sony_led_blink_set;
2202
2203 sc->leds[n] = led;
2204
2205 ret = devm_led_classdev_register(&hdev->dev, led);
2206 if (ret) {
2207 hid_err(hdev, "Failed to register LED %d\n", n);
2208 return ret;
2209 }
2210 }
2211
2212 return 0;
2213 }
2214
2215 static void sixaxis_send_output_report(struct sony_sc *sc)
2216 {
2217 static const union sixaxis_output_report_01 default_report = {
2218 .buf = {
2219 0x01,
2220 0x01, 0xff, 0x00, 0xff, 0x00,
2221 0x00, 0x00, 0x00, 0x00, 0x00,
2222 0xff, 0x27, 0x10, 0x00, 0x32,
2223 0xff, 0x27, 0x10, 0x00, 0x32,
2224 0xff, 0x27, 0x10, 0x00, 0x32,
2225 0xff, 0x27, 0x10, 0x00, 0x32,
2226 0x00, 0x00, 0x00, 0x00, 0x00
2227 }
2228 };
2229 struct sixaxis_output_report *report =
2230 (struct sixaxis_output_report *)sc->output_report_dmabuf;
2231 int n;
2232
2233
2234 memcpy(report, &default_report, sizeof(struct sixaxis_output_report));
2235
2236 #ifdef CONFIG_SONY_FF
2237 report->rumble.right_motor_on = sc->right ? 1 : 0;
2238 report->rumble.left_motor_force = sc->left;
2239 #endif
2240
2241 report->leds_bitmap |= sc->led_state[0] << 1;
2242 report->leds_bitmap |= sc->led_state[1] << 2;
2243 report->leds_bitmap |= sc->led_state[2] << 3;
2244 report->leds_bitmap |= sc->led_state[3] << 4;
2245
2246
2247 if ((report->leds_bitmap & 0x1E) == 0)
2248 report->leds_bitmap |= 0x20;
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259 for (n = 0; n < 4; n++) {
2260 if (sc->led_delay_on[n] || sc->led_delay_off[n]) {
2261 report->led[3 - n].duty_off = sc->led_delay_off[n];
2262 report->led[3 - n].duty_on = sc->led_delay_on[n];
2263 }
2264 }
2265
2266
2267 if (sc->quirks & SHANWAN_GAMEPAD)
2268 hid_hw_output_report(sc->hdev, (u8 *)report,
2269 sizeof(struct sixaxis_output_report));
2270 else
2271 hid_hw_raw_request(sc->hdev, report->report_id, (u8 *)report,
2272 sizeof(struct sixaxis_output_report),
2273 HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);
2274 }
2275
2276 static void dualshock4_send_output_report(struct sony_sc *sc)
2277 {
2278 struct hid_device *hdev = sc->hdev;
2279 u8 *buf = sc->output_report_dmabuf;
2280 int offset;
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291 if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE)) {
2292 memset(buf, 0, DS4_OUTPUT_REPORT_0x05_SIZE);
2293 buf[0] = 0x05;
2294 buf[1] = 0x07;
2295 offset = 4;
2296 } else {
2297 memset(buf, 0, DS4_OUTPUT_REPORT_0x11_SIZE);
2298 buf[0] = 0x11;
2299 buf[1] = 0xC0 | sc->ds4_bt_poll_interval;
2300 buf[3] = 0x07;
2301 offset = 6;
2302 }
2303
2304 #ifdef CONFIG_SONY_FF
2305 buf[offset++] = sc->right;
2306 buf[offset++] = sc->left;
2307 #else
2308 offset += 2;
2309 #endif
2310
2311
2312 if (sc->led_state[3]) {
2313 buf[offset++] = sc->led_state[0];
2314 buf[offset++] = sc->led_state[1];
2315 buf[offset++] = sc->led_state[2];
2316 } else {
2317 offset += 3;
2318 }
2319
2320
2321 buf[offset++] = sc->led_delay_on[3];
2322 buf[offset++] = sc->led_delay_off[3];
2323
2324 if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE))
2325 hid_hw_output_report(hdev, buf, DS4_OUTPUT_REPORT_0x05_SIZE);
2326 else {
2327
2328 u8 bthdr = 0xA2;
2329 u32 crc;
2330
2331 crc = crc32_le(0xFFFFFFFF, &bthdr, 1);
2332 crc = ~crc32_le(crc, buf, DS4_OUTPUT_REPORT_0x11_SIZE-4);
2333 put_unaligned_le32(crc, &buf[74]);
2334 hid_hw_output_report(hdev, buf, DS4_OUTPUT_REPORT_0x11_SIZE);
2335 }
2336 }
2337
2338 static void motion_send_output_report(struct sony_sc *sc)
2339 {
2340 struct hid_device *hdev = sc->hdev;
2341 struct motion_output_report_02 *report =
2342 (struct motion_output_report_02 *)sc->output_report_dmabuf;
2343
2344 memset(report, 0, MOTION_REPORT_0x02_SIZE);
2345
2346 report->type = 0x02;
2347 report->r = sc->led_state[0];
2348 report->g = sc->led_state[1];
2349 report->b = sc->led_state[2];
2350
2351 #ifdef CONFIG_SONY_FF
2352 report->rumble = max(sc->right, sc->left);
2353 #endif
2354
2355 hid_hw_output_report(hdev, (u8 *)report, MOTION_REPORT_0x02_SIZE);
2356 }
2357
2358 static inline void sony_send_output_report(struct sony_sc *sc)
2359 {
2360 if (sc->send_output_report)
2361 sc->send_output_report(sc);
2362 }
2363
2364 static void sony_state_worker(struct work_struct *work)
2365 {
2366 struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
2367
2368 sc->send_output_report(sc);
2369 }
2370
2371 static int sony_allocate_output_report(struct sony_sc *sc)
2372 {
2373 if ((sc->quirks & SIXAXIS_CONTROLLER) ||
2374 (sc->quirks & NAVIGATION_CONTROLLER))
2375 sc->output_report_dmabuf =
2376 devm_kmalloc(&sc->hdev->dev,
2377 sizeof(union sixaxis_output_report_01),
2378 GFP_KERNEL);
2379 else if (sc->quirks & DUALSHOCK4_CONTROLLER_BT)
2380 sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
2381 DS4_OUTPUT_REPORT_0x11_SIZE,
2382 GFP_KERNEL);
2383 else if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE))
2384 sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
2385 DS4_OUTPUT_REPORT_0x05_SIZE,
2386 GFP_KERNEL);
2387 else if (sc->quirks & MOTION_CONTROLLER)
2388 sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
2389 MOTION_REPORT_0x02_SIZE,
2390 GFP_KERNEL);
2391 else
2392 return 0;
2393
2394 if (!sc->output_report_dmabuf)
2395 return -ENOMEM;
2396
2397 return 0;
2398 }
2399
2400 #ifdef CONFIG_SONY_FF
2401 static int sony_play_effect(struct input_dev *dev, void *data,
2402 struct ff_effect *effect)
2403 {
2404 struct hid_device *hid = input_get_drvdata(dev);
2405 struct sony_sc *sc = hid_get_drvdata(hid);
2406
2407 if (effect->type != FF_RUMBLE)
2408 return 0;
2409
2410 sc->left = effect->u.rumble.strong_magnitude / 256;
2411 sc->right = effect->u.rumble.weak_magnitude / 256;
2412
2413 sony_schedule_work(sc, SONY_WORKER_STATE);
2414 return 0;
2415 }
2416
2417 static int sony_init_ff(struct sony_sc *sc)
2418 {
2419 struct hid_input *hidinput;
2420 struct input_dev *input_dev;
2421
2422 if (list_empty(&sc->hdev->inputs)) {
2423 hid_err(sc->hdev, "no inputs found\n");
2424 return -ENODEV;
2425 }
2426 hidinput = list_entry(sc->hdev->inputs.next, struct hid_input, list);
2427 input_dev = hidinput->input;
2428
2429 input_set_capability(input_dev, EV_FF, FF_RUMBLE);
2430 return input_ff_create_memless(input_dev, NULL, sony_play_effect);
2431 }
2432
2433 #else
2434 static int sony_init_ff(struct sony_sc *sc)
2435 {
2436 return 0;
2437 }
2438
2439 #endif
2440
2441 static int sony_battery_get_property(struct power_supply *psy,
2442 enum power_supply_property psp,
2443 union power_supply_propval *val)
2444 {
2445 struct sony_sc *sc = power_supply_get_drvdata(psy);
2446 unsigned long flags;
2447 int ret = 0;
2448 u8 battery_capacity;
2449 int battery_status;
2450
2451 spin_lock_irqsave(&sc->lock, flags);
2452 battery_capacity = sc->battery_capacity;
2453 battery_status = sc->battery_status;
2454 spin_unlock_irqrestore(&sc->lock, flags);
2455
2456 switch (psp) {
2457 case POWER_SUPPLY_PROP_PRESENT:
2458 val->intval = 1;
2459 break;
2460 case POWER_SUPPLY_PROP_SCOPE:
2461 val->intval = POWER_SUPPLY_SCOPE_DEVICE;
2462 break;
2463 case POWER_SUPPLY_PROP_CAPACITY:
2464 val->intval = battery_capacity;
2465 break;
2466 case POWER_SUPPLY_PROP_STATUS:
2467 val->intval = battery_status;
2468 break;
2469 default:
2470 ret = -EINVAL;
2471 break;
2472 }
2473 return ret;
2474 }
2475
2476 static int sony_battery_probe(struct sony_sc *sc, int append_dev_id)
2477 {
2478 const char *battery_str_fmt = append_dev_id ?
2479 "sony_controller_battery_%pMR_%i" :
2480 "sony_controller_battery_%pMR";
2481 struct power_supply_config psy_cfg = { .drv_data = sc, };
2482 struct hid_device *hdev = sc->hdev;
2483 int ret;
2484
2485
2486
2487
2488
2489 sc->battery_capacity = 100;
2490
2491 sc->battery_desc.properties = sony_battery_props;
2492 sc->battery_desc.num_properties = ARRAY_SIZE(sony_battery_props);
2493 sc->battery_desc.get_property = sony_battery_get_property;
2494 sc->battery_desc.type = POWER_SUPPLY_TYPE_BATTERY;
2495 sc->battery_desc.use_for_apm = 0;
2496 sc->battery_desc.name = devm_kasprintf(&hdev->dev, GFP_KERNEL,
2497 battery_str_fmt, sc->mac_address, sc->device_id);
2498 if (!sc->battery_desc.name)
2499 return -ENOMEM;
2500
2501 sc->battery = devm_power_supply_register(&hdev->dev, &sc->battery_desc,
2502 &psy_cfg);
2503 if (IS_ERR(sc->battery)) {
2504 ret = PTR_ERR(sc->battery);
2505 hid_err(hdev, "Unable to register battery device\n");
2506 return ret;
2507 }
2508
2509 power_supply_powers(sc->battery, &hdev->dev);
2510 return 0;
2511 }
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524 static inline int sony_compare_connection_type(struct sony_sc *sc0,
2525 struct sony_sc *sc1)
2526 {
2527 const int sc0_not_bt = !(sc0->quirks & SONY_BT_DEVICE);
2528 const int sc1_not_bt = !(sc1->quirks & SONY_BT_DEVICE);
2529
2530 return sc0_not_bt == sc1_not_bt;
2531 }
2532
2533 static int sony_check_add_dev_list(struct sony_sc *sc)
2534 {
2535 struct sony_sc *entry;
2536 unsigned long flags;
2537 int ret;
2538
2539 spin_lock_irqsave(&sony_dev_list_lock, flags);
2540
2541 list_for_each_entry(entry, &sony_device_list, list_node) {
2542 ret = memcmp(sc->mac_address, entry->mac_address,
2543 sizeof(sc->mac_address));
2544 if (!ret) {
2545 if (sony_compare_connection_type(sc, entry)) {
2546 ret = 1;
2547 } else {
2548 ret = -EEXIST;
2549 hid_info(sc->hdev,
2550 "controller with MAC address %pMR already connected\n",
2551 sc->mac_address);
2552 }
2553 goto unlock;
2554 }
2555 }
2556
2557 ret = 0;
2558 list_add(&(sc->list_node), &sony_device_list);
2559
2560 unlock:
2561 spin_unlock_irqrestore(&sony_dev_list_lock, flags);
2562 return ret;
2563 }
2564
2565 static void sony_remove_dev_list(struct sony_sc *sc)
2566 {
2567 unsigned long flags;
2568
2569 if (sc->list_node.next) {
2570 spin_lock_irqsave(&sony_dev_list_lock, flags);
2571 list_del(&(sc->list_node));
2572 spin_unlock_irqrestore(&sony_dev_list_lock, flags);
2573 }
2574 }
2575
2576 static int sony_get_bt_devaddr(struct sony_sc *sc)
2577 {
2578 int ret;
2579
2580
2581 ret = strlen(sc->hdev->uniq);
2582 if (ret != 17)
2583 return -EINVAL;
2584
2585 ret = sscanf(sc->hdev->uniq,
2586 "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
2587 &sc->mac_address[5], &sc->mac_address[4], &sc->mac_address[3],
2588 &sc->mac_address[2], &sc->mac_address[1], &sc->mac_address[0]);
2589
2590 if (ret != 6)
2591 return -EINVAL;
2592
2593 return 0;
2594 }
2595
2596 static int sony_check_add(struct sony_sc *sc)
2597 {
2598 u8 *buf = NULL;
2599 int n, ret;
2600
2601 if ((sc->quirks & DUALSHOCK4_CONTROLLER_BT) ||
2602 (sc->quirks & MOTION_CONTROLLER_BT) ||
2603 (sc->quirks & NAVIGATION_CONTROLLER_BT) ||
2604 (sc->quirks & SIXAXIS_CONTROLLER_BT)) {
2605
2606
2607
2608
2609
2610
2611 if (sony_get_bt_devaddr(sc) < 0) {
2612 hid_warn(sc->hdev, "UNIQ does not contain a MAC address; duplicate check skipped\n");
2613 return 0;
2614 }
2615 } else if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE)) {
2616 buf = kmalloc(DS4_FEATURE_REPORT_0x81_SIZE, GFP_KERNEL);
2617 if (!buf)
2618 return -ENOMEM;
2619
2620
2621
2622
2623
2624
2625 ret = hid_hw_raw_request(sc->hdev, 0x81, buf,
2626 DS4_FEATURE_REPORT_0x81_SIZE, HID_FEATURE_REPORT,
2627 HID_REQ_GET_REPORT);
2628
2629 if (ret != DS4_FEATURE_REPORT_0x81_SIZE) {
2630 hid_err(sc->hdev, "failed to retrieve feature report 0x81 with the DualShock 4 MAC address\n");
2631 ret = ret < 0 ? ret : -EINVAL;
2632 goto out_free;
2633 }
2634
2635 memcpy(sc->mac_address, &buf[1], sizeof(sc->mac_address));
2636
2637 snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq),
2638 "%pMR", sc->mac_address);
2639 } else if ((sc->quirks & SIXAXIS_CONTROLLER_USB) ||
2640 (sc->quirks & NAVIGATION_CONTROLLER_USB)) {
2641 buf = kmalloc(SIXAXIS_REPORT_0xF2_SIZE, GFP_KERNEL);
2642 if (!buf)
2643 return -ENOMEM;
2644
2645
2646
2647
2648
2649
2650 ret = hid_hw_raw_request(sc->hdev, 0xf2, buf,
2651 SIXAXIS_REPORT_0xF2_SIZE, HID_FEATURE_REPORT,
2652 HID_REQ_GET_REPORT);
2653
2654 if (ret != SIXAXIS_REPORT_0xF2_SIZE) {
2655 hid_err(sc->hdev, "failed to retrieve feature report 0xf2 with the Sixaxis MAC address\n");
2656 ret = ret < 0 ? ret : -EINVAL;
2657 goto out_free;
2658 }
2659
2660
2661
2662
2663
2664 for (n = 0; n < 6; n++)
2665 sc->mac_address[5-n] = buf[4+n];
2666
2667 snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq),
2668 "%pMR", sc->mac_address);
2669 } else {
2670 return 0;
2671 }
2672
2673 ret = sony_check_add_dev_list(sc);
2674
2675 out_free:
2676
2677 kfree(buf);
2678
2679 return ret;
2680 }
2681
2682 static int sony_set_device_id(struct sony_sc *sc)
2683 {
2684 int ret;
2685
2686
2687
2688
2689
2690 if ((sc->quirks & SIXAXIS_CONTROLLER) ||
2691 (sc->quirks & DUALSHOCK4_CONTROLLER)) {
2692 ret = ida_simple_get(&sony_device_id_allocator, 0, 0,
2693 GFP_KERNEL);
2694 if (ret < 0) {
2695 sc->device_id = -1;
2696 return ret;
2697 }
2698 sc->device_id = ret;
2699 } else {
2700 sc->device_id = -1;
2701 }
2702
2703 return 0;
2704 }
2705
2706 static void sony_release_device_id(struct sony_sc *sc)
2707 {
2708 if (sc->device_id >= 0) {
2709 ida_simple_remove(&sony_device_id_allocator, sc->device_id);
2710 sc->device_id = -1;
2711 }
2712 }
2713
2714 static inline void sony_init_output_report(struct sony_sc *sc,
2715 void (*send_output_report)(struct sony_sc *))
2716 {
2717 sc->send_output_report = send_output_report;
2718
2719 if (!sc->state_worker_initialized)
2720 INIT_WORK(&sc->state_worker, sony_state_worker);
2721
2722 sc->state_worker_initialized = 1;
2723 }
2724
2725 static inline void sony_cancel_work_sync(struct sony_sc *sc)
2726 {
2727 unsigned long flags;
2728
2729 if (sc->hotplug_worker_initialized)
2730 cancel_work_sync(&sc->hotplug_worker);
2731 if (sc->state_worker_initialized) {
2732 spin_lock_irqsave(&sc->lock, flags);
2733 sc->state_worker_initialized = 0;
2734 spin_unlock_irqrestore(&sc->lock, flags);
2735 cancel_work_sync(&sc->state_worker);
2736 }
2737 }
2738
2739 static int sony_input_configured(struct hid_device *hdev,
2740 struct hid_input *hidinput)
2741 {
2742 struct sony_sc *sc = hid_get_drvdata(hdev);
2743 int append_dev_id;
2744 int ret;
2745
2746 ret = sony_set_device_id(sc);
2747 if (ret < 0) {
2748 hid_err(hdev, "failed to allocate the device id\n");
2749 goto err_stop;
2750 }
2751
2752 ret = append_dev_id = sony_check_add(sc);
2753 if (ret < 0)
2754 goto err_stop;
2755
2756 ret = sony_allocate_output_report(sc);
2757 if (ret < 0) {
2758 hid_err(hdev, "failed to allocate the output report buffer\n");
2759 goto err_stop;
2760 }
2761
2762 if (sc->quirks & NAVIGATION_CONTROLLER_USB) {
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779 hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2780 hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID;
2781 sc->defer_initialization = 1;
2782
2783 ret = sixaxis_set_operational_usb(hdev);
2784 if (ret < 0) {
2785 hid_err(hdev, "Failed to set controller into operational mode\n");
2786 goto err_stop;
2787 }
2788
2789 sony_init_output_report(sc, sixaxis_send_output_report);
2790 } else if (sc->quirks & NAVIGATION_CONTROLLER_BT) {
2791
2792
2793
2794
2795 hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2796
2797 ret = sixaxis_set_operational_bt(hdev);
2798 if (ret < 0) {
2799 hid_err(hdev, "Failed to set controller into operational mode\n");
2800 goto err_stop;
2801 }
2802
2803 sony_init_output_report(sc, sixaxis_send_output_report);
2804 } else if (sc->quirks & SIXAXIS_CONTROLLER_USB) {
2805
2806
2807
2808
2809
2810
2811 hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2812 hdev->quirks |= HID_QUIRK_SKIP_OUTPUT_REPORT_ID;
2813 sc->defer_initialization = 1;
2814
2815 ret = sixaxis_set_operational_usb(hdev);
2816 if (ret < 0) {
2817 hid_err(hdev, "Failed to set controller into operational mode\n");
2818 goto err_stop;
2819 }
2820
2821 ret = sony_register_sensors(sc);
2822 if (ret) {
2823 hid_err(sc->hdev,
2824 "Unable to initialize motion sensors: %d\n", ret);
2825 goto err_stop;
2826 }
2827
2828 sony_init_output_report(sc, sixaxis_send_output_report);
2829 } else if (sc->quirks & SIXAXIS_CONTROLLER_BT) {
2830
2831
2832
2833
2834 hdev->quirks |= HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP;
2835
2836 ret = sixaxis_set_operational_bt(hdev);
2837 if (ret < 0) {
2838 hid_err(hdev, "Failed to set controller into operational mode\n");
2839 goto err_stop;
2840 }
2841
2842 ret = sony_register_sensors(sc);
2843 if (ret) {
2844 hid_err(sc->hdev,
2845 "Unable to initialize motion sensors: %d\n", ret);
2846 goto err_stop;
2847 }
2848
2849 sony_init_output_report(sc, sixaxis_send_output_report);
2850 } else if (sc->quirks & DUALSHOCK4_CONTROLLER) {
2851 ret = dualshock4_get_calibration_data(sc);
2852 if (ret < 0) {
2853 hid_err(hdev, "Failed to get calibration data from Dualshock 4\n");
2854 goto err_stop;
2855 }
2856
2857 ret = dualshock4_get_version_info(sc);
2858 if (ret < 0) {
2859 hid_err(sc->hdev, "Failed to get version data from Dualshock 4\n");
2860 goto err_stop;
2861 }
2862
2863 ret = device_create_file(&sc->hdev->dev, &dev_attr_firmware_version);
2864 if (ret) {
2865 hid_err(sc->hdev, "can't create sysfs firmware_version attribute err: %d\n", ret);
2866 goto err_stop;
2867 }
2868 sc->fw_version_created = true;
2869
2870 ret = device_create_file(&sc->hdev->dev, &dev_attr_hardware_version);
2871 if (ret) {
2872 hid_err(sc->hdev, "can't create sysfs hardware_version attribute err: %d\n", ret);
2873 goto err_stop;
2874 }
2875 sc->hw_version_created = true;
2876
2877
2878
2879
2880
2881 ret = sony_register_touchpad(sc, 2, 1920, 942, 0, 0, 0);
2882 if (ret) {
2883 hid_err(sc->hdev,
2884 "Unable to initialize multi-touch slots: %d\n",
2885 ret);
2886 goto err_stop;
2887 }
2888
2889 ret = sony_register_sensors(sc);
2890 if (ret) {
2891 hid_err(sc->hdev,
2892 "Unable to initialize motion sensors: %d\n", ret);
2893 goto err_stop;
2894 }
2895
2896 if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) {
2897 sc->ds4_bt_poll_interval = DS4_BT_DEFAULT_POLL_INTERVAL_MS;
2898 ret = device_create_file(&sc->hdev->dev, &dev_attr_bt_poll_interval);
2899 if (ret)
2900 hid_warn(sc->hdev,
2901 "can't create sysfs bt_poll_interval attribute err: %d\n",
2902 ret);
2903 }
2904
2905 if (sc->quirks & DUALSHOCK4_DONGLE) {
2906 INIT_WORK(&sc->hotplug_worker, dualshock4_calibration_work);
2907 sc->hotplug_worker_initialized = 1;
2908 sc->ds4_dongle_state = DONGLE_DISCONNECTED;
2909 }
2910
2911 sony_init_output_report(sc, dualshock4_send_output_report);
2912 } else if (sc->quirks & NSG_MRXU_REMOTE) {
2913
2914
2915
2916
2917 ret = sony_register_touchpad(sc, 2,
2918 NSG_MRXU_MAX_X, NSG_MRXU_MAX_Y, 15, 15, 1);
2919 if (ret) {
2920 hid_err(sc->hdev,
2921 "Unable to initialize multi-touch slots: %d\n",
2922 ret);
2923 goto err_stop;
2924 }
2925
2926 } else if (sc->quirks & MOTION_CONTROLLER) {
2927 sony_init_output_report(sc, motion_send_output_report);
2928 } else {
2929 ret = 0;
2930 }
2931
2932 if (sc->quirks & SONY_LED_SUPPORT) {
2933 ret = sony_leds_init(sc);
2934 if (ret < 0)
2935 goto err_stop;
2936 }
2937
2938 if (sc->quirks & SONY_BATTERY_SUPPORT) {
2939 ret = sony_battery_probe(sc, append_dev_id);
2940 if (ret < 0)
2941 goto err_stop;
2942
2943
2944 ret = hid_hw_open(hdev);
2945 if (ret < 0) {
2946 hid_err(hdev, "hw open failed\n");
2947 goto err_stop;
2948 }
2949 }
2950
2951 if (sc->quirks & SONY_FF_SUPPORT) {
2952 ret = sony_init_ff(sc);
2953 if (ret < 0)
2954 goto err_close;
2955 }
2956
2957 return 0;
2958 err_close:
2959 hid_hw_close(hdev);
2960 err_stop:
2961
2962
2963
2964
2965 if (sc->ds4_bt_poll_interval)
2966 device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval);
2967 if (sc->fw_version_created)
2968 device_remove_file(&sc->hdev->dev, &dev_attr_firmware_version);
2969 if (sc->hw_version_created)
2970 device_remove_file(&sc->hdev->dev, &dev_attr_hardware_version);
2971 sony_cancel_work_sync(sc);
2972 sony_remove_dev_list(sc);
2973 sony_release_device_id(sc);
2974 return ret;
2975 }
2976
2977 static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
2978 {
2979 int ret;
2980 unsigned long quirks = id->driver_data;
2981 struct sony_sc *sc;
2982 struct usb_device *usbdev;
2983 unsigned int connect_mask = HID_CONNECT_DEFAULT;
2984
2985 if (!strcmp(hdev->name, "FutureMax Dance Mat"))
2986 quirks |= FUTUREMAX_DANCE_MAT;
2987
2988 if (!strcmp(hdev->name, "SHANWAN PS3 GamePad") ||
2989 !strcmp(hdev->name, "ShanWan PS(R) Ga`epad"))
2990 quirks |= SHANWAN_GAMEPAD;
2991
2992 sc = devm_kzalloc(&hdev->dev, sizeof(*sc), GFP_KERNEL);
2993 if (sc == NULL) {
2994 hid_err(hdev, "can't alloc sony descriptor\n");
2995 return -ENOMEM;
2996 }
2997
2998 spin_lock_init(&sc->lock);
2999
3000 sc->quirks = quirks;
3001 hid_set_drvdata(hdev, sc);
3002 sc->hdev = hdev;
3003
3004 ret = hid_parse(hdev);
3005 if (ret) {
3006 hid_err(hdev, "parse failed\n");
3007 return ret;
3008 }
3009
3010 if (sc->quirks & VAIO_RDESC_CONSTANT)
3011 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
3012 else if (sc->quirks & SIXAXIS_CONTROLLER)
3013 connect_mask |= HID_CONNECT_HIDDEV_FORCE;
3014
3015
3016
3017
3018
3019
3020
3021 if (sc->quirks & (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER))
3022 hdev->version |= 0x8000;
3023
3024 ret = hid_hw_start(hdev, connect_mask);
3025 if (ret) {
3026 hid_err(hdev, "hw start failed\n");
3027 return ret;
3028 }
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038 if (!(hdev->claimed & HID_CLAIMED_INPUT)) {
3039 hid_err(hdev, "failed to claim input\n");
3040 ret = -ENODEV;
3041 goto err;
3042 }
3043
3044 if (sc->quirks & (GHL_GUITAR_PS3WIIU | GHL_GUITAR_PS4)) {
3045 if (!hid_is_usb(hdev)) {
3046 ret = -EINVAL;
3047 goto err;
3048 }
3049
3050 usbdev = to_usb_device(sc->hdev->dev.parent->parent);
3051
3052 sc->ghl_urb = usb_alloc_urb(0, GFP_ATOMIC);
3053 if (!sc->ghl_urb) {
3054 ret = -ENOMEM;
3055 goto err;
3056 }
3057
3058 if (sc->quirks & GHL_GUITAR_PS3WIIU)
3059 ret = ghl_init_urb(sc, usbdev, ghl_ps3wiiu_magic_data,
3060 ARRAY_SIZE(ghl_ps3wiiu_magic_data));
3061 else if (sc->quirks & GHL_GUITAR_PS4)
3062 ret = ghl_init_urb(sc, usbdev, ghl_ps4_magic_data,
3063 ARRAY_SIZE(ghl_ps4_magic_data));
3064 if (ret) {
3065 hid_err(hdev, "error preparing URB\n");
3066 goto err;
3067 }
3068
3069 timer_setup(&sc->ghl_poke_timer, ghl_magic_poke, 0);
3070 mod_timer(&sc->ghl_poke_timer,
3071 jiffies + GHL_GUITAR_POKE_INTERVAL*HZ);
3072 }
3073
3074 return ret;
3075
3076 err:
3077 hid_hw_stop(hdev);
3078 return ret;
3079 }
3080
3081 static void sony_remove(struct hid_device *hdev)
3082 {
3083 struct sony_sc *sc = hid_get_drvdata(hdev);
3084
3085 if (sc->quirks & (GHL_GUITAR_PS3WIIU | GHL_GUITAR_PS4)) {
3086 del_timer_sync(&sc->ghl_poke_timer);
3087 usb_free_urb(sc->ghl_urb);
3088 }
3089
3090 hid_hw_close(hdev);
3091
3092 if (sc->quirks & DUALSHOCK4_CONTROLLER_BT)
3093 device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval);
3094
3095 if (sc->fw_version_created)
3096 device_remove_file(&sc->hdev->dev, &dev_attr_firmware_version);
3097
3098 if (sc->hw_version_created)
3099 device_remove_file(&sc->hdev->dev, &dev_attr_hardware_version);
3100
3101 sony_cancel_work_sync(sc);
3102
3103 sony_remove_dev_list(sc);
3104
3105 sony_release_device_id(sc);
3106
3107 hid_hw_stop(hdev);
3108 }
3109
3110 #ifdef CONFIG_PM
3111
3112 static int sony_suspend(struct hid_device *hdev, pm_message_t message)
3113 {
3114 #ifdef CONFIG_SONY_FF
3115
3116
3117 if (SONY_FF_SUPPORT) {
3118 struct sony_sc *sc = hid_get_drvdata(hdev);
3119
3120 sc->left = sc->right = 0;
3121 sony_send_output_report(sc);
3122 }
3123
3124 #endif
3125 return 0;
3126 }
3127
3128 static int sony_resume(struct hid_device *hdev)
3129 {
3130 struct sony_sc *sc = hid_get_drvdata(hdev);
3131
3132
3133
3134
3135
3136 if ((sc->quirks & SIXAXIS_CONTROLLER_USB) ||
3137 (sc->quirks & NAVIGATION_CONTROLLER_USB)) {
3138 sixaxis_set_operational_usb(sc->hdev);
3139 sc->defer_initialization = 1;
3140 }
3141
3142 return 0;
3143 }
3144
3145 #endif
3146
3147 static const struct hid_device_id sony_devices[] = {
3148 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
3149 .driver_data = SIXAXIS_CONTROLLER_USB },
3150 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER),
3151 .driver_data = NAVIGATION_CONTROLLER_USB },
3152 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER),
3153 .driver_data = NAVIGATION_CONTROLLER_BT },
3154 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER),
3155 .driver_data = MOTION_CONTROLLER_USB },
3156 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER),
3157 .driver_data = MOTION_CONTROLLER_BT },
3158 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
3159 .driver_data = SIXAXIS_CONTROLLER_BT },
3160 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
3161 .driver_data = VAIO_RDESC_CONSTANT },
3162 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE),
3163 .driver_data = VAIO_RDESC_CONSTANT },
3164
3165
3166
3167
3168 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER),
3169 .driver_data = BUZZ_CONTROLLER },
3170 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER),
3171 .driver_data = BUZZ_CONTROLLER },
3172
3173 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE),
3174 .driver_data = PS3REMOTE },
3175
3176 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3),
3177 .driver_data = PS3REMOTE },
3178
3179 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE),
3180 .driver_data = PS3REMOTE },
3181
3182 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
3183 .driver_data = DUALSHOCK4_CONTROLLER_USB },
3184 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
3185 .driver_data = DUALSHOCK4_CONTROLLER_BT },
3186 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2),
3187 .driver_data = DUALSHOCK4_CONTROLLER_USB },
3188 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2),
3189 .driver_data = DUALSHOCK4_CONTROLLER_BT },
3190 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE),
3191 .driver_data = DUALSHOCK4_DONGLE },
3192
3193 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER),
3194 .driver_data = SIXAXIS_CONTROLLER_USB | SINO_LITE_CONTROLLER },
3195
3196 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR5U_REMOTE),
3197 .driver_data = NSG_MR5U_REMOTE_BT },
3198
3199 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_NSG_MR7U_REMOTE),
3200 .driver_data = NSG_MR7U_REMOTE_BT },
3201
3202 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3WIIU_GHLIVE_DONGLE),
3203 .driver_data = GHL_GUITAR_PS3WIIU | GH_GUITAR_CONTROLLER },
3204
3205 { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_GUITAR_DONGLE),
3206 .driver_data = GH_GUITAR_CONTROLLER },
3207
3208 { HID_USB_DEVICE(USB_VENDOR_ID_SONY_RHYTHM, USB_DEVICE_ID_SONY_PS3_GUITAR_DONGLE),
3209 .driver_data = GH_GUITAR_CONTROLLER },
3210
3211 { HID_USB_DEVICE(USB_VENDOR_ID_REDOCTANE, USB_DEVICE_ID_REDOCTANE_PS4_GHLIVE_DONGLE),
3212 .driver_data = GHL_GUITAR_PS4 | GH_GUITAR_CONTROLLER },
3213 { }
3214 };
3215 MODULE_DEVICE_TABLE(hid, sony_devices);
3216
3217 static struct hid_driver sony_driver = {
3218 .name = "sony",
3219 .id_table = sony_devices,
3220 .input_mapping = sony_mapping,
3221 .input_configured = sony_input_configured,
3222 .probe = sony_probe,
3223 .remove = sony_remove,
3224 .report_fixup = sony_report_fixup,
3225 .raw_event = sony_raw_event,
3226
3227 #ifdef CONFIG_PM
3228 .suspend = sony_suspend,
3229 .resume = sony_resume,
3230 .reset_resume = sony_resume,
3231 #endif
3232 };
3233
3234 static int __init sony_init(void)
3235 {
3236 dbg_hid("Sony:%s\n", __func__);
3237
3238 return hid_register_driver(&sony_driver);
3239 }
3240
3241 static void __exit sony_exit(void)
3242 {
3243 dbg_hid("Sony:%s\n", __func__);
3244
3245 hid_unregister_driver(&sony_driver);
3246 ida_destroy(&sony_device_id_allocator);
3247 }
3248 module_init(sony_init);
3249 module_exit(sony_exit);
3250
3251 MODULE_LICENSE("GPL");