diff options
-rw-r--r-- | drivers/hid/hid-sony.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c index 0111d3028c4b..526705fac82c 100644 --- a/drivers/hid/hid-sony.c +++ b/drivers/hid/hid-sony.c | |||
@@ -44,12 +44,12 @@ | |||
44 | #define DUALSHOCK4_CONTROLLER_USB BIT(5) | 44 | #define DUALSHOCK4_CONTROLLER_USB BIT(5) |
45 | #define DUALSHOCK4_CONTROLLER_BT BIT(6) | 45 | #define DUALSHOCK4_CONTROLLER_BT BIT(6) |
46 | 46 | ||
47 | #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT) | ||
47 | #define DUALSHOCK4_CONTROLLER (DUALSHOCK4_CONTROLLER_USB |\ | 48 | #define DUALSHOCK4_CONTROLLER (DUALSHOCK4_CONTROLLER_USB |\ |
48 | DUALSHOCK4_CONTROLLER_BT) | 49 | DUALSHOCK4_CONTROLLER_BT) |
49 | #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER_USB | BUZZ_CONTROLLER |\ | 50 | #define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER | BUZZ_CONTROLLER |\ |
50 | DUALSHOCK4_CONTROLLER) | ||
51 | #define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT |\ | ||
52 | DUALSHOCK4_CONTROLLER) | 51 | DUALSHOCK4_CONTROLLER) |
52 | #define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER | DUALSHOCK4_CONTROLLER) | ||
53 | 53 | ||
54 | #define MAX_LEDS 4 | 54 | #define MAX_LEDS 4 |
55 | 55 | ||
@@ -935,8 +935,7 @@ static int sony_raw_event(struct hid_device *hdev, struct hid_report *report, | |||
935 | /* Sixaxis HID report has acclerometers/gyro with MSByte first, this | 935 | /* Sixaxis HID report has acclerometers/gyro with MSByte first, this |
936 | * has to be BYTE_SWAPPED before passing up to joystick interface | 936 | * has to be BYTE_SWAPPED before passing up to joystick interface |
937 | */ | 937 | */ |
938 | if ((sc->quirks & (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)) && | 938 | if ((sc->quirks & SIXAXIS_CONTROLLER) && rd[0] == 0x01 && size == 49) { |
939 | rd[0] == 0x01 && size == 49) { | ||
940 | swap(rd[41], rd[42]); | 939 | swap(rd[41], rd[42]); |
941 | swap(rd[43], rd[44]); | 940 | swap(rd[43], rd[44]); |
942 | swap(rd[45], rd[46]); | 941 | swap(rd[45], rd[46]); |
@@ -1096,8 +1095,7 @@ static void sony_set_leds(struct hid_device *hdev, const __u8 *leds, int count) | |||
1096 | 1095 | ||
1097 | if (drv_data->quirks & BUZZ_CONTROLLER && count == 4) { | 1096 | if (drv_data->quirks & BUZZ_CONTROLLER && count == 4) { |
1098 | buzz_set_leds(hdev, leds); | 1097 | buzz_set_leds(hdev, leds); |
1099 | } else if ((drv_data->quirks & SIXAXIS_CONTROLLER_USB) || | 1098 | } else { |
1100 | (drv_data->quirks & DUALSHOCK4_CONTROLLER)) { | ||
1101 | for (n = 0; n < count; n++) | 1099 | for (n = 0; n < count; n++) |
1102 | drv_data->led_state[n] = leds[n]; | 1100 | drv_data->led_state[n] = leds[n]; |
1103 | schedule_work(&drv_data->state_worker); | 1101 | schedule_work(&drv_data->state_worker); |
@@ -1285,7 +1283,11 @@ static void sixaxis_state_worker(struct work_struct *work) | |||
1285 | buf[10] |= sc->led_state[2] << 3; | 1283 | buf[10] |= sc->led_state[2] << 3; |
1286 | buf[10] |= sc->led_state[3] << 4; | 1284 | buf[10] |= sc->led_state[3] << 4; |
1287 | 1285 | ||
1288 | hid_output_raw_report(sc->hdev, buf, sizeof(buf), HID_OUTPUT_REPORT); | 1286 | if (sc->quirks & SIXAXIS_CONTROLLER_USB) |
1287 | hid_output_raw_report(sc->hdev, buf, sizeof(buf), HID_OUTPUT_REPORT); | ||
1288 | else | ||
1289 | hid_hw_raw_request(sc->hdev, 0x01, buf, sizeof(buf), | ||
1290 | HID_OUTPUT_REPORT, HID_REQ_SET_REPORT); | ||
1289 | } | 1291 | } |
1290 | 1292 | ||
1291 | static void dualshock4_state_worker(struct work_struct *work) | 1293 | static void dualshock4_state_worker(struct work_struct *work) |
@@ -1520,10 +1522,10 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
1520 | hdev->hid_output_raw_report = sixaxis_usb_output_raw_report; | 1522 | hdev->hid_output_raw_report = sixaxis_usb_output_raw_report; |
1521 | ret = sixaxis_set_operational_usb(hdev); | 1523 | ret = sixaxis_set_operational_usb(hdev); |
1522 | INIT_WORK(&sc->state_worker, sixaxis_state_worker); | 1524 | INIT_WORK(&sc->state_worker, sixaxis_state_worker); |
1523 | } | 1525 | } else if (sc->quirks & SIXAXIS_CONTROLLER_BT) { |
1524 | else if (sc->quirks & SIXAXIS_CONTROLLER_BT) | ||
1525 | ret = sixaxis_set_operational_bt(hdev); | 1526 | ret = sixaxis_set_operational_bt(hdev); |
1526 | else if (sc->quirks & DUALSHOCK4_CONTROLLER) { | 1527 | INIT_WORK(&sc->state_worker, sixaxis_state_worker); |
1528 | } else if (sc->quirks & DUALSHOCK4_CONTROLLER) { | ||
1527 | if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) { | 1529 | if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) { |
1528 | ret = dualshock4_set_operational_bt(hdev); | 1530 | ret = dualshock4_set_operational_bt(hdev); |
1529 | if (ret < 0) { | 1531 | if (ret < 0) { |