From patchwork Sat Jun 4 09:32:36 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: simon@mungewell.org X-Patchwork-Id: 860752 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter2.kernel.org (8.14.4/8.14.4) with ESMTP id p583uQZ3007207 for ; Wed, 8 Jun 2011 03:56:28 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753826Ab1FHDYp (ORCPT ); Tue, 7 Jun 2011 23:24:45 -0400 Received: from idcmail-mo1so.shaw.ca ([24.71.223.10]:6494 "EHLO idcmail-mo1so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753610Ab1FHDY1 (ORCPT ); Tue, 7 Jun 2011 23:24:27 -0400 Received: from pd2ml2so-ssvc.prod.shaw.ca ([10.0.141.134]) by pd4mo1so-svcs.prod.shaw.ca with ESMTP; 07 Jun 2011 21:24:27 -0600 X-Cloudmark-SP-Filtered: true X-Cloudmark-SP-Result: v=1.1 cv=I0jFHxriRJwyplOnjK2nOSNCO7GacXBAI5CCNqI8fuI= c=1 sm=1 a=Bzf2nRS5QawA:10 a=3762yOXauukA:10 a=BLceEmwcHowA:10 a=oaxjXb+On79cRBAvziGSJw==:17 a=VwQbUJbxAAAA:8 a=pGLkceISAAAA:8 a=47LbCVvxAAAA:8 a=bl19pPN5vlf71qj6r6YA:9 a=SZliRxb1n2QQrkIOok0A:7 a=MSl-tDqOz04A:10 a=QhNQsjeWOoAA:10 a=HpAAvcLHHh0Zw7uRqdWCyQ==:117 Received: from unknown (HELO localhost.localdomain) ([70.72.59.135]) by pd2ml2so-dmz.prod.shaw.ca with ESMTP; 07 Jun 2011 21:24:26 -0600 From: Simon Wood To: linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Jiri Kosina , Michael Bauer , Marcin Tolysz , Simon Wood Subject: [PATCHv4 2/3] sony_ff_byteswap_accelerometer Date: Sat, 4 Jun 2011 02:32:36 -0700 Message-Id: <1307179957-24458-2-git-send-email-simon@mungewell.org> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1307179957-24458-1-git-send-email-simon@mungewell.org> References: <1307179957-24458-1-git-send-email-simon@mungewell.org> Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter2.kernel.org [140.211.167.43]); Wed, 08 Jun 2011 03:56:28 +0000 (UTC) The accelerometers/gyro on the sixaxis are reported in the wrong endianness (ie. not compatible with HID), so this patch intercepts the report and swaps the appropriate bytes over. Accelerometers are scaled with a nominal value of +/-4000 = 1G, maximum value would be around +/-32768 = 8G. Gyro on my device always reports -32768, might need some calibration set within the controller. Fix extracted from previous patch submission: https://patchwork.kernel.org/patch/95212/ Signed-off-by: Marcin Tolysz Signed-off-by: Simon Wood --- drivers/hid/hid-sony.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c index 5c930dc..f219746 100644 --- a/drivers/hid/hid-sony.c +++ b/drivers/hid/hid-sony.c @@ -57,6 +57,24 @@ static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc, return rdesc; } +/* Sixaxis HID report has acclerometers/gyro with MSByte first, this has + * to be BYTE_SWAPPED before passing up to joystick interface + */ +static int sony_raw_event(struct hid_device *hdev, struct hid_report *report, __u8 *rd, int size) +{ + struct sony_sc *sc = hid_get_drvdata(hdev); + + if ((sc->quirks & SIXAXIS_CONTROLLER_USB) && + rd[0] == 0x01 && size == 49) { + swap(rd[41], rd[42]); + swap(rd[43], rd[44]); + swap(rd[45], rd[46]); + swap(rd[47], rd[48]); + } + + return 0; +} + /* * The Sony Sixaxis does not handle HID Output Reports on the Interrupt EP * like it should according to usbhid/hid-core.c::usbhid_output_raw_report() @@ -205,6 +223,7 @@ static struct hid_driver sony_driver = { .probe = sony_probe, .remove = sony_remove, .report_fixup = sony_report_fixup, + .raw_event = sony_raw_event }; static int __init sony_init(void)