aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ehci-hub.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/host/ehci-hub.c')
-rw-r--r--drivers/usb/host/ehci-hub.c34
1 files changed, 10 insertions, 24 deletions
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
index 4e065e556e4b..efffef64f59d 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -28,7 +28,9 @@
28 28
29/*-------------------------------------------------------------------------*/ 29/*-------------------------------------------------------------------------*/
30 30
31#ifdef CONFIG_USB_PERSIST 31#define PORT_WAKE_BITS (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
32
33#ifdef CONFIG_PM
32 34
33static int ehci_hub_control( 35static int ehci_hub_control(
34 struct usb_hcd *hcd, 36 struct usb_hcd *hcd,
@@ -104,15 +106,6 @@ static void ehci_handover_companion_ports(struct ehci_hcd *ehci)
104 ehci->owned_ports = 0; 106 ehci->owned_ports = 0;
105} 107}
106 108
107#else /* CONFIG_USB_PERSIST */
108
109static inline void ehci_handover_companion_ports(struct ehci_hcd *ehci)
110{ }
111
112#endif
113
114#ifdef CONFIG_PM
115
116static int ehci_bus_suspend (struct usb_hcd *hcd) 109static int ehci_bus_suspend (struct usb_hcd *hcd)
117{ 110{
118 struct ehci_hcd *ehci = hcd_to_ehci (hcd); 111 struct ehci_hcd *ehci = hcd_to_ehci (hcd);
@@ -158,10 +151,10 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
158 } 151 }
159 152
160 /* enable remote wakeup on all ports */ 153 /* enable remote wakeup on all ports */
161 if (device_may_wakeup(&hcd->self.root_hub->dev)) 154 if (hcd->self.root_hub->do_remote_wakeup)
162 t2 |= PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E; 155 t2 |= PORT_WAKE_BITS;
163 else 156 else
164 t2 &= ~(PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E); 157 t2 &= ~PORT_WAKE_BITS;
165 158
166 if (t1 != t2) { 159 if (t1 != t2) {
167 ehci_vdbg (ehci, "port %d, %08x -> %08x\n", 160 ehci_vdbg (ehci, "port %d, %08x -> %08x\n",
@@ -183,7 +176,7 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
183 176
184 /* allow remote wakeup */ 177 /* allow remote wakeup */
185 mask = INTR_MASK; 178 mask = INTR_MASK;
186 if (!device_may_wakeup(&hcd->self.root_hub->dev)) 179 if (!hcd->self.root_hub->do_remote_wakeup)
187 mask &= ~STS_PCD; 180 mask &= ~STS_PCD;
188 ehci_writel(ehci, mask, &ehci->regs->intr_enable); 181 ehci_writel(ehci, mask, &ehci->regs->intr_enable);
189 ehci_readl(ehci, &ehci->regs->intr_enable); 182 ehci_readl(ehci, &ehci->regs->intr_enable);
@@ -241,8 +234,7 @@ static int ehci_bus_resume (struct usb_hcd *hcd)
241 i = HCS_N_PORTS (ehci->hcs_params); 234 i = HCS_N_PORTS (ehci->hcs_params);
242 while (i--) { 235 while (i--) {
243 temp = ehci_readl(ehci, &ehci->regs->port_status [i]); 236 temp = ehci_readl(ehci, &ehci->regs->port_status [i]);
244 temp &= ~(PORT_RWC_BITS 237 temp &= ~(PORT_RWC_BITS | PORT_WAKE_BITS);
245 | PORT_WKOC_E | PORT_WKDISC_E | PORT_WKCONN_E);
246 if (test_bit(i, &ehci->bus_suspended) && 238 if (test_bit(i, &ehci->bus_suspended) &&
247 (temp & PORT_SUSPEND)) { 239 (temp & PORT_SUSPEND)) {
248 ehci->reset_done [i] = jiffies + msecs_to_jiffies (20); 240 ehci->reset_done [i] = jiffies + msecs_to_jiffies (20);
@@ -281,9 +273,7 @@ static int ehci_bus_resume (struct usb_hcd *hcd)
281 ehci_writel(ehci, INTR_MASK, &ehci->regs->intr_enable); 273 ehci_writel(ehci, INTR_MASK, &ehci->regs->intr_enable);
282 274
283 spin_unlock_irq (&ehci->lock); 275 spin_unlock_irq (&ehci->lock);
284 276 ehci_handover_companion_ports(ehci);
285 if (!power_okay)
286 ehci_handover_companion_ports(ehci);
287 return 0; 277 return 0;
288} 278}
289 279
@@ -545,8 +535,6 @@ ehci_hub_descriptor (
545 535
546/*-------------------------------------------------------------------------*/ 536/*-------------------------------------------------------------------------*/
547 537
548#define PORT_WAKE_BITS (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
549
550static int ehci_hub_control ( 538static int ehci_hub_control (
551 struct usb_hcd *hcd, 539 struct usb_hcd *hcd,
552 u16 typeReq, 540 u16 typeReq,
@@ -778,7 +766,7 @@ static int ehci_hub_control (
778 if (temp & PORT_POWER) 766 if (temp & PORT_POWER)
779 status |= 1 << USB_PORT_FEAT_POWER; 767 status |= 1 << USB_PORT_FEAT_POWER;
780 768
781#ifndef EHCI_VERBOSE_DEBUG 769#ifndef VERBOSE_DEBUG
782 if (status & ~0xffff) /* only if wPortChange is interesting */ 770 if (status & ~0xffff) /* only if wPortChange is interesting */
783#endif 771#endif
784 dbg_port (ehci, "GetStatus", wIndex + 1, temp); 772 dbg_port (ehci, "GetStatus", wIndex + 1, temp);
@@ -812,8 +800,6 @@ static int ehci_hub_control (
812 if ((temp & PORT_PE) == 0 800 if ((temp & PORT_PE) == 0
813 || (temp & PORT_RESET) != 0) 801 || (temp & PORT_RESET) != 0)
814 goto error; 802 goto error;
815 if (device_may_wakeup(&hcd->self.root_hub->dev))
816 temp |= PORT_WAKE_BITS;
817 ehci_writel(ehci, temp | PORT_SUSPEND, status_reg); 803 ehci_writel(ehci, temp | PORT_SUSPEND, status_reg);
818 break; 804 break;
819 case USB_PORT_FEAT_POWER: 805 case USB_PORT_FEAT_POWER: