| From a1f9a4072655843fc03186acbad65990cc05dd2d Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Date: Tue, 25 Nov 2014 00:38:17 -0800 |
| Subject: Input: xpad - use proper endpoint type |
| |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| commit a1f9a4072655843fc03186acbad65990cc05dd2d upstream. |
| |
| The xpad wireless endpoint is not a bulk endpoint on my devices, but |
| rather an interrupt one, so the USB core complains when it is submitted. |
| I'm guessing that the author really did mean that this should be an |
| interrupt urb, but as there are a zillion different xpad devices out |
| there, let's cover out bases and handle both bulk and interrupt |
| endpoints just as easily. |
| |
| Signed-off-by: "Pierre-Loup A. Griffais" <pgriffais@valvesoftware.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/input/joystick/xpad.c | 16 +++++++++++++--- |
| 1 file changed, 13 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/input/joystick/xpad.c |
| +++ b/drivers/input/joystick/xpad.c |
| @@ -1003,9 +1003,19 @@ static int xpad_probe(struct usb_interfa |
| } |
| |
| ep_irq_in = &intf->cur_altsetting->endpoint[1].desc; |
| - usb_fill_bulk_urb(xpad->bulk_out, udev, |
| - usb_sndbulkpipe(udev, ep_irq_in->bEndpointAddress), |
| - xpad->bdata, XPAD_PKT_LEN, xpad_bulk_out, xpad); |
| + if (usb_endpoint_is_bulk_out(ep_irq_in)) { |
| + usb_fill_bulk_urb(xpad->bulk_out, udev, |
| + usb_sndbulkpipe(udev, |
| + ep_irq_in->bEndpointAddress), |
| + xpad->bdata, XPAD_PKT_LEN, |
| + xpad_bulk_out, xpad); |
| + } else { |
| + usb_fill_int_urb(xpad->bulk_out, udev, |
| + usb_sndintpipe(udev, |
| + ep_irq_in->bEndpointAddress), |
| + xpad->bdata, XPAD_PKT_LEN, |
| + xpad_bulk_out, xpad, 0); |
| + } |
| |
| /* |
| * Submit the int URB immediately rather than waiting for open |