From 07268918809c00a074e943bda0c183709012130a Mon Sep 17 00:00:00 2001 From: Simon Wood Date: Fri, 10 Jun 2011 12:00:26 +0200 Subject: [PATCH] --- yaml --- r: 256805 b: refs/heads/master c: 61ab44bebdefab296487e7cd723a634849278827 h: refs/heads/master i: 256803: bb268989d41939df0b5dcac1875f2cf965e0cb95 v: v3 --- [refs] | 2 +- trunk/drivers/hid/hid-sony.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index a904ecea83e4..28959cbaacc7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 74bc6953135ae1478acc18046321bfca05b0e823 +refs/heads/master: 61ab44bebdefab296487e7cd723a634849278827 diff --git a/trunk/drivers/hid/hid-sony.c b/trunk/drivers/hid/hid-sony.c index 936c911fdca6..539850769b17 100644 --- a/trunk/drivers/hid/hid-sony.c +++ b/trunk/drivers/hid/hid-sony.c @@ -28,6 +28,12 @@ #define SIXAXIS_CONTROLLER_USB (1 << 1) #define SIXAXIS_CONTROLLER_BT (1 << 2) +static const u8 sixaxis_rdesc_fixup[] = { + 0x95, 0x13, 0x09, 0x01, 0x81, 0x02, 0x95, 0x0C, + 0x81, 0x01, 0x75, 0x10, 0x95, 0x04, 0x26, 0xFF, + 0x03, 0x46, 0xFF, 0x03, 0x09, 0x01, 0x81, 0x02 +}; + struct sony_sc { unsigned long quirks; }; @@ -43,6 +49,15 @@ static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc, hid_info(hdev, "Fixing up Sony Vaio VGX report descriptor\n"); rdesc[55] = 0x06; } + + /* The HID descriptor exposed over BT has a trailing zero byte */ + if ((((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize == 148) || + ((sc->quirks & SIXAXIS_CONTROLLER_BT) && *rsize == 149)) && + rdesc[83] == 0x75) { + hid_info(hdev, "Fixing up Sony Sixaxis report descriptor\n"); + memcpy((void *)&rdesc[83], (void *)&sixaxis_rdesc_fixup, + sizeof(sixaxis_rdesc_fixup)); + } return rdesc; }