[PATCH] Fix hcd->state assignments in uhci-hcd
authorAlan Stern <stern@rowland.harvard.edu>
Mon, 17 Oct 2005 14:42:06 +0000 (10:42 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 28 Oct 2005 23:47:45 +0000 (16:47 -0700)
This patch (as581) changes the assignments to hcd->state in the uhci-hcd
driver.  It fixes part of bugzilla entry #5227.  The problem was revealed
by David's large suite of USB suspend/resume patches; this patch should go
to Linus at the same time those do.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/uhci-hcd.c

index 72cd1576d20cc00ca5db57b0c43b903b40bea606..d33ce3982a5f0e08f249ebb00697f3de22907fdc 100644 (file)
@@ -161,8 +161,8 @@ static void configure_hc(struct uhci_hcd *uhci)
        /* Set the current frame number */
        outw(uhci->frame_number, uhci->io_addr + USBFRNUM);
 
-       /* Mark controller as running before we enable interrupts */
-       uhci_to_hcd(uhci)->state = HC_STATE_RUNNING;
+       /* Mark controller as not halted before we enable interrupts */
+       uhci_to_hcd(uhci)->state = HC_STATE_SUSPENDED;
        mb();
 
        /* Enable PIRQ */
@@ -263,6 +263,7 @@ __acquires(uhci->lock)
 
 static void start_rh(struct uhci_hcd *uhci)
 {
+       uhci_to_hcd(uhci)->state = HC_STATE_RUNNING;
        uhci->is_stopped = 0;
        smp_wmb();
 
@@ -708,7 +709,6 @@ static int uhci_suspend(struct usb_hcd *hcd, pm_message_t message)
 
        if (uhci->rh_state > UHCI_RH_SUSPENDED) {
                dev_warn(uhci_dev(uhci), "Root hub isn't suspended!\n");
-               hcd->state = HC_STATE_RUNNING;
                rc = -EBUSY;
                goto done;
        };