[PATCH] USB: Rename hcd->hub_suspend to hcd->bus_suspend

This patch (as580) is perhaps the only result from the long discussion I
had with David about his changes to the root-hub suspend/resume code.  It
renames the hub_suspend and hub_resume methods in struct usb_hcd to
bus_suspend and bus_resume.  These are more descriptive names, since the
methods really do suspend or resume an entire USB bus, and less likely to
be confused with the hub_suspend and hub_resume routines in hub.c.

It also takes David's advice about removing the layer of bus glue, where
those methods are called.  And it implements a related change that David
made to the other HCDs but forgot to put into dummy_hcd.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Alan Stern 2005-10-13 17:08:02 -04:00 committed by Greg Kroah-Hartman
parent bb200f6eac
commit 0c0382e32d
18 changed files with 72 additions and 79 deletions

View file

@ -1433,16 +1433,16 @@ hcd_endpoint_disable (struct usb_device *udev, struct usb_host_endpoint *ep)
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int hcd_hub_suspend (struct usb_bus *bus) int hcd_bus_suspend (struct usb_bus *bus)
{ {
struct usb_hcd *hcd; struct usb_hcd *hcd;
int status; int status;
hcd = container_of (bus, struct usb_hcd, self); hcd = container_of (bus, struct usb_hcd, self);
if (!hcd->driver->hub_suspend) if (!hcd->driver->bus_suspend)
return -ENOENT; return -ENOENT;
hcd->state = HC_STATE_QUIESCING; hcd->state = HC_STATE_QUIESCING;
status = hcd->driver->hub_suspend (hcd); status = hcd->driver->bus_suspend (hcd);
if (status == 0) if (status == 0)
hcd->state = HC_STATE_SUSPENDED; hcd->state = HC_STATE_SUSPENDED;
else else
@ -1451,18 +1451,18 @@ static int hcd_hub_suspend (struct usb_bus *bus)
return status; return status;
} }
static int hcd_hub_resume (struct usb_bus *bus) int hcd_bus_resume (struct usb_bus *bus)
{ {
struct usb_hcd *hcd; struct usb_hcd *hcd;
int status; int status;
hcd = container_of (bus, struct usb_hcd, self); hcd = container_of (bus, struct usb_hcd, self);
if (!hcd->driver->hub_resume) if (!hcd->driver->bus_resume)
return -ENOENT; return -ENOENT;
if (hcd->state == HC_STATE_RUNNING) if (hcd->state == HC_STATE_RUNNING)
return 0; return 0;
hcd->state = HC_STATE_RESUMING; hcd->state = HC_STATE_RESUMING;
status = hcd->driver->hub_resume (hcd); status = hcd->driver->bus_resume (hcd);
if (status == 0) if (status == 0)
hcd->state = HC_STATE_RUNNING; hcd->state = HC_STATE_RUNNING;
else { else {
@ -1590,10 +1590,6 @@ static struct usb_operations usb_hcd_operations = {
.buffer_alloc = hcd_buffer_alloc, .buffer_alloc = hcd_buffer_alloc,
.buffer_free = hcd_buffer_free, .buffer_free = hcd_buffer_free,
.disable = hcd_endpoint_disable, .disable = hcd_endpoint_disable,
#ifdef CONFIG_PM
.hub_suspend = hcd_hub_suspend,
.hub_resume = hcd_hub_resume,
#endif
}; };
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/

View file

@ -154,10 +154,6 @@ struct usb_operations {
void (*disable)(struct usb_device *udev, void (*disable)(struct usb_device *udev,
struct usb_host_endpoint *ep); struct usb_host_endpoint *ep);
/* global suspend/resume of bus */
int (*hub_suspend)(struct usb_bus *);
int (*hub_resume)(struct usb_bus *);
}; };
/* each driver provides one of these, and hardware init support */ /* each driver provides one of these, and hardware init support */
@ -212,8 +208,8 @@ struct hc_driver {
int (*hub_control) (struct usb_hcd *hcd, int (*hub_control) (struct usb_hcd *hcd,
u16 typeReq, u16 wValue, u16 wIndex, u16 typeReq, u16 wValue, u16 wIndex,
char *buf, u16 wLength); char *buf, u16 wLength);
int (*hub_suspend)(struct usb_hcd *); int (*bus_suspend)(struct usb_hcd *);
int (*hub_resume)(struct usb_hcd *); int (*bus_resume)(struct usb_hcd *);
int (*start_port_reset)(struct usb_hcd *, unsigned port_num); int (*start_port_reset)(struct usb_hcd *, unsigned port_num);
void (*hub_irq_enable)(struct usb_hcd *); void (*hub_irq_enable)(struct usb_hcd *);
/* Needed only if port-change IRQs are level-triggered */ /* Needed only if port-change IRQs are level-triggered */
@ -379,6 +375,21 @@ 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
extern int hcd_bus_suspend (struct usb_bus *bus);
extern int hcd_bus_resume (struct usb_bus *bus);
#else
static inline int hcd_bus_suspend(struct usb_bus *bus)
{
return 0;
}
static inline int hcd_bus_resume (struct usb_bus *bus)
{
return 0;
}
#endif /* CONFIG_PM */
/* /*
* USB device fs stuff * USB device fs stuff
*/ */

View file

@ -1917,8 +1917,8 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
/* "global suspend" of the downstream HC-to-USB interface */ /* "global suspend" of the downstream HC-to-USB interface */
if (!hdev->parent) { if (!hdev->parent) {
struct usb_bus *bus = hdev->bus; struct usb_bus *bus = hdev->bus;
if (bus && bus->op->hub_suspend) { if (bus) {
int status = bus->op->hub_suspend (bus); int status = hcd_bus_suspend (bus);
if (status != 0) { if (status != 0) {
dev_dbg(&hdev->dev, "'global' suspend %d\n", dev_dbg(&hdev->dev, "'global' suspend %d\n",
@ -1943,8 +1943,8 @@ static int hub_resume(struct usb_interface *intf)
/* "global resume" of the downstream HC-to-USB interface */ /* "global resume" of the downstream HC-to-USB interface */
if (!hdev->parent) { if (!hdev->parent) {
struct usb_bus *bus = hdev->bus; struct usb_bus *bus = hdev->bus;
if (bus && bus->op->hub_resume) { if (bus) {
status = bus->op->hub_resume (bus); status = hcd_bus_resume (bus);
if (status) { if (status) {
dev_dbg(&intf->dev, "'global' resume %d\n", dev_dbg(&intf->dev, "'global' resume %d\n",
status); status);

View file

@ -1751,7 +1751,7 @@ static int dummy_hub_control (
return retval; return retval;
} }
static int dummy_hub_suspend (struct usb_hcd *hcd) static int dummy_bus_suspend (struct usb_hcd *hcd)
{ {
struct dummy *dum = hcd_to_dummy (hcd); struct dummy *dum = hcd_to_dummy (hcd);
@ -1762,7 +1762,7 @@ static int dummy_hub_suspend (struct usb_hcd *hcd)
return 0; return 0;
} }
static int dummy_hub_resume (struct usb_hcd *hcd) static int dummy_bus_resume (struct usb_hcd *hcd)
{ {
struct dummy *dum = hcd_to_dummy (hcd); struct dummy *dum = hcd_to_dummy (hcd);
@ -1894,8 +1894,8 @@ static const struct hc_driver dummy_hcd = {
.hub_status_data = dummy_hub_status, .hub_status_data = dummy_hub_status,
.hub_control = dummy_hub_control, .hub_control = dummy_hub_control,
.hub_suspend = dummy_hub_suspend, .bus_suspend = dummy_bus_suspend,
.hub_resume = dummy_hub_resume, .bus_resume = dummy_bus_resume,
}; };
static int dummy_hcd_probe (struct device *dev) static int dummy_hcd_probe (struct device *dev)
@ -1936,13 +1936,6 @@ static int dummy_hcd_suspend (struct device *dev, pm_message_t state)
dev_dbg (dev, "%s\n", __FUNCTION__); dev_dbg (dev, "%s\n", __FUNCTION__);
hcd = dev_get_drvdata (dev); hcd = dev_get_drvdata (dev);
#ifndef CONFIG_USB_SUSPEND
/* Otherwise this would never happen */
usb_lock_device (hcd->self.root_hub);
dummy_hub_suspend (hcd);
usb_unlock_device (hcd->self.root_hub);
#endif
hcd->state = HC_STATE_SUSPENDED; hcd->state = HC_STATE_SUSPENDED;
return 0; return 0;
} }
@ -1955,13 +1948,6 @@ static int dummy_hcd_resume (struct device *dev)
hcd = dev_get_drvdata (dev); hcd = dev_get_drvdata (dev);
hcd->state = HC_STATE_RUNNING; hcd->state = HC_STATE_RUNNING;
#ifndef CONFIG_USB_SUSPEND
/* Otherwise this would never happen */
usb_lock_device (hcd->self.root_hub);
dummy_hub_resume (hcd);
usb_unlock_device (hcd->self.root_hub);
#endif
usb_hcd_poll_rh_status (hcd); usb_hcd_poll_rh_status (hcd);
return 0; return 0;
} }

View file

@ -30,7 +30,7 @@
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int ehci_hub_suspend (struct usb_hcd *hcd) static int ehci_bus_suspend (struct usb_hcd *hcd)
{ {
struct ehci_hcd *ehci = hcd_to_ehci (hcd); struct ehci_hcd *ehci = hcd_to_ehci (hcd);
int port; int port;
@ -83,7 +83,7 @@ static int ehci_hub_suspend (struct usb_hcd *hcd)
/* caller has locked the root hub, and should reset/reinit on error */ /* caller has locked the root hub, and should reset/reinit on error */
static int ehci_hub_resume (struct usb_hcd *hcd) static int ehci_bus_resume (struct usb_hcd *hcd)
{ {
struct ehci_hcd *ehci = hcd_to_ehci (hcd); struct ehci_hcd *ehci = hcd_to_ehci (hcd);
u32 temp; u32 temp;
@ -159,8 +159,8 @@ static int ehci_hub_resume (struct usb_hcd *hcd)
#else #else
#define ehci_hub_suspend NULL #define ehci_bus_suspend NULL
#define ehci_hub_resume NULL #define ehci_bus_resume NULL
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */

View file

@ -363,8 +363,8 @@ static const struct hc_driver ehci_pci_hc_driver = {
*/ */
.hub_status_data = ehci_hub_status_data, .hub_status_data = ehci_hub_status_data,
.hub_control = ehci_hub_control, .hub_control = ehci_hub_control,
.hub_suspend = ehci_hub_suspend, .bus_suspend = ehci_bus_suspend,
.hub_resume = ehci_hub_resume, .bus_resume = ehci_bus_resume,
}; };
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/

View file

@ -1160,7 +1160,7 @@ static int isp116x_hub_control(struct usb_hcd *hcd,
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int isp116x_hub_suspend(struct usb_hcd *hcd) static int isp116x_bus_suspend(struct usb_hcd *hcd)
{ {
struct isp116x *isp116x = hcd_to_isp116x(hcd); struct isp116x *isp116x = hcd_to_isp116x(hcd);
unsigned long flags; unsigned long flags;
@ -1200,7 +1200,7 @@ static int isp116x_hub_suspend(struct usb_hcd *hcd)
return ret; return ret;
} }
static int isp116x_hub_resume(struct usb_hcd *hcd) static int isp116x_bus_resume(struct usb_hcd *hcd)
{ {
struct isp116x *isp116x = hcd_to_isp116x(hcd); struct isp116x *isp116x = hcd_to_isp116x(hcd);
u32 val; u32 val;
@ -1266,8 +1266,8 @@ static int isp116x_hub_resume(struct usb_hcd *hcd)
#else #else
#define isp116x_hub_suspend NULL #define isp116x_bus_suspend NULL
#define isp116x_hub_resume NULL #define isp116x_bus_resume NULL
#endif #endif
@ -1626,8 +1626,8 @@ static struct hc_driver isp116x_hc_driver = {
.hub_status_data = isp116x_hub_status_data, .hub_status_data = isp116x_hub_status_data,
.hub_control = isp116x_hub_control, .hub_control = isp116x_hub_control,
.hub_suspend = isp116x_hub_suspend, .bus_suspend = isp116x_bus_suspend,
.hub_resume = isp116x_hub_resume, .bus_resume = isp116x_bus_resume,
}; };
/*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/

View file

@ -215,8 +215,8 @@ static const struct hc_driver ohci_au1xxx_hc_driver = {
.hub_status_data = ohci_hub_status_data, .hub_status_data = ohci_hub_status_data,
.hub_control = ohci_hub_control, .hub_control = ohci_hub_control,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.hub_suspend = ohci_hub_suspend, .bus_suspend = ohci_bus_suspend,
.hub_resume = ohci_hub_resume, .bus_resume = ohci_bus_resume,
#endif #endif
.start_port_reset = ohci_start_port_reset, .start_port_reset = ohci_start_port_reset,
}; };

View file

@ -45,7 +45,7 @@ static void dl_done_list (struct ohci_hcd *, struct pt_regs *);
static void finish_unlinks (struct ohci_hcd *, u16 , struct pt_regs *); static void finish_unlinks (struct ohci_hcd *, u16 , struct pt_regs *);
static int ohci_restart (struct ohci_hcd *ohci); static int ohci_restart (struct ohci_hcd *ohci);
static int ohci_hub_suspend (struct usb_hcd *hcd) static int ohci_bus_suspend (struct usb_hcd *hcd)
{ {
struct ohci_hcd *ohci = hcd_to_ohci (hcd); struct ohci_hcd *ohci = hcd_to_ohci (hcd);
int status = 0; int status = 0;
@ -135,7 +135,7 @@ static inline struct ed *find_head (struct ed *ed)
} }
/* caller has locked the root hub */ /* caller has locked the root hub */
static int ohci_hub_resume (struct usb_hcd *hcd) static int ohci_bus_resume (struct usb_hcd *hcd)
{ {
struct ohci_hcd *ohci = hcd_to_ohci (hcd); struct ohci_hcd *ohci = hcd_to_ohci (hcd);
u32 temp, enables; u32 temp, enables;
@ -362,7 +362,7 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
&& usb_trylock_device (hcd->self.root_hub) && usb_trylock_device (hcd->self.root_hub)
) { ) {
ohci_vdbg (ohci, "autosuspend\n"); ohci_vdbg (ohci, "autosuspend\n");
(void) ohci_hub_suspend (hcd); (void) ohci_bus_suspend (hcd);
usb_unlock_device (hcd->self.root_hub); usb_unlock_device (hcd->self.root_hub);
} }
#endif #endif

View file

@ -194,8 +194,8 @@ static const struct hc_driver ohci_lh7a404_hc_driver = {
.hub_status_data = ohci_hub_status_data, .hub_status_data = ohci_hub_status_data,
.hub_control = ohci_hub_control, .hub_control = ohci_hub_control,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.hub_suspend = ohci_hub_suspend, .bus_suspend = ohci_bus_suspend,
.hub_resume = ohci_hub_resume, .bus_resume = ohci_bus_resume,
#endif #endif
.start_port_reset = ohci_start_port_reset, .start_port_reset = ohci_start_port_reset,
}; };

View file

@ -421,8 +421,8 @@ static const struct hc_driver ohci_omap_hc_driver = {
.hub_status_data = ohci_hub_status_data, .hub_status_data = ohci_hub_status_data,
.hub_control = ohci_hub_control, .hub_control = ohci_hub_control,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.hub_suspend = ohci_hub_suspend, .bus_suspend = ohci_bus_suspend,
.hub_resume = ohci_hub_resume, .bus_resume = ohci_bus_resume,
#endif #endif
.start_port_reset = ohci_start_port_reset, .start_port_reset = ohci_start_port_reset,
}; };

View file

@ -195,8 +195,8 @@ static const struct hc_driver ohci_pci_hc_driver = {
.hub_status_data = ohci_hub_status_data, .hub_status_data = ohci_hub_status_data,
.hub_control = ohci_hub_control, .hub_control = ohci_hub_control,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.hub_suspend = ohci_hub_suspend, .bus_suspend = ohci_bus_suspend,
.hub_resume = ohci_hub_resume, .bus_resume = ohci_bus_resume,
#endif #endif
.start_port_reset = ohci_start_port_reset, .start_port_reset = ohci_start_port_reset,
}; };

View file

@ -164,8 +164,8 @@ static const struct hc_driver ohci_ppc_soc_hc_driver = {
.hub_status_data = ohci_hub_status_data, .hub_status_data = ohci_hub_status_data,
.hub_control = ohci_hub_control, .hub_control = ohci_hub_control,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.hub_suspend = ohci_hub_suspend, .bus_suspend = ohci_bus_suspend,
.hub_resume = ohci_hub_resume, .bus_resume = ohci_bus_resume,
#endif #endif
.start_port_reset = ohci_start_port_reset, .start_port_reset = ohci_start_port_reset,
}; };

View file

@ -279,8 +279,8 @@ static const struct hc_driver ohci_pxa27x_hc_driver = {
.hub_status_data = ohci_hub_status_data, .hub_status_data = ohci_hub_status_data,
.hub_control = ohci_hub_control, .hub_control = ohci_hub_control,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.hub_suspend = ohci_hub_suspend, .bus_suspend = ohci_bus_suspend,
.hub_resume = ohci_hub_resume, .bus_resume = ohci_bus_resume,
#endif #endif
.start_port_reset = ohci_start_port_reset, .start_port_reset = ohci_start_port_reset,
}; };

View file

@ -449,8 +449,8 @@ static const struct hc_driver ohci_s3c2410_hc_driver = {
.hub_status_data = ohci_s3c2410_hub_status_data, .hub_status_data = ohci_s3c2410_hub_status_data,
.hub_control = ohci_s3c2410_hub_control, .hub_control = ohci_s3c2410_hub_control,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.hub_suspend = ohci_hub_suspend, .bus_suspend = ohci_bus_suspend,
.hub_resume = ohci_hub_resume, .bus_resume = ohci_bus_resume,
#endif #endif
.start_port_reset = ohci_start_port_reset, .start_port_reset = ohci_start_port_reset,
}; };

View file

@ -236,8 +236,8 @@ static const struct hc_driver ohci_sa1111_hc_driver = {
.hub_status_data = ohci_hub_status_data, .hub_status_data = ohci_hub_status_data,
.hub_control = ohci_hub_control, .hub_control = ohci_hub_control,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.hub_suspend = ohci_hub_suspend, .bus_suspend = ohci_bus_suspend,
.hub_resume = ohci_hub_resume, .bus_resume = ohci_bus_resume,
#endif #endif
.start_port_reset = ohci_start_port_reset, .start_port_reset = ohci_start_port_reset,
}; };

View file

@ -1363,7 +1363,7 @@ sl811h_hub_control(
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int static int
sl811h_hub_suspend(struct usb_hcd *hcd) sl811h_bus_suspend(struct usb_hcd *hcd)
{ {
// SOFs off // SOFs off
DBG("%s\n", __FUNCTION__); DBG("%s\n", __FUNCTION__);
@ -1371,7 +1371,7 @@ sl811h_hub_suspend(struct usb_hcd *hcd)
} }
static int static int
sl811h_hub_resume(struct usb_hcd *hcd) sl811h_bus_resume(struct usb_hcd *hcd)
{ {
// SOFs on // SOFs on
DBG("%s\n", __FUNCTION__); DBG("%s\n", __FUNCTION__);
@ -1380,8 +1380,8 @@ sl811h_hub_resume(struct usb_hcd *hcd)
#else #else
#define sl811h_hub_suspend NULL #define sl811h_bus_suspend NULL
#define sl811h_hub_resume NULL #define sl811h_bus_resume NULL
#endif #endif
@ -1623,8 +1623,8 @@ static struct hc_driver sl811h_hc_driver = {
*/ */
.hub_status_data = sl811h_hub_status_data, .hub_status_data = sl811h_hub_status_data,
.hub_control = sl811h_hub_control, .hub_control = sl811h_hub_control,
.hub_suspend = sl811h_hub_suspend, .bus_suspend = sl811h_bus_suspend,
.hub_resume = sl811h_hub_resume, .bus_resume = sl811h_bus_resume,
}; };
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
@ -1791,7 +1791,7 @@ sl811h_suspend(struct device *dev, pm_message_t state)
int retval = 0; int retval = 0;
if (state.event == PM_EVENT_FREEZE) if (state.event == PM_EVENT_FREEZE)
retval = sl811h_hub_suspend(hcd); retval = sl811h_bus_suspend(hcd);
else if (state.event == PM_EVENT_SUSPEND) else if (state.event == PM_EVENT_SUSPEND)
port_power(sl811, 0); port_power(sl811, 0);
if (retval == 0) if (retval == 0)
@ -1816,7 +1816,7 @@ sl811h_resume(struct device *dev)
} }
dev->power.power_state = PMSG_ON; dev->power.power_state = PMSG_ON;
return sl811h_hub_resume(hcd); return sl811h_bus_resume(hcd);
} }
#else #else

View file

@ -804,8 +804,8 @@ static const struct hc_driver uhci_driver = {
#ifdef CONFIG_PM #ifdef CONFIG_PM
.suspend = uhci_suspend, .suspend = uhci_suspend,
.resume = uhci_resume, .resume = uhci_resume,
.hub_suspend = uhci_rh_suspend, .bus_suspend = uhci_rh_suspend,
.hub_resume = uhci_rh_resume, .bus_resume = uhci_rh_resume,
#endif #endif
.stop = uhci_stop, .stop = uhci_stop,