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