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);