[patch 6/7] usbtouchscreen: don't send interrupt urbs to bulk endpoints
From: akpm@linux-foundation.org
Date: 2010-02-02 22:43:21
From: Ondrej Zary <redacted> Don't send interrupt urbs to bulk endpoints. This fixes EHCI corruption after rmmod with NEXIO touchscreen. Signed-off-by: Ondrej Zary <redacted> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> Cc: Jim Persson <redacted> Cc: Florian Echtler <redacted> Cc: Dan Streetman <redacted> Cc: Daniel Ritz <redacted> Cc: Greg KH <redacted> Cc: Oliver Neukum <oliver@neukum.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- drivers/input/touchscreen/usbtouchscreen.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff -puN drivers/input/touchscreen/usbtouchscreen.c~usbtouchscreen-dont-send-interrupt-urbs-to-bulk-endpoints drivers/input/touchscreen/usbtouchscreen.c
--- a/drivers/input/touchscreen/usbtouchscreen.c~usbtouchscreen-dont-send-interrupt-urbs-to-bulk-endpoints
+++ a/drivers/input/touchscreen/usbtouchscreen.c@@ -1375,10 +1375,16 @@ static int usbtouch_probe(struct usb_int input_set_abs_params(input_dev, ABS_PRESSURE, type->min_press, type->max_press, 0, 0); - usb_fill_int_urb(usbtouch->irq, udev, + if (usb_endpoint_type(endpoint) == USB_ENDPOINT_XFER_INT) + usb_fill_int_urb(usbtouch->irq, udev, usb_rcvintpipe(udev, endpoint->bEndpointAddress), usbtouch->data, type->rept_size, usbtouch_irq, usbtouch, endpoint->bInterval); + else + usb_fill_bulk_urb(usbtouch->irq, udev, + usb_rcvbulkpipe(udev, endpoint->bEndpointAddress), + usbtouch->data, type->rept_size, + usbtouch_irq, usbtouch); usbtouch->irq->dev = udev; usbtouch->irq->transfer_dma = usbtouch->data_dma;
_