diff mbox

[PATCHv4,3/3] sony_ff_bluetooth

Message ID 1307179957-24458-3-git-send-email-simon@mungewell.org (mailing list archive)
State New, archived
Headers show

Commit Message

simon@mungewell.org June 4, 2011, 9:32 a.m. UTC
Add support for patching the HID descriptor when Sixaxis is connect
via Bluetooth. In this mode the desciptor contains a trailing '0x00'.

Patch suggested by Antonio

Signed-off-by: Antonio Ospite <ospite@studenti.unina.it>
Signed-off-by: Simon Wood <simon@mungewell.org>
---
 drivers/hid/hid-sony.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

Comments

Antonio Ospite June 8, 2011, 7:47 a.m. UTC | #1
On Sat,  4 Jun 2011 02:32:37 -0700
Simon Wood <simon@mungewell.org> wrote:

> Add support for patching the HID descriptor when Sixaxis is connect
> via Bluetooth. In this mode the desciptor contains a trailing '0x00'.
> 
> Patch suggested by Antonio
>

Simon I think this one can be split and the first hunk can be merged
with 1/2 and the second hunk with 2/2.

Also the short commit messages still need to be fixed for all the
patches to be more descriptive, if you don't want to spend any more
time on that just tell and I'll do it :)

Thanks,
   Antonio

> Signed-off-by: Antonio Ospite <ospite@studenti.unina.it>
> Signed-off-by: Simon Wood <simon@mungewell.org>
> ---
>  drivers/hid/hid-sony.c |    9 ++++++---
>  1 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
> index f219746..5d37f97 100644
> --- a/drivers/hid/hid-sony.c
> +++ b/drivers/hid/hid-sony.c
> @@ -49,8 +49,11 @@ 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;
>  	}
> -	if ((sc->quirks & SIXAXIS_CONTROLLER_USB) &&
> -			*rsize == 148 && rdesc[83] == 0x75) {
> +
> +	/* 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));
>  	}
> @@ -64,7 +67,7 @@ static int sony_raw_event(struct hid_device *hdev, struct hid_report *report, __
>  {
>  	struct sony_sc *sc = hid_get_drvdata(hdev);
>  
> -	if ((sc->quirks & SIXAXIS_CONTROLLER_USB) &&
> +	if ((sc->quirks & (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)) &&
>  			rd[0] == 0x01 && size == 49) {
>  		swap(rd[41], rd[42]);
>  		swap(rd[43], rd[44]);
> --
simon@mungewell.org June 8, 2011, 11:57 p.m. UTC | #2
>
> Simon I think this one can be split and the first hunk can be merged
> with 1/2 and the second hunk with 2/2.
>
> Also the short commit messages still need to be fixed for all the
> patches to be more descriptive, if you don't want to spend any more
> time on that just tell and I'll do it :)

I'm traveling for the rest of the week and don't have access to the
Sixaxis hardware to test, so if you have the time/motivation to spin a new
patch that would be great.... if not I can try again over the weekend.

> rewrite section from offset 148
.... er, yes I am an idiot. ;-)

Simon


--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index f219746..5d37f97 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -49,8 +49,11 @@  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;
 	}
-	if ((sc->quirks & SIXAXIS_CONTROLLER_USB) &&
-			*rsize == 148 && rdesc[83] == 0x75) {
+
+	/* 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));
 	}
@@ -64,7 +67,7 @@  static int sony_raw_event(struct hid_device *hdev, struct hid_report *report, __
 {
 	struct sony_sc *sc = hid_get_drvdata(hdev);
 
-	if ((sc->quirks & SIXAXIS_CONTROLLER_USB) &&
+	if ((sc->quirks & (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT)) &&
 			rd[0] == 0x01 && size == 49) {
 		swap(rd[41], rd[42]);
 		swap(rd[43], rd[44]);