Skip to content

Commit 057c58b

Browse files
AlanSterngregkh
authored andcommitted
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 <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 2138a1f commit 057c58b

File tree

1 file changed

+39
-38
lines changed

1 file changed

+39
-38
lines changed

drivers/usb/core/hcd-pci.c

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,43 @@ static int hcd_pci_suspend(struct device *dev)
403403
return retval;
404404
}
405405

406+
static int resume_common(struct device *dev, int event)
407+
{
408+
struct pci_dev *pci_dev = to_pci_dev(dev);
409+
struct usb_hcd *hcd = pci_get_drvdata(pci_dev);
410+
int retval;
411+
412+
if (hcd->state != HC_STATE_SUSPENDED) {
413+
dev_dbg(dev, "can't resume, not suspended!\n");
414+
return 0;
415+
}
416+
417+
retval = pci_enable_device(pci_dev);
418+
if (retval < 0) {
419+
dev_err(dev, "can't re-enable after resume, %d!\n", retval);
420+
return retval;
421+
}
422+
423+
pci_set_master(pci_dev);
424+
425+
clear_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
426+
427+
if (hcd->driver->pci_resume) {
428+
/* This call should be made only during system resume,
429+
* not during runtime resume.
430+
*/
431+
wait_for_companions(pci_dev, hcd);
432+
433+
retval = hcd->driver->pci_resume(hcd,
434+
event == PM_EVENT_RESTORE);
435+
if (retval) {
436+
dev_err(dev, "PCI post-resume error %d!\n", retval);
437+
usb_hc_died(hcd);
438+
}
439+
}
440+
return retval;
441+
}
442+
406443
static int hcd_pci_suspend_noirq(struct device *dev)
407444
{
408445
struct pci_dev *pci_dev = to_pci_dev(dev);
@@ -452,50 +489,14 @@ static int hcd_pci_resume_noirq(struct device *dev)
452489
return 0;
453490
}
454491

455-
static int resume_common(struct device *dev, bool hibernated)
456-
{
457-
struct pci_dev *pci_dev = to_pci_dev(dev);
458-
struct usb_hcd *hcd = pci_get_drvdata(pci_dev);
459-
int retval;
460-
461-
if (hcd->state != HC_STATE_SUSPENDED) {
462-
dev_dbg(dev, "can't resume, not suspended!\n");
463-
return 0;
464-
}
465-
466-
retval = pci_enable_device(pci_dev);
467-
if (retval < 0) {
468-
dev_err(dev, "can't re-enable after resume, %d!\n", retval);
469-
return retval;
470-
}
471-
472-
pci_set_master(pci_dev);
473-
474-
clear_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
475-
476-
if (hcd->driver->pci_resume) {
477-
/* This call should be made only during system resume,
478-
* not during runtime resume.
479-
*/
480-
wait_for_companions(pci_dev, hcd);
481-
482-
retval = hcd->driver->pci_resume(hcd, hibernated);
483-
if (retval) {
484-
dev_err(dev, "PCI post-resume error %d!\n", retval);
485-
usb_hc_died(hcd);
486-
}
487-
}
488-
return retval;
489-
}
490-
491492
static int hcd_pci_resume(struct device *dev)
492493
{
493-
return resume_common(dev, false);
494+
return resume_common(dev, PM_EVENT_RESUME);
494495
}
495496

496497
static int hcd_pci_restore(struct device *dev)
497498
{
498-
return resume_common(dev, true);
499+
return resume_common(dev, PM_EVENT_RESTORE);
499500
}
500501

501502
const struct dev_pm_ops usb_hcd_pci_pm_ops = {

0 commit comments

Comments
 (0)