diff options
-rw-r--r-- | drivers/base/platform.c | 72 | ||||
-rw-r--r-- | include/linux/platform_device.h | 60 |
2 files changed, 78 insertions, 54 deletions
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 9e0e4fc24c46..313556f28c9e 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c | |||
@@ -667,7 +667,7 @@ static int platform_legacy_resume(struct device *dev) | |||
667 | return ret; | 667 | return ret; |
668 | } | 668 | } |
669 | 669 | ||
670 | static int platform_pm_prepare(struct device *dev) | 670 | int platform_pm_prepare(struct device *dev) |
671 | { | 671 | { |
672 | struct device_driver *drv = dev->driver; | 672 | struct device_driver *drv = dev->driver; |
673 | int ret = 0; | 673 | int ret = 0; |
@@ -678,7 +678,7 @@ static int platform_pm_prepare(struct device *dev) | |||
678 | return ret; | 678 | return ret; |
679 | } | 679 | } |
680 | 680 | ||
681 | static void platform_pm_complete(struct device *dev) | 681 | void platform_pm_complete(struct device *dev) |
682 | { | 682 | { |
683 | struct device_driver *drv = dev->driver; | 683 | struct device_driver *drv = dev->driver; |
684 | 684 | ||
@@ -686,16 +686,11 @@ static void platform_pm_complete(struct device *dev) | |||
686 | drv->pm->complete(dev); | 686 | drv->pm->complete(dev); |
687 | } | 687 | } |
688 | 688 | ||
689 | #else /* !CONFIG_PM_SLEEP */ | 689 | #endif /* CONFIG_PM_SLEEP */ |
690 | |||
691 | #define platform_pm_prepare NULL | ||
692 | #define platform_pm_complete NULL | ||
693 | |||
694 | #endif /* !CONFIG_PM_SLEEP */ | ||
695 | 690 | ||
696 | #ifdef CONFIG_SUSPEND | 691 | #ifdef CONFIG_SUSPEND |
697 | 692 | ||
698 | int __weak platform_pm_suspend(struct device *dev) | 693 | int platform_pm_suspend(struct device *dev) |
699 | { | 694 | { |
700 | struct device_driver *drv = dev->driver; | 695 | struct device_driver *drv = dev->driver; |
701 | int ret = 0; | 696 | int ret = 0; |
@@ -713,7 +708,7 @@ int __weak platform_pm_suspend(struct device *dev) | |||
713 | return ret; | 708 | return ret; |
714 | } | 709 | } |
715 | 710 | ||
716 | int __weak platform_pm_suspend_noirq(struct device *dev) | 711 | int platform_pm_suspend_noirq(struct device *dev) |
717 | { | 712 | { |
718 | struct device_driver *drv = dev->driver; | 713 | struct device_driver *drv = dev->driver; |
719 | int ret = 0; | 714 | int ret = 0; |
@@ -729,7 +724,7 @@ int __weak platform_pm_suspend_noirq(struct device *dev) | |||
729 | return ret; | 724 | return ret; |
730 | } | 725 | } |
731 | 726 | ||
732 | int __weak platform_pm_resume(struct device *dev) | 727 | int platform_pm_resume(struct device *dev) |
733 | { | 728 | { |
734 | struct device_driver *drv = dev->driver; | 729 | struct device_driver *drv = dev->driver; |
735 | int ret = 0; | 730 | int ret = 0; |
@@ -747,7 +742,7 @@ int __weak platform_pm_resume(struct device *dev) | |||
747 | return ret; | 742 | return ret; |
748 | } | 743 | } |
749 | 744 | ||
750 | int __weak platform_pm_resume_noirq(struct device *dev) | 745 | int platform_pm_resume_noirq(struct device *dev) |
751 | { | 746 | { |
752 | struct device_driver *drv = dev->driver; | 747 | struct device_driver *drv = dev->driver; |
753 | int ret = 0; | 748 | int ret = 0; |
@@ -763,18 +758,11 @@ int __weak platform_pm_resume_noirq(struct device *dev) | |||
763 | return ret; | 758 | return ret; |
764 | } | 759 | } |
765 | 760 | ||
766 | #else /* !CONFIG_SUSPEND */ | 761 | #endif /* CONFIG_SUSPEND */ |
767 | |||
768 | #define platform_pm_suspend NULL | ||
769 | #define platform_pm_resume NULL | ||
770 | #define platform_pm_suspend_noirq NULL | ||
771 | #define platform_pm_resume_noirq NULL | ||
772 | |||
773 | #endif /* !CONFIG_SUSPEND */ | ||
774 | 762 | ||
775 | #ifdef CONFIG_HIBERNATE_CALLBACKS | 763 | #ifdef CONFIG_HIBERNATE_CALLBACKS |
776 | 764 | ||
777 | static int platform_pm_freeze(struct device *dev) | 765 | int platform_pm_freeze(struct device *dev) |
778 | { | 766 | { |
779 | struct device_driver *drv = dev->driver; | 767 | struct device_driver *drv = dev->driver; |
780 | int ret = 0; | 768 | int ret = 0; |
@@ -792,7 +780,7 @@ static int platform_pm_freeze(struct device *dev) | |||
792 | return ret; | 780 | return ret; |
793 | } | 781 | } |
794 | 782 | ||
795 | static int platform_pm_freeze_noirq(struct device *dev) | 783 | int platform_pm_freeze_noirq(struct device *dev) |
796 | { | 784 | { |
797 | struct device_driver *drv = dev->driver; | 785 | struct device_driver *drv = dev->driver; |
798 | int ret = 0; | 786 | int ret = 0; |
@@ -808,7 +796,7 @@ static int platform_pm_freeze_noirq(struct device *dev) | |||
808 | return ret; | 796 | return ret; |
809 | } | 797 | } |
810 | 798 | ||
811 | static int platform_pm_thaw(struct device *dev) | 799 | int platform_pm_thaw(struct device *dev) |
812 | { | 800 | { |
813 | struct device_driver *drv = dev->driver; | 801 | struct device_driver *drv = dev->driver; |
814 | int ret = 0; | 802 | int ret = 0; |
@@ -826,7 +814,7 @@ static int platform_pm_thaw(struct device *dev) | |||
826 | return ret; | 814 | return ret; |
827 | } | 815 | } |
828 | 816 | ||
829 | static int platform_pm_thaw_noirq(struct device *dev) | 817 | int platform_pm_thaw_noirq(struct device *dev) |
830 | { | 818 | { |
831 | struct device_driver *drv = dev->driver; | 819 | struct device_driver *drv = dev->driver; |
832 | int ret = 0; | 820 | int ret = 0; |
@@ -842,7 +830,7 @@ static int platform_pm_thaw_noirq(struct device *dev) | |||
842 | return ret; | 830 | return ret; |
843 | } | 831 | } |
844 | 832 | ||
845 | static int platform_pm_poweroff(struct device *dev) | 833 | int platform_pm_poweroff(struct device *dev) |
846 | { | 834 | { |
847 | struct device_driver *drv = dev->driver; | 835 | struct device_driver *drv = dev->driver; |
848 | int ret = 0; | 836 | int ret = 0; |
@@ -860,7 +848,7 @@ static int platform_pm_poweroff(struct device *dev) | |||
860 | return ret; | 848 | return ret; |
861 | } | 849 | } |
862 | 850 | ||
863 | static int platform_pm_poweroff_noirq(struct device *dev) | 851 | int platform_pm_poweroff_noirq(struct device *dev) |
864 | { | 852 | { |
865 | struct device_driver *drv = dev->driver; | 853 | struct device_driver *drv = dev->driver; |
866 | int ret = 0; | 854 | int ret = 0; |
@@ -876,7 +864,7 @@ static int platform_pm_poweroff_noirq(struct device *dev) | |||
876 | return ret; | 864 | return ret; |
877 | } | 865 | } |
878 | 866 | ||
879 | static int platform_pm_restore(struct device *dev) | 867 | int platform_pm_restore(struct device *dev) |
880 | { | 868 | { |
881 | struct device_driver *drv = dev->driver; | 869 | struct device_driver *drv = dev->driver; |
882 | int ret = 0; | 870 | int ret = 0; |
@@ -894,7 +882,7 @@ static int platform_pm_restore(struct device *dev) | |||
894 | return ret; | 882 | return ret; |
895 | } | 883 | } |
896 | 884 | ||
897 | static int platform_pm_restore_noirq(struct device *dev) | 885 | int platform_pm_restore_noirq(struct device *dev) |
898 | { | 886 | { |
899 | struct device_driver *drv = dev->driver; | 887 | struct device_driver *drv = dev->driver; |
900 | int ret = 0; | 888 | int ret = 0; |
@@ -910,18 +898,7 @@ static int platform_pm_restore_noirq(struct device *dev) | |||
910 | return ret; | 898 | return ret; |
911 | } | 899 | } |
912 | 900 | ||
913 | #else /* !CONFIG_HIBERNATE_CALLBACKS */ | 901 | #endif /* CONFIG_HIBERNATE_CALLBACKS */ |
914 | |||
915 | #define platform_pm_freeze NULL | ||
916 | #define platform_pm_thaw NULL | ||
917 | #define platform_pm_poweroff NULL | ||
918 | #define platform_pm_restore NULL | ||
919 | #define platform_pm_freeze_noirq NULL | ||
920 | #define platform_pm_thaw_noirq NULL | ||
921 | #define platform_pm_poweroff_noirq NULL | ||
922 | #define platform_pm_restore_noirq NULL | ||
923 | |||
924 | #endif /* !CONFIG_HIBERNATE_CALLBACKS */ | ||
925 | 902 | ||
926 | #ifdef CONFIG_PM_RUNTIME | 903 | #ifdef CONFIG_PM_RUNTIME |
927 | 904 | ||
@@ -949,23 +926,10 @@ int __weak platform_pm_runtime_idle(struct device *dev) | |||
949 | #endif /* !CONFIG_PM_RUNTIME */ | 926 | #endif /* !CONFIG_PM_RUNTIME */ |
950 | 927 | ||
951 | static const struct dev_pm_ops platform_dev_pm_ops = { | 928 | static const struct dev_pm_ops platform_dev_pm_ops = { |
952 | .prepare = platform_pm_prepare, | ||
953 | .complete = platform_pm_complete, | ||
954 | .suspend = platform_pm_suspend, | ||
955 | .resume = platform_pm_resume, | ||
956 | .freeze = platform_pm_freeze, | ||
957 | .thaw = platform_pm_thaw, | ||
958 | .poweroff = platform_pm_poweroff, | ||
959 | .restore = platform_pm_restore, | ||
960 | .suspend_noirq = platform_pm_suspend_noirq, | ||
961 | .resume_noirq = platform_pm_resume_noirq, | ||
962 | .freeze_noirq = platform_pm_freeze_noirq, | ||
963 | .thaw_noirq = platform_pm_thaw_noirq, | ||
964 | .poweroff_noirq = platform_pm_poweroff_noirq, | ||
965 | .restore_noirq = platform_pm_restore_noirq, | ||
966 | .runtime_suspend = platform_pm_runtime_suspend, | 929 | .runtime_suspend = platform_pm_runtime_suspend, |
967 | .runtime_resume = platform_pm_runtime_resume, | 930 | .runtime_resume = platform_pm_runtime_resume, |
968 | .runtime_idle = platform_pm_runtime_idle, | 931 | .runtime_idle = platform_pm_runtime_idle, |
932 | USE_PLATFORM_PM_SLEEP_OPS | ||
969 | }; | 933 | }; |
970 | 934 | ||
971 | struct bus_type platform_bus_type = { | 935 | struct bus_type platform_bus_type = { |
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index 744942c95fec..e0093e061b08 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h | |||
@@ -205,4 +205,64 @@ static inline char *early_platform_driver_setup_func(void) \ | |||
205 | } | 205 | } |
206 | #endif /* MODULE */ | 206 | #endif /* MODULE */ |
207 | 207 | ||
208 | #ifdef CONFIG_PM_SLEEP | ||
209 | extern int platform_pm_prepare(struct device *dev); | ||
210 | extern void platform_pm_complete(struct device *dev); | ||
211 | #else | ||
212 | #define platform_pm_prepare NULL | ||
213 | #define platform_pm_complete NULL | ||
214 | #endif | ||
215 | |||
216 | #ifdef CONFIG_SUSPEND | ||
217 | extern int platform_pm_suspend(struct device *dev); | ||
218 | extern int platform_pm_suspend_noirq(struct device *dev); | ||
219 | extern int platform_pm_resume(struct device *dev); | ||
220 | extern int platform_pm_resume_noirq(struct device *dev); | ||
221 | #else | ||
222 | #define platform_pm_suspend NULL | ||
223 | #define platform_pm_resume NULL | ||
224 | #define platform_pm_suspend_noirq NULL | ||
225 | #define platform_pm_resume_noirq NULL | ||
226 | #endif | ||
227 | |||
228 | #ifdef CONFIG_HIBERNATE_CALLBACKS | ||
229 | extern int platform_pm_freeze(struct device *dev); | ||
230 | extern int platform_pm_freeze_noirq(struct device *dev); | ||
231 | extern int platform_pm_thaw(struct device *dev); | ||
232 | extern int platform_pm_thaw_noirq(struct device *dev); | ||
233 | extern int platform_pm_poweroff(struct device *dev); | ||
234 | extern int platform_pm_poweroff_noirq(struct device *dev); | ||
235 | extern int platform_pm_restore(struct device *dev); | ||
236 | extern int platform_pm_restore_noirq(struct device *dev); | ||
237 | #else | ||
238 | #define platform_pm_freeze NULL | ||
239 | #define platform_pm_thaw NULL | ||
240 | #define platform_pm_poweroff NULL | ||
241 | #define platform_pm_restore NULL | ||
242 | #define platform_pm_freeze_noirq NULL | ||
243 | #define platform_pm_thaw_noirq NULL | ||
244 | #define platform_pm_poweroff_noirq NULL | ||
245 | #define platform_pm_restore_noirq NULL | ||
246 | #endif | ||
247 | |||
248 | #ifdef CONFIG_PM_SLEEP | ||
249 | #define USE_PLATFORM_PM_SLEEP_OPS \ | ||
250 | .prepare = platform_pm_prepare, \ | ||
251 | .complete = platform_pm_complete, \ | ||
252 | .suspend = platform_pm_suspend, \ | ||
253 | .resume = platform_pm_resume, \ | ||
254 | .freeze = platform_pm_freeze, \ | ||
255 | .thaw = platform_pm_thaw, \ | ||
256 | .poweroff = platform_pm_poweroff, \ | ||
257 | .restore = platform_pm_restore, \ | ||
258 | .suspend_noirq = platform_pm_suspend_noirq, \ | ||
259 | .resume_noirq = platform_pm_resume_noirq, \ | ||
260 | .freeze_noirq = platform_pm_freeze_noirq, \ | ||
261 | .thaw_noirq = platform_pm_thaw_noirq, \ | ||
262 | .poweroff_noirq = platform_pm_poweroff_noirq, \ | ||
263 | .restore_noirq = platform_pm_restore_noirq, | ||
264 | #else | ||
265 | #define USE_PLATFORM_PM_SLEEP_OPS | ||
266 | #endif | ||
267 | |||
208 | #endif /* _PLATFORM_DEVICE_H_ */ | 268 | #endif /* _PLATFORM_DEVICE_H_ */ |