Commit 02c399ee authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

usbcore: remove usb_suspend_root_hub

This patch (as740) removes the existing support for autosuspend of
root hubs.  That support fit in rather awkwardly with the rest of
usbcore and it was used only by ohci-hcd.  It won't be needed any more
since the hub driver will take care of autosuspending all hubs, root
or external.
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 01d883d4
...@@ -1431,50 +1431,6 @@ int hcd_bus_resume (struct usb_bus *bus) ...@@ -1431,50 +1431,6 @@ int hcd_bus_resume (struct usb_bus *bus)
return status; return status;
} }
/*
* usb_hcd_suspend_root_hub - HCD autosuspends downstream ports
* @hcd: host controller for this root hub
*
* This call arranges that usb_hcd_resume_root_hub() is safe to call later;
* that the HCD's root hub polling is deactivated; and that the root's hub
* driver is suspended. HCDs may call this to autosuspend when their root
* hub's downstream ports are all inactive: unpowered, disconnected,
* disabled, or suspended.
*
* The HCD will autoresume on device connect change detection (using SRP
* or a D+/D- pullup). The HCD also autoresumes on remote wakeup signaling
* from any ports that are suspended (if that is enabled). In most cases,
* overcurrent signaling (on powered ports) will also start autoresume.
*
* Always called with IRQs blocked.
*/
void usb_hcd_suspend_root_hub (struct usb_hcd *hcd)
{
struct urb *urb;
spin_lock (&hcd_root_hub_lock);
usb_suspend_root_hub (hcd->self.root_hub);
/* force status urb to complete/unlink while suspended */
if (hcd->status_urb) {
urb = hcd->status_urb;
urb->status = -ECONNRESET;
urb->hcpriv = NULL;
urb->actual_length = 0;
del_timer (&hcd->rh_timer);
hcd->poll_pending = 0;
hcd->status_urb = NULL;
} else
urb = NULL;
spin_unlock (&hcd_root_hub_lock);
hcd->state = HC_STATE_SUSPENDED;
if (urb)
usb_hcd_giveback_urb (hcd, urb, NULL);
}
EXPORT_SYMBOL_GPL(usb_hcd_suspend_root_hub);
/** /**
* usb_hcd_resume_root_hub - called by HCD to resume its root hub * usb_hcd_resume_root_hub - called by HCD to resume its root hub
* @hcd: host controller for this root hub * @hcd: host controller for this root hub
......
...@@ -368,17 +368,11 @@ extern int usb_find_interface_driver (struct usb_device *dev, ...@@ -368,17 +368,11 @@ extern int usb_find_interface_driver (struct usb_device *dev,
#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN)) #define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN))
#ifdef CONFIG_PM #ifdef CONFIG_PM
extern void usb_hcd_suspend_root_hub (struct usb_hcd *hcd);
extern void usb_hcd_resume_root_hub (struct usb_hcd *hcd); extern void usb_hcd_resume_root_hub (struct usb_hcd *hcd);
extern void usb_root_hub_lost_power (struct usb_device *rhdev); extern void usb_root_hub_lost_power (struct usb_device *rhdev);
extern int hcd_bus_suspend (struct usb_bus *bus); extern int hcd_bus_suspend (struct usb_bus *bus);
extern int hcd_bus_resume (struct usb_bus *bus); extern int hcd_bus_resume (struct usb_bus *bus);
#else #else
static inline void usb_hcd_suspend_root_hub(struct usb_hcd *hcd)
{
return;
}
static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd) static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd)
{ {
return; return;
......
...@@ -452,18 +452,14 @@ static void hub_power_on(struct usb_hub *hub) ...@@ -452,18 +452,14 @@ static void hub_power_on(struct usb_hub *hub)
msleep(max(pgood_delay, (unsigned) 100)); msleep(max(pgood_delay, (unsigned) 100));
} }
static inline void __hub_quiesce(struct usb_hub *hub) static void hub_quiesce(struct usb_hub *hub)
{ {
/* (nonblocking) khubd and related activity won't re-trigger */ /* (nonblocking) khubd and related activity won't re-trigger */
hub->quiescing = 1; hub->quiescing = 1;
hub->activating = 0; hub->activating = 0;
hub->resume_root_hub = 0; hub->resume_root_hub = 0;
}
static void hub_quiesce(struct usb_hub *hub)
{
/* (blocking) stop khubd and related activity */ /* (blocking) stop khubd and related activity */
__hub_quiesce(hub);
usb_kill_urb(hub->urb); usb_kill_urb(hub->urb);
if (hub->has_indicators) if (hub->has_indicators)
cancel_delayed_work(&hub->leds); cancel_delayed_work(&hub->leds);
...@@ -1914,18 +1910,6 @@ static inline int remote_wakeup(struct usb_device *udev) ...@@ -1914,18 +1910,6 @@ static inline int remote_wakeup(struct usb_device *udev)
#define hub_resume NULL #define hub_resume NULL
#endif #endif
void usb_suspend_root_hub(struct usb_device *hdev)
{
struct usb_hub *hub = hdev_to_hub(hdev);
/* This also makes any led blinker stop retriggering. We're called
* from irq, so the blinker might still be scheduled. Caller promises
* that the root hub status URB will be canceled.
*/
__hub_quiesce(hub);
mark_quiesced(to_usb_interface(hub->intfdev));
}
void usb_resume_root_hub(struct usb_device *hdev) void usb_resume_root_hub(struct usb_device *hdev)
{ {
struct usb_hub *hub = hdev_to_hub(hdev); struct usb_hub *hub = hdev_to_hub(hdev);
......
...@@ -20,7 +20,6 @@ extern char *usb_cache_string(struct usb_device *udev, int index); ...@@ -20,7 +20,6 @@ extern char *usb_cache_string(struct usb_device *udev, int index);
extern int usb_set_configuration(struct usb_device *dev, int configuration); extern int usb_set_configuration(struct usb_device *dev, int configuration);
extern void usb_kick_khubd(struct usb_device *dev); extern void usb_kick_khubd(struct usb_device *dev);
extern void usb_suspend_root_hub(struct usb_device *hdev);
extern void usb_resume_root_hub(struct usb_device *dev); extern void usb_resume_root_hub(struct usb_device *dev);
extern int usb_hub_init(void); extern int usb_hub_init(void);
......
...@@ -135,9 +135,6 @@ static int ohci_bus_suspend (struct usb_hcd *hcd) ...@@ -135,9 +135,6 @@ static int ohci_bus_suspend (struct usb_hcd *hcd)
hcd->poll_rh = 0; hcd->poll_rh = 0;
done: done:
/* external suspend vs self autosuspend ... same effect */
if (status == 0)
usb_hcd_suspend_root_hub(hcd);
spin_unlock_irqrestore (&ohci->lock, flags); spin_unlock_irqrestore (&ohci->lock, flags);
return status; return status;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment