On Wed, 26 May 2004, Alexander Kulakov wrote:

> Alan Stern wrote:
> 
> >Your log didn't give me any great new ideas...  Clearly the device works 
> >okay with the usb-uhci driver in 2.4 but not the uhci-hcd driver in 2.6.  
> >Have you tried the uhci driver in 2.4 as well?
> >
> >Also, do you have any other USB devices you can try plugging in to that 
> >same port?
> >  
> >
> Alan
> 
> uhci driver doesn't work either.

This is just a shot in the dark.  It's a patch for 2.6.6, addressing the
only significant difference I could see between the uhci and usb-uhci
drivers.  Maybe it will make a difference, who knows?

If this doesn't work...  In 2.6.6, look in the file 
drivers/usb/core/usb.c.  Around line 1124 you should see this:

                wait_ms(10);    /* Let the SET_ADDRESS settle */

Try changing the 10 to something larger, like 20, or 50, or 100.

Alan Stern



===== drivers/usb/host/uhci-hcd.c 1.110 vs edited =====
--- 1.110/drivers/usb/host/uhci-hcd.c   Wed May 19 19:41:50 2004
+++ edited/drivers/usb/host/uhci-hcd.c  Tue Jun  1 15:03:26 2004
@@ -2004,6 +2010,10 @@
        outw(USBCMD_RS | USBCMD_CF | USBCMD_MAXP, io_addr + USBCMD);
 
         uhci->hcd.state = USB_STATE_RUNNING;
+
+       /* Enable PIRQ */
+       pci_write_config_word(to_pci_dev(uhci_dev(uhci)), USBLEGSUP,
+                       USBLEGSUP_DEFAULT);
 }
 
 /*
@@ -2054,15 +2064,16 @@
 
        uhci->io_addr = (unsigned long) hcd->regs;
 
+       /* Kick BIOS off this hardware and disable PIRQ */
+       pci_write_config_word(to_pci_dev(uhci_dev(uhci)), USBLEGSUP, 0);
+
        /* Turn off all interrupts */
        outw(0, uhci->io_addr + USBINTR);
 
-       /* Maybe kick BIOS off this hardware.  Then reset, so we won't get
-        * interrupts from any previous setup.
+       /* Reset the entire controller and the USB bus, to wipe out any
+        * previous configuration.
         */
        reset_hc(uhci);
-       pci_write_config_word(to_pci_dev(uhci_dev(uhci)), USBLEGSUP,
-                       USBLEGSUP_DEFAULT);
        return 0;
 }
 
@@ -2324,7 +2335,7 @@
         * At this point, we're guaranteed that no new connects can be made
         * to this bus since there are no more parents
         */
-
+       pci_write_config_word(to_pci_dev(uhci_dev(uhci)), USBLEGSUP, 0);
        reset_hc(uhci);
 
        spin_lock_irq(&uhci->schedule_lock);
@@ -2376,6 +2387,8 @@
                outl(uhci->fl->dma_handle, uhci->io_addr + USBFLBASEADD);
                outw(USBINTR_TIMEOUT | USBINTR_RESUME | USBINTR_IOC |
                                USBINTR_SP, uhci->io_addr + USBINTR);
+               pci_write_config_word(to_pci_dev(uhci_dev(uhci)), USBLEGSUP,
+                               USBLEGSUP_DEFAULT);
                uhci->resume_detect = 1;
        } else {
                reset_hc(uhci);



-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to