diff options
Diffstat (limited to 'drivers/pci/pci-driver.c')
-rw-r--r-- | drivers/pci/pci-driver.c | 86 |
1 files changed, 43 insertions, 43 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index b7e67c2f40b9..c697f2680856 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c | |||
@@ -384,6 +384,19 @@ static int pci_legacy_suspend_late(struct device *dev, pm_message_t state) | |||
384 | return i; | 384 | return i; |
385 | } | 385 | } |
386 | 386 | ||
387 | static int pci_legacy_resume_early(struct device *dev) | ||
388 | { | ||
389 | int error = 0; | ||
390 | struct pci_dev * pci_dev = to_pci_dev(dev); | ||
391 | struct pci_driver * drv = pci_dev->driver; | ||
392 | |||
393 | pci_fixup_device(pci_fixup_resume_early, pci_dev); | ||
394 | |||
395 | if (drv && drv->resume_early) | ||
396 | error = drv->resume_early(pci_dev); | ||
397 | return error; | ||
398 | } | ||
399 | |||
387 | static int pci_legacy_resume(struct device *dev) | 400 | static int pci_legacy_resume(struct device *dev) |
388 | { | 401 | { |
389 | int error; | 402 | int error; |
@@ -402,19 +415,6 @@ static int pci_legacy_resume(struct device *dev) | |||
402 | return error; | 415 | return error; |
403 | } | 416 | } |
404 | 417 | ||
405 | static int pci_legacy_resume_early(struct device *dev) | ||
406 | { | ||
407 | int error = 0; | ||
408 | struct pci_dev * pci_dev = to_pci_dev(dev); | ||
409 | struct pci_driver * drv = pci_dev->driver; | ||
410 | |||
411 | pci_fixup_device(pci_fixup_resume_early, pci_dev); | ||
412 | |||
413 | if (drv && drv->resume_early) | ||
414 | error = drv->resume_early(pci_dev); | ||
415 | return error; | ||
416 | } | ||
417 | |||
418 | /* Auxiliary functions used by the new power management framework */ | 418 | /* Auxiliary functions used by the new power management framework */ |
419 | 419 | ||
420 | static int pci_restore_standard_config(struct pci_dev *pci_dev) | 420 | static int pci_restore_standard_config(struct pci_dev *pci_dev) |
@@ -569,36 +569,36 @@ static int pci_pm_suspend_noirq(struct device *dev) | |||
569 | return error; | 569 | return error; |
570 | } | 570 | } |
571 | 571 | ||
572 | static int pci_pm_resume(struct device *dev) | 572 | static int pci_pm_resume_noirq(struct device *dev) |
573 | { | 573 | { |
574 | struct pci_dev *pci_dev = to_pci_dev(dev); | 574 | struct pci_dev *pci_dev = to_pci_dev(dev); |
575 | struct device_driver *drv = dev->driver; | 575 | struct device_driver *drv = dev->driver; |
576 | int error = 0; | 576 | int error = 0; |
577 | 577 | ||
578 | if (pci_has_legacy_pm_support(pci_dev)) | 578 | if (pci_has_legacy_pm_support(pci_dev)) |
579 | return pci_legacy_resume(dev); | 579 | return pci_legacy_resume_early(dev); |
580 | 580 | ||
581 | error = pci_pm_default_resume(pci_dev); | 581 | pci_pm_default_resume_noirq(pci_dev); |
582 | 582 | ||
583 | if (!error && drv && drv->pm && drv->pm->resume) | 583 | if (drv && drv->pm && drv->pm->resume_noirq) |
584 | error = drv->pm->resume(dev); | 584 | error = drv->pm->resume_noirq(dev); |
585 | 585 | ||
586 | return error; | 586 | return error; |
587 | } | 587 | } |
588 | 588 | ||
589 | static int pci_pm_resume_noirq(struct device *dev) | 589 | static int pci_pm_resume(struct device *dev) |
590 | { | 590 | { |
591 | struct pci_dev *pci_dev = to_pci_dev(dev); | 591 | struct pci_dev *pci_dev = to_pci_dev(dev); |
592 | struct device_driver *drv = dev->driver; | 592 | struct device_driver *drv = dev->driver; |
593 | int error = 0; | 593 | int error = 0; |
594 | 594 | ||
595 | if (pci_has_legacy_pm_support(pci_dev)) | 595 | if (pci_has_legacy_pm_support(pci_dev)) |
596 | return pci_legacy_resume_early(dev); | 596 | return pci_legacy_resume(dev); |
597 | 597 | ||
598 | pci_pm_default_resume_noirq(pci_dev); | 598 | error = pci_pm_default_resume(pci_dev); |
599 | 599 | ||
600 | if (drv && drv->pm && drv->pm->resume_noirq) | 600 | if (!error && drv && drv->pm && drv->pm->resume) |
601 | error = drv->pm->resume_noirq(dev); | 601 | error = drv->pm->resume(dev); |
602 | 602 | ||
603 | return error; | 603 | return error; |
604 | } | 604 | } |
@@ -654,36 +654,36 @@ static int pci_pm_freeze_noirq(struct device *dev) | |||
654 | return error; | 654 | return error; |
655 | } | 655 | } |
656 | 656 | ||
657 | static int pci_pm_thaw(struct device *dev) | 657 | static int pci_pm_thaw_noirq(struct device *dev) |
658 | { | 658 | { |
659 | struct pci_dev *pci_dev = to_pci_dev(dev); | 659 | struct pci_dev *pci_dev = to_pci_dev(dev); |
660 | struct device_driver *drv = dev->driver; | 660 | struct device_driver *drv = dev->driver; |
661 | int error = 0; | 661 | int error = 0; |
662 | 662 | ||
663 | if (pci_has_legacy_pm_support(pci_dev)) | 663 | if (pci_has_legacy_pm_support(pci_dev)) |
664 | return pci_legacy_resume(dev); | 664 | return pci_legacy_resume_early(dev); |
665 | 665 | ||
666 | pci_pm_reenable_device(pci_dev); | 666 | pci_update_current_state(pci_dev, PCI_D0); |
667 | 667 | ||
668 | if (drv && drv->pm && drv->pm->thaw) | 668 | if (drv && drv->pm && drv->pm->thaw_noirq) |
669 | error = drv->pm->thaw(dev); | 669 | error = drv->pm->thaw_noirq(dev); |
670 | 670 | ||
671 | return error; | 671 | return error; |
672 | } | 672 | } |
673 | 673 | ||
674 | static int pci_pm_thaw_noirq(struct device *dev) | 674 | static int pci_pm_thaw(struct device *dev) |
675 | { | 675 | { |
676 | struct pci_dev *pci_dev = to_pci_dev(dev); | 676 | struct pci_dev *pci_dev = to_pci_dev(dev); |
677 | struct device_driver *drv = dev->driver; | 677 | struct device_driver *drv = dev->driver; |
678 | int error = 0; | 678 | int error = 0; |
679 | 679 | ||
680 | if (pci_has_legacy_pm_support(pci_dev)) | 680 | if (pci_has_legacy_pm_support(pci_dev)) |
681 | return pci_legacy_resume_early(dev); | 681 | return pci_legacy_resume(dev); |
682 | 682 | ||
683 | pci_update_current_state(pci_dev, PCI_D0); | 683 | pci_pm_reenable_device(pci_dev); |
684 | 684 | ||
685 | if (drv && drv->pm && drv->pm->thaw_noirq) | 685 | if (drv && drv->pm && drv->pm->thaw) |
686 | error = drv->pm->thaw_noirq(dev); | 686 | error = drv->pm->thaw(dev); |
687 | 687 | ||
688 | return error; | 688 | return error; |
689 | } | 689 | } |
@@ -724,36 +724,36 @@ static int pci_pm_poweroff_noirq(struct device *dev) | |||
724 | return error; | 724 | return error; |
725 | } | 725 | } |
726 | 726 | ||
727 | static int pci_pm_restore(struct device *dev) | 727 | static int pci_pm_restore_noirq(struct device *dev) |
728 | { | 728 | { |
729 | struct pci_dev *pci_dev = to_pci_dev(dev); | 729 | struct pci_dev *pci_dev = to_pci_dev(dev); |
730 | struct device_driver *drv = dev->driver; | 730 | struct device_driver *drv = dev->driver; |
731 | int error = 0; | 731 | int error = 0; |
732 | 732 | ||
733 | if (pci_has_legacy_pm_support(pci_dev)) | 733 | if (pci_has_legacy_pm_support(pci_dev)) |
734 | return pci_legacy_resume(dev); | 734 | return pci_legacy_resume_early(dev); |
735 | 735 | ||
736 | error = pci_pm_default_resume(pci_dev); | 736 | pci_pm_default_resume_noirq(pci_dev); |
737 | 737 | ||
738 | if (!error && drv && drv->pm && drv->pm->restore) | 738 | if (drv && drv->pm && drv->pm->restore_noirq) |
739 | error = drv->pm->restore(dev); | 739 | error = drv->pm->restore_noirq(dev); |
740 | 740 | ||
741 | return error; | 741 | return error; |
742 | } | 742 | } |
743 | 743 | ||
744 | static int pci_pm_restore_noirq(struct device *dev) | 744 | static int pci_pm_restore(struct device *dev) |
745 | { | 745 | { |
746 | struct pci_dev *pci_dev = to_pci_dev(dev); | 746 | struct pci_dev *pci_dev = to_pci_dev(dev); |
747 | struct device_driver *drv = dev->driver; | 747 | struct device_driver *drv = dev->driver; |
748 | int error = 0; | 748 | int error = 0; |
749 | 749 | ||
750 | if (pci_has_legacy_pm_support(pci_dev)) | 750 | if (pci_has_legacy_pm_support(pci_dev)) |
751 | return pci_legacy_resume_early(dev); | 751 | return pci_legacy_resume(dev); |
752 | 752 | ||
753 | pci_pm_default_resume_noirq(pci_dev); | 753 | error = pci_pm_default_resume(pci_dev); |
754 | 754 | ||
755 | if (drv && drv->pm && drv->pm->restore_noirq) | 755 | if (!error && drv && drv->pm && drv->pm->restore) |
756 | error = drv->pm->restore_noirq(dev); | 756 | error = drv->pm->restore(dev); |
757 | 757 | ||
758 | return error; | 758 | return error; |
759 | } | 759 | } |