USB: move PCI HCD resume routine
This patch (as1384) moves the resume_common() routine in hcd-pci.c a little higher in the source file to avoid forward references in an upcoming patch. It also replaces the "hibernated" argument with a more general "event" argument, which will be useful when the routine is called during a runtime resume. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2138a1f183
commit
057c58bfb1
@@ -403,6 +403,43 @@ static int hcd_pci_suspend(struct device *dev)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int resume_common(struct device *dev, int event)
|
||||||
|
{
|
||||||
|
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||||
|
struct usb_hcd *hcd = pci_get_drvdata(pci_dev);
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
if (hcd->state != HC_STATE_SUSPENDED) {
|
||||||
|
dev_dbg(dev, "can't resume, not suspended!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = pci_enable_device(pci_dev);
|
||||||
|
if (retval < 0) {
|
||||||
|
dev_err(dev, "can't re-enable after resume, %d!\n", retval);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
pci_set_master(pci_dev);
|
||||||
|
|
||||||
|
clear_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
|
||||||
|
|
||||||
|
if (hcd->driver->pci_resume) {
|
||||||
|
/* This call should be made only during system resume,
|
||||||
|
* not during runtime resume.
|
||||||
|
*/
|
||||||
|
wait_for_companions(pci_dev, hcd);
|
||||||
|
|
||||||
|
retval = hcd->driver->pci_resume(hcd,
|
||||||
|
event == PM_EVENT_RESTORE);
|
||||||
|
if (retval) {
|
||||||
|
dev_err(dev, "PCI post-resume error %d!\n", retval);
|
||||||
|
usb_hc_died(hcd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
static int hcd_pci_suspend_noirq(struct device *dev)
|
static int hcd_pci_suspend_noirq(struct device *dev)
|
||||||
{
|
{
|
||||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||||
@@ -452,50 +489,14 @@ static int hcd_pci_resume_noirq(struct device *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int resume_common(struct device *dev, bool hibernated)
|
|
||||||
{
|
|
||||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
|
||||||
struct usb_hcd *hcd = pci_get_drvdata(pci_dev);
|
|
||||||
int retval;
|
|
||||||
|
|
||||||
if (hcd->state != HC_STATE_SUSPENDED) {
|
|
||||||
dev_dbg(dev, "can't resume, not suspended!\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
retval = pci_enable_device(pci_dev);
|
|
||||||
if (retval < 0) {
|
|
||||||
dev_err(dev, "can't re-enable after resume, %d!\n", retval);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
pci_set_master(pci_dev);
|
|
||||||
|
|
||||||
clear_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
|
|
||||||
|
|
||||||
if (hcd->driver->pci_resume) {
|
|
||||||
/* This call should be made only during system resume,
|
|
||||||
* not during runtime resume.
|
|
||||||
*/
|
|
||||||
wait_for_companions(pci_dev, hcd);
|
|
||||||
|
|
||||||
retval = hcd->driver->pci_resume(hcd, hibernated);
|
|
||||||
if (retval) {
|
|
||||||
dev_err(dev, "PCI post-resume error %d!\n", retval);
|
|
||||||
usb_hc_died(hcd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int hcd_pci_resume(struct device *dev)
|
static int hcd_pci_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
return resume_common(dev, false);
|
return resume_common(dev, PM_EVENT_RESUME);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hcd_pci_restore(struct device *dev)
|
static int hcd_pci_restore(struct device *dev)
|
||||||
{
|
{
|
||||||
return resume_common(dev, true);
|
return resume_common(dev, PM_EVENT_RESTORE);
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct dev_pm_ops usb_hcd_pci_pm_ops = {
|
const struct dev_pm_ops usb_hcd_pci_pm_ops = {
|
||||||
|
Reference in New Issue
Block a user