Re: [PATCH v2 3/6] HID: sony: Add Bluetooth output report formatting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

On Thu, Jan 30, 2014 at 6:24 PM, Frank Praznik <frank.praznik@xxxxxxxxx> wrote:
> Add formatting and reporting for Dualshock 4 output reports on Bluetooth.
>
> Signed-off-by: Frank Praznik <frank.praznik@xxxxxxxxx>
>
> ---
>  drivers/hid/hid-sony.c | 29 +++++++++++++++++++++++------
>  1 file changed, 23 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
> index 52162a9..4d12b4e 100644
> --- a/drivers/hid/hid-sony.c
> +++ b/drivers/hid/hid-sony.c
> @@ -1268,11 +1268,18 @@ static void dualshock4_state_worker(struct work_struct *work)
>         struct hid_device *hdev = sc->hdev;
>         int offset;
>
> -       __u8 buf[32] = { 0 };
> +       __u8 buf[78] = { 0 };
>
> -       buf[0] = 0x05;
> -       buf[1] = 0x03;
> -       offset = 4;
> +       if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
> +               buf[0] = 0x05;
> +               buf[1] = 0x03;
> +               offset = 4;
> +       } else {
> +               buf[0] = 0x11;
> +               buf[1] = 0xB0;
> +               buf[3] = 0x0F;
> +               offset = 6;
> +       }
>
>  #ifdef CONFIG_SONY_FF
>         buf[offset++] = sc->right;
> @@ -1285,7 +1292,11 @@ static void dualshock4_state_worker(struct work_struct *work)
>         buf[offset++] = sc->led_state[1];
>         buf[offset++] = sc->led_state[2];
>
> -       hdev->ll_driver->output_report(hdev, buf, sizeof(buf));
> +       if (sc->quirks & DUALSHOCK4_CONTROLLER_USB)
> +               hdev->ll_driver->output_report(hdev, buf, 32);
> +       else
> +               hdev->ll_driver->raw_request(hdev, 0x11, buf, 78,
> +                               HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);

Ok, now I get it. The USB stuff takes output-reports and BT uses
SET_REPORT. That's exactly the inverse of wiimotes.

>  }
>
>  #ifdef CONFIG_SONY_FF
> @@ -1482,10 +1493,16 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
>         else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
>                 ret = sixaxis_set_operational_bt(hdev);
>         else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
> -               if (hdev->ll_driver->output_report == NULL) {
> +               if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) &&
> +                    hdev->ll_driver->output_report == NULL) {
>                         hid_err(hdev, "NULL output_report handler\n");
>                         ret = -EINVAL;
>                         goto err_stop;
> +               } else if ((sc->quirks & DUALSHOCK4_CONTROLLER_BT) &&
> +                           hdev->ll_driver->raw_request == NULL) {
> +                       hid_err(hdev, "NULL raw_request handler\n");
> +                       ret = -EINVAL;
> +                       goto err_stop;

If you rebase your patches on Benjamins series, you can use
hid_hw_output_report() and hid_hw_raw_request() which already to the
NULL check. So you can drop this stuff here.

Thanks
David

>                 }
>
>                 /* The Dualshock 4 touchpad supports 2 touches and has a
> --
> 1.8.5.3
>
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux