All of lore.kernel.org
 help / color / mirror / Atom feed
From: liquid <outmatch@gmail.com>
To: linux-input@vger.kernel.org
Cc: Greg KH <gregkh@linuxfoundation.org>,
	Jiri Kosina <jkosina@suse.cz>,
	linux-usb@vger.kernel.org
Subject: HID: sony: Fix SHANWAN PS3 GamePad rumbling on USB again
Date: Fri, 28 Dec 2018 10:26:14 +0800	[thread overview]
Message-ID: <CAPsNqc427=u2B02fPpi3Dtw-K7dtSGfphq3qi-PeBNTRRmDVTg@mail.gmail.com> (raw)

From 6323ffb83e23eab9a08208063f9dba27c6a0d228 Mon Sep 17 00:00:00 2001
From: Hongye Yuan <outmatch@gmail.com>
Date: Thu, 27 Dec 2018 09:41:23 +0800
Subject: [PATCH] HID: sony: Fix SHANWAN PS3 GamePad rumbling on USB again

- The SHANWAN DS3 clone joystick requires HID Output Reports via Interrupt EP.
- Added a quirk for SHANWAN PS3 GamePad.

Signed-off-by: Hongye Yuan <outmatch@gmail.com>
---
 drivers/hid/hid-sony.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

             hid_info(hdev, "can't set operational mode: step 3, ignoring\n");
@@ -2097,9 +2099,13 @@ static void sixaxis_send_output_report(struct
sony_sc *sc)
         }
     }

-    hid_hw_raw_request(sc->hdev, report->report_id, (u8 *)report,
-            sizeof(struct sixaxis_output_report),
-            HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);
+    /* SHANWAN controllers require sending output reports via intr channel */
+    if (sc->quirks & SHANWAN_GAMEPAD)
+        hid_hw_output_report(sc->hdev, (u8 *)report,
+                sizeof(struct sixaxis_output_report));
+    else hid_hw_raw_request(sc->hdev, report->report_id, (u8 *)report,
+                sizeof(struct sixaxis_output_report),
+                HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);
 }

 static void dualshock4_send_output_report(struct sony_sc *sc)
@@ -2811,6 +2817,9 @@ static int sony_probe(struct hid_device *hdev,
const struct hid_device_id *id)
     if (!strcmp(hdev->name, "FutureMax Dance Mat"))
         quirks |= FUTUREMAX_DANCE_MAT;

+    if (!strcmp(hdev->name, "SHANWAN PS3 GamePad"))
+        quirks |= SHANWAN_GAMEPAD;
+
     sc = devm_kzalloc(&hdev->dev, sizeof(*sc), GFP_KERNEL);
     if (sc == NULL) {
         hid_err(hdev, "can't alloc sony descriptor\n");

diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index 9671a4bad643..842f370cfec2 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -58,6 +58,7 @@
 #define FUTUREMAX_DANCE_MAT       BIT(13)
 #define NSG_MR5U_REMOTE_BT        BIT(14)
 #define NSG_MR7U_REMOTE_BT        BIT(15)
+#define SHANWAN_GAMEPAD           BIT(16)

 #define SIXAXIS_CONTROLLER (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)
 #define MOTION_CONTROLLER (MOTION_CONTROLLER_USB | MOTION_CONTROLLER_BT)
@@ -1490,6 +1491,7 @@ static int sony_register_sensors(struct sony_sc *sc)
  */
 static int sixaxis_set_operational_usb(struct hid_device *hdev)
 {
+    struct sony_sc *sc = hid_get_drvdata(hdev);
     const int buf_size =
         max(SIXAXIS_REPORT_0xF2_SIZE, SIXAXIS_REPORT_0xF5_SIZE);
     u8 *buf;
@@ -1521,7 +1523,7 @@ static int sixaxis_set_operational_usb(struct
hid_device *hdev)
      * But the USB interrupt would cause SHANWAN controllers to
      * start rumbling non-stop.
      */
-    if (strcmp(hdev->name, "SHANWAN PS3 GamePad")) {
+    if (sc->quirks & SHANWAN_GAMEPAD) {
         ret = hid_hw_output_report(hdev, buf, 1);
         if (ret < 0) {

             reply	other threads:[~2018-12-28  2:26 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-28  2:26 liquid [this message]
  -- strict thread matches above, loose matches on Subject: below --
2018-12-28 10:33 HID: sony: Fix SHANWAN PS3 GamePad rumbling on USB again Antonio Ospite
2018-12-28  2:15 liquid

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAPsNqc427=u2B02fPpi3Dtw-K7dtSGfphq3qi-PeBNTRRmDVTg@mail.gmail.com' \
    --to=outmatch@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jkosina@suse.cz \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.