aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-02-23 23:38:20 -0500
committerDavid S. Miller <davem@davemloft.net>2008-02-23 23:38:20 -0500
commit8d3c202be23c5a915f7053ebd4e96f44700c6a62 (patch)
treee0f017aff86d3ad0b858fe85f44e11096087ed00 /drivers/usb/host
parent1b04ab4597725f75f94942da9aa40daa7b9a4bd9 (diff)
parent038eb0ea04b245351be34b0ae76b55eee4603989 (diff)
Merge branch 'master' of ../linux-2.6/
Diffstat (limited to 'drivers/usb/host')
-rw-r--r--drivers/usb/host/Kconfig5
-rw-r--r--drivers/usb/host/ehci-hcd.c26
-rw-r--r--drivers/usb/host/sl811-hcd.c1
-rw-r--r--drivers/usb/host/u132-hcd.c15
4 files changed, 26 insertions, 21 deletions
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index d97b16b52efa..bf8be2a41a4a 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -69,10 +69,9 @@ config USB_EHCI_BIG_ENDIAN_DESC
69 default y 69 default y
70 70
71config USB_EHCI_FSL 71config USB_EHCI_FSL
72 bool 72 bool "Support for Freescale on-chip EHCI USB controller"
73 depends on USB_EHCI_HCD 73 depends on USB_EHCI_HCD && FSL_SOC
74 select USB_EHCI_ROOT_HUB_TT 74 select USB_EHCI_ROOT_HUB_TT
75 default y if MPC834x || PPC_MPC831x
76 ---help--- 75 ---help---
77 Variation of ARC USB block used in some Freescale chips. 76 Variation of ARC USB block used in some Freescale chips.
78 77
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 4caa6a8b9a37..b8ad55aff842 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -862,18 +862,18 @@ static int ehci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
862 /* reschedule QH iff another request is queued */ 862 /* reschedule QH iff another request is queued */
863 if (!list_empty (&qh->qtd_list) 863 if (!list_empty (&qh->qtd_list)
864 && HC_IS_RUNNING (hcd->state)) { 864 && HC_IS_RUNNING (hcd->state)) {
865 int schedule_status; 865 rc = qh_schedule(ehci, qh);
866 866
867 schedule_status = qh_schedule (ehci, qh); 867 /* An error here likely indicates handshake failure
868 spin_unlock_irqrestore (&ehci->lock, flags); 868 * or no space left in the schedule. Neither fault
869 869 * should happen often ...
870 if (schedule_status != 0) { 870 *
871 // shouldn't happen often, but ... 871 * FIXME kill the now-dysfunctional queued urbs
872 // FIXME kill those tds' urbs 872 */
873 err ("can't reschedule qh %p, err %d", 873 if (rc != 0)
874 qh, schedule_status); 874 ehci_err(ehci,
875 } 875 "can't reschedule qh %p, err %d",
876 return status; 876 qh, rc);
877 } 877 }
878 break; 878 break;
879 879
@@ -1014,7 +1014,7 @@ MODULE_LICENSE ("GPL");
1014#endif 1014#endif
1015 1015
1016#if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \ 1016#if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
1017 !defined(PS3_SYSTEM_BUS_DRIVER) 1017 !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER)
1018#error "missing bus glue for ehci-hcd" 1018#error "missing bus glue for ehci-hcd"
1019#endif 1019#endif
1020 1020
diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
index ba370c56172c..59be276ccd9d 100644
--- a/drivers/usb/host/sl811-hcd.c
+++ b/drivers/usb/host/sl811-hcd.c
@@ -1766,6 +1766,7 @@ sl811h_suspend(struct platform_device *dev, pm_message_t state)
1766 retval = sl811h_bus_suspend(hcd); 1766 retval = sl811h_bus_suspend(hcd);
1767 break; 1767 break;
1768 case PM_EVENT_SUSPEND: 1768 case PM_EVENT_SUSPEND:
1769 case PM_EVENT_HIBERNATE:
1769 case PM_EVENT_PRETHAW: /* explicitly discard hw state */ 1770 case PM_EVENT_PRETHAW: /* explicitly discard hw state */
1770 port_power(sl811, 0); 1771 port_power(sl811, 0);
1771 break; 1772 break;
diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c
index ac283b09a63f..3033d6945202 100644
--- a/drivers/usb/host/u132-hcd.c
+++ b/drivers/usb/host/u132-hcd.c
@@ -3213,15 +3213,20 @@ static int u132_suspend(struct platform_device *pdev, pm_message_t state)
3213 dev_err(&u132->platform_dev->dev, "device is being removed\n"); 3213 dev_err(&u132->platform_dev->dev, "device is being removed\n");
3214 return -ESHUTDOWN; 3214 return -ESHUTDOWN;
3215 } else { 3215 } else {
3216 int retval = 0; 3216 int retval = 0, ports;
3217 if (state.event == PM_EVENT_FREEZE) { 3217
3218 switch (state.event) {
3219 case PM_EVENT_FREEZE:
3218 retval = u132_bus_suspend(hcd); 3220 retval = u132_bus_suspend(hcd);
3219 } else if (state.event == PM_EVENT_SUSPEND) { 3221 break;
3220 int ports = MAX_U132_PORTS; 3222 case PM_EVENT_SUSPEND:
3223 case PM_EVENT_HIBERNATE:
3224 ports = MAX_U132_PORTS;
3221 while (ports-- > 0) { 3225 while (ports-- > 0) {
3222 port_power(u132, ports, 0); 3226 port_power(u132, ports, 0);
3223 } 3227 }
3224 } 3228 break;
3229 }
3225 if (retval == 0) 3230 if (retval == 0)
3226 pdev->dev.power.power_state = state; 3231 pdev->dev.power.power_state = state;
3227 return retval; 3232 return retval;