|
|
@@ -34,6 +34,8 @@
|
|
|
|
|
|
#include "hid-ids.h"
|
|
|
|
|
|
+#define THRUSTMASTER_DEVICE_ID_2_IN_1_DT 0xb320
|
|
|
+
|
|
|
static const signed short ff_rumble[] = {
|
|
|
FF_RUMBLE,
|
|
|
-1
|
|
|
@@ -88,6 +90,7 @@ static int tmff_play(struct input_dev *dev, void *data,
|
|
|
struct hid_field *ff_field = tmff->ff_field;
|
|
|
int x, y;
|
|
|
int left, right; /* Rumbling */
|
|
|
+ int motor_swap;
|
|
|
|
|
|
switch (effect->type) {
|
|
|
case FF_CONSTANT:
|
|
|
@@ -112,6 +115,13 @@ static int tmff_play(struct input_dev *dev, void *data,
|
|
|
ff_field->logical_minimum,
|
|
|
ff_field->logical_maximum);
|
|
|
|
|
|
+ /* 2-in-1 strong motor is left */
|
|
|
+ if (hid->product == THRUSTMASTER_DEVICE_ID_2_IN_1_DT) {
|
|
|
+ motor_swap = left;
|
|
|
+ left = right;
|
|
|
+ right = motor_swap;
|
|
|
+ }
|
|
|
+
|
|
|
dbg_hid("(left,right)=(%08x, %08x)\n", left, right);
|
|
|
ff_field->value[0] = left;
|
|
|
ff_field->value[1] = right;
|
|
|
@@ -238,6 +248,8 @@ static const struct hid_device_id tm_devices[] = {
|
|
|
.driver_data = (unsigned long)ff_rumble },
|
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304), /* FireStorm Dual Power 2 (and 3) */
|
|
|
.driver_data = (unsigned long)ff_rumble },
|
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, THRUSTMASTER_DEVICE_ID_2_IN_1_DT), /* Dual Trigger 2-in-1 */
|
|
|
+ .driver_data = (unsigned long)ff_rumble },
|
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb323), /* Dual Trigger 3-in-1 (PC Mode) */
|
|
|
.driver_data = (unsigned long)ff_rumble },
|
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb324), /* Dual Trigger 3-in-1 (PS3 Mode) */
|