aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ehci-hub.c
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2012-04-23 13:54:36 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-04-23 15:05:44 -0400
commit3d9545cc375d117554a9b35dfddadf9189c62775 (patch)
treeb01707d2e0901665f20bae0f0c5a0930af69651a /drivers/usb/host/ehci-hub.c
parent09091a4d5f2dd378dcf71de50b48cdacc58a8ac0 (diff)
EHCI: maintain the ehci->command value properly
The ehci-hcd driver is a little haphazard about keeping track of the state of the USBCMD register. The ehci->command field is supposed to hold the register's value (apart from a few special bits) at all times, but it isn't maintained properly. This patch (as1543) cleans up the situation. It keeps ehci->command up-to-date, and uses that value rather than reading the register from the hardware whenever possible. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/ehci-hub.c')
-rw-r--r--drivers/usb/host/ehci-hub.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
index 402e766df2fe..fc9e7cc6ac9b 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -233,7 +233,6 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
233 /* stop schedules, clean any completed work */ 233 /* stop schedules, clean any completed work */
234 if (ehci->rh_state == EHCI_RH_RUNNING) 234 if (ehci->rh_state == EHCI_RH_RUNNING)
235 ehci_quiesce (ehci); 235 ehci_quiesce (ehci);
236 ehci->command = ehci_readl(ehci, &ehci->regs->command);
237 ehci_work(ehci); 236 ehci_work(ehci);
238 237
239 /* Unlike other USB host controller types, EHCI doesn't have 238 /* Unlike other USB host controller types, EHCI doesn't have
@@ -374,6 +373,7 @@ static int ehci_bus_resume (struct usb_hcd *hcd)
374 ehci_writel(ehci, (u32) ehci->async->qh_dma, &ehci->regs->async_next); 373 ehci_writel(ehci, (u32) ehci->async->qh_dma, &ehci->regs->async_next);
375 374
376 /* restore CMD_RUN, framelist size, and irq threshold */ 375 /* restore CMD_RUN, framelist size, and irq threshold */
376 ehci->command |= CMD_RUN;
377 ehci_writel(ehci, ehci->command, &ehci->regs->command); 377 ehci_writel(ehci, ehci->command, &ehci->regs->command);
378 ehci->rh_state = EHCI_RH_RUNNING; 378 ehci->rh_state = EHCI_RH_RUNNING;
379 379