From patchwork Tue Feb 10 12:52:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lauri Kasanen X-Patchwork-Id: 5806921 X-Patchwork-Delegate: jikos@jikos.cz Return-Path: X-Original-To: patchwork-linux-input@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id D8C98BF440 for ; Tue, 10 Feb 2015 12:50:38 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0752220120 for ; Tue, 10 Feb 2015 12:50:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9C55F20115 for ; Tue, 10 Feb 2015 12:50:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754630AbbBJMuf (ORCPT ); Tue, 10 Feb 2015 07:50:35 -0500 Received: from mout.gmx.net ([212.227.17.21]:50833 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752736AbbBJMuf (ORCPT ); Tue, 10 Feb 2015 07:50:35 -0500 Received: from Valinor ([84.251.16.90]) by mail.gmx.com (mrgmx103) with ESMTPA (Nemesis) id 0MDzGN-1YOfqj3Yv1-00HNaE; Tue, 10 Feb 2015 13:50:31 +0100 Date: Tue, 10 Feb 2015 14:52:52 +0200 From: Lauri Kasanen To: jkosina@suse.cz, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, benjamin.tissoires@gmail.com Cc: ao2@ao2.it, AndrewD207@aol.com Subject: [PATCHv3] HID: sony: Enable Gasia third-party PS3 controllers Message-Id: <20150210145252.d5b86e42.cand@gmx.com> X-Mailer: Sylpheed 3.1.4 (GTK+ 2.18.6; x86_64-unknown-linux-gnu) Mime-Version: 1.0 X-Provags-ID: V03:K0:+EoPXxFMBQL9j4yUKblJzVL1jWKefe8GkH1mgzPhPF4eGSEA47R vsgqtTuOOSmqy0GZlAQ5GgO8kFtt6rbI0Wa3B5nvblSTyl1oej66uzBVRUFNr9Ou2DlJ+1D NVU5wrCBDXI97X0v18QVFoFoVW7F0k5BwZT2dbQStrtLJ+85VFVE2oQ3F6rxLO/G42oUjCy raODhHzRUAjLWt08QCEfQ== X-UI-Out-Filterresults: notjunk:1; Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_HI,T_RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Without this, my "Gasia Co.,Ltd PS(R) Gamepad" would not send any events. Now everything works including the leds. Based on work by Andrew Haines and Antonio Ospite. cc: Antonio Ospite cc: Andrew Haines Signed-off-by: Lauri Kasanen --- drivers/hid/hid-sony.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) v3: - reuse the dummy heap buffer - skip later checks if the earlier ones fail v2: - edited error messages - use output_report diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c index 31e9d25..b0010d9 100644 --- a/drivers/hid/hid-sony.c +++ b/drivers/hid/hid-sony.c @@ -1131,7 +1131,7 @@ static void sony_input_configured(struct hid_device *hdev, static int sixaxis_set_operational_usb(struct hid_device *hdev) { int ret; - char *buf = kmalloc(18, GFP_KERNEL); + char *buf = kmalloc(65, GFP_KERNEL); if (!buf) return -ENOMEM; @@ -1139,9 +1139,29 @@ static int sixaxis_set_operational_usb(struct hid_device *hdev) ret = hid_hw_raw_request(hdev, 0xf2, buf, 17, HID_FEATURE_REPORT, HID_REQ_GET_REPORT); + if (ret < 0) { + hid_err(hdev, "can't set operational mode: step 1\n"); + goto out; + } + + /* + * Some compatible controllers like the Speedlink Strike FX and + * Gasia need another query plus an USB interrupt to get operational. + */ + ret = hid_hw_raw_request(hdev, 0xf5, buf, 64, HID_FEATURE_REPORT, + HID_REQ_GET_REPORT); + + if (ret < 0) { + hid_err(hdev, "can't set operational mode: step 2\n"); + goto out; + } + + ret = hid_hw_output_report(hdev, buf, 1); + if (ret < 0) - hid_err(hdev, "can't set operational mode\n"); + hid_err(hdev, "can't set operational mode: step 3\n"); +out: kfree(buf); return ret;