diff -purN linux-2.6.21.3_freqorig/drivers/usb/host/ehci-hcd.c linux-2.6.21.3_freqbugfix/drivers/usb/host/ehci-hcd.c
--- linux-2.6.21.3_freqorig/drivers/usb/host/ehci-hcd.c	2007-05-29 16:05:20.000000000 -0500
+++ linux-2.6.21.3_freqbugfix/drivers/usb/host/ehci-hcd.c	2007-05-29 15:40:41.000000000 -0500
@@ -449,14 +449,14 @@ static void ehci_stop (struct usb_hcd *h
 	/* no more interrupts ... */
 	del_timer_sync (&ehci->watchdog);
 
-	spin_lock_irq(&ehci->lock);
-	if (HC_IS_RUNNING (hcd->state))
-		ehci_quiesce (ehci);
-
 #ifdef CONFIG_CPU_FREQ
 	cpufreq_unregister_notifier(&ehci->cpufreq_transition,
 				    CPUFREQ_TRANSITION_NOTIFIER);
 #endif
+	spin_lock_irq(&ehci->lock);
+	if (HC_IS_RUNNING (hcd->state))
+		ehci_quiesce (ehci);
+
 	ehci_reset (ehci);
 	ehci_writel(ehci, 0, &ehci->regs->intr_enable);
 	spin_unlock_irq(&ehci->lock);
