Greg:

This patch changes a couple of new routines in the suspend/resume code.  
Internally they use port numbers starting from 1, unlike every other 
routine in the hub driver.  This changes the port numbers to origin-0, for 
consistency's sake.  Of course, messages sent to the system log will 
continue to start counting from 1.

Please apply.

Alan Stern


Signed-off-by: Alan Stern <[EMAIL PROTECTED]>

===== drivers/usb/core/hub.c 1.192 vs edited =====
--- 1.192/drivers/usb/core/hub.c        Wed Aug 18 14:35:04 2004
+++ edited/drivers/usb/core/hub.c       Wed Aug 18 15:44:48 2004
@@ -1359,8 +1359,8 @@
        int                     status;
        struct usb_device       *udev;
 
-       udev = hdev->children[port - 1];
-       // dev_dbg(hubdev(hdev), "suspend port %d\n", port);
+       udev = hdev->children[port];
+       // dev_dbg(hubdev(hdev), "suspend port %d\n", port + 1);
 
        /* enable remote wakeup when appropriate; this lets the device
         * wake up the upstream hub (including maybe the root hub).
@@ -1385,11 +1385,11 @@
        }
 
        /* see 7.1.7.6 */
-       status = set_port_feature(hdev, port, USB_PORT_FEAT_SUSPEND);
+       status = set_port_feature(hdev, port + 1, USB_PORT_FEAT_SUSPEND);
        if (status) {
                dev_dbg(hubdev(hdev),
                        "can't suspend port %d, status %d\n",
-                       port, status);
+                       port + 1, status);
                /* paranoia:  "should not happen" */
                (void) usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
                                USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
@@ -1508,7 +1508,7 @@
                else
                        status = -EOPNOTSUPP;
        } else
-               status = hub_port_suspend(udev->parent, port + 1);
+               status = hub_port_suspend(udev->parent, port);
 
        if (status == 0)
                udev->dev.power.power_state = state;
@@ -1633,15 +1633,15 @@
        int                     status;
        struct usb_device       *udev;
 
-       udev = hdev->children[port - 1];
-       // dev_dbg(hubdev(hdev), "resume port %d\n", port);
+       udev = hdev->children[port];
+       // dev_dbg(hubdev(hdev), "resume port %d\n", port + 1);
 
        /* see 7.1.7.7; affects power usage, but not budgeting */
-       status = clear_port_feature(hdev, port, USB_PORT_FEAT_SUSPEND);
+       status = clear_port_feature(hdev, port + 1, USB_PORT_FEAT_SUSPEND);
        if (status) {
                dev_dbg(&hdev->actconfig->interface[0]->dev,
                        "can't resume port %d, status %d\n",
-                       port, status);
+                       port + 1, status);
        } else {
                u16             devstatus;
                u16             portchange;
@@ -1659,7 +1659,7 @@
                 * sequence.
                 */
                devstatus = portchange = 0;
-               status = hub_port_status(hdev, port - 1,
+               status = hub_port_status(hdev, port,
                                &devstatus, &portchange);
                if (status < 0
                                || (devstatus & LIVE_FLAGS) != LIVE_FLAGS
@@ -1667,7 +1667,7 @@
                                ) {
                        dev_dbg(&hdev->actconfig->interface[0]->dev,
                                "port %d status %04x.%04x after resume, %d\n",
-                               port, portchange, devstatus, status);
+                               port + 1, portchange, devstatus, status);
                } else {
                        /* TRSMRCY = 10 msec */
                        msleep(10);
@@ -1675,7 +1675,7 @@
                }
        }
        if (status < 0)
-               hub_port_logical_disconnect(hdev, port - 1);
+               hub_port_logical_disconnect(hdev, port);
 
        return status;
 }
@@ -1719,7 +1719,7 @@
                                        ->actconfig->interface[0]);
                }
        } else if (udev->state == USB_STATE_SUSPENDED) {
-               status = hub_port_resume(udev->parent, port + 1);
+               status = hub_port_resume(udev->parent, port);
        } else {
                status = 0;
                udev->dev.power.power_state = PM_SUSPEND_ON;
@@ -1812,7 +1812,7 @@
                        continue;
                down (&udev->serialize);
                if (portstat & USB_PORT_STAT_SUSPEND)
-                       status = hub_port_resume(hdev, port + 1);
+                       status = hub_port_resume(hdev, port);
                else {
                        status = finish_port_resume(udev);
                        if (status < 0) {



-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to