linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Scott Shumate <scott.shumate@gmail.com>
To: "Colenbrander, Roderick" <Roderick.Colenbrander@sony.com>,
	Jiri Kosina <jikos@kernel.org>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>,
	"linux-input@vger.kernel.org" <linux-input@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] HID: sony: Fix for broken buttons on DS3 USB dongles
Date: Wed, 13 May 2020 15:06:04 -0500	[thread overview]
Message-ID: <e3496a04-3a96-f833-955f-69912a76bdac@gmail.com> (raw)
In-Reply-To: <BY5PR13MB38264B60014D43193C53B38798BF0@BY5PR13MB3826.namprd13.prod.outlook.com>

Hi Roderick,

The official DS3 has a Report Count(19) instead of Report Count(13) in the exact same offset.  I 
have no idea what the silicon vendor for these dongles was thinking but it's suspicious that the 
official count of 19 (0x13) turned into 13 (0xd) in the knock-off.  It makes you wonder if the 
engineers confused the decimal/hex numbers.

As buggy as all of these third-party devices are, I'm afraid relying on the HID parser to get it 
right is only going to worse over time.  I do like your idea of having each device register 
themselves.  It would be nice to have each device provide a callback to decode its own report rather 
than handle a bunch of special conditions and quirks in a unified report decoding function.  The 
drawback of course is that its going to be a little more effort to maintain.

Cheers,
Scott


On 5/13/20 2:41 PM, Colenbrander, Roderick wrote:
> Hi Scott,
> 
> Thanks for sharing this patch. Do you know if for these controllers the data is at the same byte offsets in the reports as an official DS3?
> 
> The reason I'm asking is that I have been considering for a while to redo some of the button / stick handling code and the issue you just pointed out could be another argument towards doing that. Basically we learned that also for the official Navigation controller there are apparently a few different revisions with different report descriptors (yah!).
> 
> I have been tempted for some time to get rid of this fixup / mapping logic altogether and e.g. have a "sony_register_gamepad" and do it all ourselves and put more logic into the sixaxis_parse_report call. With many buggy devices of which we don't have most it feels fragile to have the HID parser do the work.
> 
> Thanks,
> Roderick
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> From: Scott Shumate <scott.shumate@gmail.com>
> 
> Sent: Wednesday, May 13, 2020 10:05 AM
> 
> To: Jiri Kosina <jikos@kernel.org>; Benjamin Tissoires <benjamin.tissoires@redhat.com>; Colenbrander, Roderick <Roderick.Colenbrander@sony.com>; linux-input@vger.kernel.org <linux-input@vger.kernel.org>; linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>
> 
> Subject: [PATCH] HID: sony: Fix for broken buttons on DS3 USB dongles
> 
>   
> 
> 
> Fix for non-working buttons on knock-off USB dongles for Sony
> controllers. These USB dongles are used to connect older Sony DA/DS1/DS2
> controllers via USB and are common on Amazon, AliExpress, etc.  Without
> the patch, the square, X, and circle buttons do not function.  These
> dongles used to work prior to kernel 4.10 but removing the global DS3
> report fixup in this commit exposed the problem:
> 
> commit e19a267b9987 Author: Roderick Colenbrander
>   <roderick.colenbrander@sony.com>
> Date:   Tue Mar 7 15:45:08 2017 -0800
> 
>      HID: sony: DS3 comply to Linux gamepad spec
> 
> Many people reported the problem on the Ubuntu forums and are working
> around the problem by falling back to the 4.9 hid-sony driver.
> 
> The problem stems from these dongles incorrectly reporting their button
> count as 13 instead of 16.  This patch fixes up the report descriptor by
> changing the button report count to 16 and removing 3 padding bits.
> 
> Signed-off-by: Scott Shumate <scott.shumate@gmail.com>
> ---
> diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
> index 4c6ed6ef31f1..2f073f536070 100644
> --- a/drivers/hid/hid-sony.c
> +++ b/drivers/hid/hid-sony.c
> @@ -867,6 +867,23 @@ static u8 *sony_report_fixup(struct hid_device *hdev, u8 *rdesc,
>   	if (sc->quirks & PS3REMOTE)
>   		return ps3remote_fixup(hdev, rdesc, rsize);
>   
> +	/*
> +	 * Some knock-off USB dongles incorrectly report their button count
> +	 * as 13 instead of 16 causing three non-functional buttons.
> +	 */
> +	if ((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize >= 45 &&
> +		/* Report Count (13) */
> +		rdesc[23] == 0x95 && rdesc[24] == 0x0D &&
> +		/* Usage Maximum (13) */
> +		rdesc[37] == 0x29 && rdesc[38] == 0x0D &&
> +		/* Report Count (3) */
> +		rdesc[43] == 0x95 && rdesc[44] == 0x03) {
> +		hid_info(hdev, "Fixing up USB dongle report descriptor\n");
> +		rdesc[24] = 0x10;
> +		rdesc[38] = 0x10;
> +		rdesc[44] = 0x00;
> +	}
> +
>   	return rdesc;
>   }
>   
> 
> 
> 


  reply	other threads:[~2020-05-13 20:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <46c1ab66-62d7-5dae-2f4d-7e722f1aff3a@gmail.com>
2020-05-13 19:41 ` [PATCH] HID: sony: Fix for broken buttons on DS3 USB dongles Colenbrander, Roderick
2020-05-13 20:06   ` Scott Shumate [this message]
2020-05-26  9:00     ` Jiri Kosina
2020-05-13 18:39 scott.shumate

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=e3496a04-3a96-f833-955f-69912a76bdac@gmail.com \
    --to=scott.shumate@gmail.com \
    --cc=Roderick.Colenbrander@sony.com \
    --cc=benjamin.tissoires@redhat.com \
    --cc=jikos@kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).