[RFC, PATCH 1/2] HID: usbhid, new quirk to force out reports on the control ep

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

 



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


[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