Some non compliant usb devices, like the Sony Sixaxis (PS3 Controller) need output reports to be sent on the control endpoint rather than on the interrupt endpoint like the standard would say. Add a new quirk to handle this case in usbhid_output_raw_report(). Signed-off-by: Antonio Ospite <ospite@xxxxxxxxxxxxxxxxx> --- include/linux/hid.h | 1 + drivers/hid/usbhid/hid-core.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletions(-) diff --git a/include/linux/hid.h b/include/linux/hid.h index 1b95b0b..936b7a3 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -313,6 +313,7 @@ struct hid_item { #define HID_QUIRK_MULTI_INPUT 0x00000040 #define HID_QUIRK_HIDINPUT_FORCE 0x00000080 #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 +#define HID_QUIRK_FORCE_OUT_CONTROL_EP 0x00020000 #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 #define HID_QUIRK_NO_INIT_REPORTS 0x20000000 #define HID_QUIRK_NO_IGNORE 0x40000000 diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index df80532..81dadf8 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -841,7 +841,8 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co struct usb_host_interface *interface = intf->cur_altsetting; int ret; - if (usbhid->urbout && report_type != HID_FEATURE_REPORT) { + if (usbhid->urbout && report_type != HID_FEATURE_REPORT && + !(hid->quirks & HID_QUIRK_FORCE_OUT_CONTROL_EP)) { int actual_length; int skipped_report_id = 0; if (buf[0] == 0x0) { -- 1.7.1 -- 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