ChangeSet 1.1005.1.10, 2003/06/27 15:23:21-07:00, david@csse.uwa.edu.au

[PATCH] USB: usb-ohci handling of one-shot interrupt transfers

A long standing problem has existed with usb-ohci handling of one-shot
interrupt transfers (they never worked). Attached is a fix which was
originally proposed by P.C. Chan and subsequently modified and
re-presented by Frode Isaksen. The Lego USB driver does not work with
ohci without this fix and so I would really appreciate it being applied.


 drivers/usb/host/usb-ohci.c |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)


diff -Nru a/drivers/usb/host/usb-ohci.c b/drivers/usb/host/usb-ohci.c
--- a/drivers/usb/host/usb-ohci.c	Fri Jun 27 16:27:06 2003
+++ b/drivers/usb/host/usb-ohci.c	Fri Jun 27 16:27:06 2003
@@ -490,13 +490,20 @@
 				usb_pipeout (urb->pipe)
 					? PCI_DMA_TODEVICE
 					: PCI_DMA_FROMDEVICE);
-			urb->complete (urb);
 
-			/* implicitly requeued */
-  			urb->actual_length = 0;
-			urb->status = -EINPROGRESS;
-			td_submit_urb (urb);
-  			break;
+			if (urb->interval) {
+				urb->complete (urb);
+ 
+				/* implicitly requeued */
+				urb->actual_length = 0;
+				urb->status = -EINPROGRESS;
+				td_submit_urb (urb);
+			} else {
+				urb_rm_priv(urb);
+				urb->complete (urb);
+			}
+   			break;
+
   			
 		case PIPE_ISOCHRONOUS:
 			for (urbt = urb->next; urbt && (urbt != urb); urbt = urbt->next);