On Tue, 27 Jan 2004, Rogério Brito wrote:

> Ok. This time, for lack of time (but for anxiously awaiting to sending
> you a feedback), I only tested via warm boots. The logs are listed
> below.

It all looks pretty much okay.  I don't know what those errors at the very 
end are, though...

> [Problems with pxaux mouse under X]
> > > It also seems that a cold boot with starting X and *then* loading the
> > > drive cures the problem, but I am not sure of what I am saying here.
> > 
> > I doubt very much that there is any relation unless you're using a USB
> > mouse.  But if you were it wouldn't be psaux, would it?  The mouse
> > trouble almost certainly has nothing to do with the patch.
> 
> Even if my systems use /dev/input/mouse? I'm using Debian testing at
> home. I thought that it might have, but I will investigate further after
> I take a good night of sleep.

No, these changes affect only USB devices, and really only those attached 
through an internal hub like the one in your device.

The patch below gets rid of all the debugging stuff.  It should be just 
enough for you to use the drive.  As near as I can tell, that internal hub 
is barely functional.  Even the Windows trace you collected showed a lot 
of errors or resets occuring near the end.

Something similar to this patch will eventually get in to the regular 
Linux kernel, but it won't happen soon -- maybe not until after the 2.7 
series starts up.  The patch itself can't go in because it's not fully 
functional; it doesn't monitor the internal hub for any important changes 
of state.  I should think that as long as you can use your drive, though, 
you will be happy.

Alan Stern


--- 2.6/drivers/usb/core/hub.c.orig     Tue Jan 20 16:10:29 2004
+++ 2.6/drivers/usb/core/hub.c  Tue Jan 27 17:17:16 2004
@@ -452,6 +452,8 @@
        dev_dbg(hub_dev, "%sover-current condition exists\n",
                (hubstatus & HUB_STATUS_OVERCURRENT) ? "" : "no ");
 
+       hub_power_on(hub);
+
        /* Start the interrupt endpoint */
        pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
        maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
@@ -470,17 +472,22 @@
                hub, endpoint->bInterval);
        hub->urb->transfer_dma = hub->buffer_dma;
        hub->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
+
+       if (hub->descriptor->wHubCharacteristics & HUB_CHAR_COMPOUND) {
+               dev_dbg(hub_dev, "skipping status urb for compound hub\n");
+               spin_lock_irq(&hub_event_lock);
+               list_add(&hub->event_list, &hub_event_list);
+               wake_up(&khubd_wait);
+               spin_unlock_irq(&hub_event_lock);
+               return 0;
+       }
+
        ret = usb_submit_urb(hub->urb, GFP_KERNEL);
        if (ret) {
                message = "couldn't submit status urb";
                goto fail;
        }
        hub->urb_active = 1;
-
-       /* Wake up khubd */
-       wake_up(&khubd_wait);
-
-       hub_power_on(hub);
 
        return 0;
 



-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to