aboutsummaryrefslogtreecommitdiffstats
path: root/packages/linux/linux-mtx-1-2.4.27/42-usb-ohci-fixes.patch
blob: aa5a0d45f70cd7380717b0fef22899d467965077 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
--- linux/drivers/usb/host/usb-ohci.c.orig	2006-03-30 11:38:08.972225500 +0200
+++ linux/drivers/usb/host/usb-ohci.c	2006-03-30 11:39:46.858343000 +0200
@@ -104,6 +104,10 @@
 
 #define OHCI_UNLINK_TIMEOUT	(HZ / 10)
 
+static int ohci_delay = 3000;
+MODULE_PARM(ohci_delay, "i");
+MODULE_PARM_DESC(ohci_delay, "Wait time [ms] for OHCI to come up");
+
 /*-------------------------------------------------------------------------*/
 
 /* AMD-756 (D2 rev) reports corrupt register contents in some cases.
@@ -147,7 +151,7 @@
 		ohci->complete_head = urb;
 		ohci->complete_tail = urb;
 	} else {
-		ohci->complete_head->hcpriv = urb;
+		ohci->complete_tail->hcpriv = urb;
 		ohci->complete_tail = urb;
 	}
 }
@@ -2587,12 +2591,12 @@
 		hc_release_ohci (ohci);
 		return -ENODEV;
 	}
-
+#if 0
 	/* FIXME this is a second HC reset; why?? */
 	writel (ohci->hc_control = OHCI_USB_RESET, &ohci->regs->control);
 	(void)readl (&ohci->regs->intrdisable); /* PCI posting flush */
 	wait_ms (10);
-
+#endif
 	usb_register_bus (ohci->bus);
 	
 	if (request_irq (irq, hc_interrupt, SA_SHIRQ,
@@ -2668,6 +2672,13 @@
 	void *mem_base;
 	int status;
 
+	printk ("waiting for ohci to come up\n");
+	mdelay(ohci_delay);
+	/* We have to wait for about four seconds for some devices to be available.
+	 * This may only be a matter of the Option Globetrotter Fusion,
+	 * that may need to much time to start up correctly. */
+	printk ("ohci should be up\n");
+			
 	if (pci_enable_device(dev) < 0)
 		return -ENODEV;