aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2011-04-28 18:36:05 -0400
committerRafael J. Wysocki <rjw@sisk.pl>2011-04-28 18:36:05 -0400
commit69c9dd1ecf446ad8a830e4afc539a2a1adc85b78 (patch)
tree2c43906b23ce709057b7cc0546fbcf31d1f9a8d6
parent4d27e9dcff00a6425d779b065ec8892e4f391661 (diff)
PM: Export platform bus type's default PM callbacks
Export the default PM callbacks defined for the platform bus type so that they can be used by power domains for suspending and resuming platform devices in the future. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
-rw-r--r--drivers/base/platform.c72
-rw-r--r--include/linux/platform_device.h60
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
670static int platform_pm_prepare(struct device *dev) 670int 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
681static void platform_pm_complete(struct device *dev) 681void 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
698int __weak platform_pm_suspend(struct device *dev) 693int 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
716int __weak platform_pm_suspend_noirq(struct device *dev) 711int 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
732int __weak platform_pm_resume(struct device *dev) 727int 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
750int __weak platform_pm_resume_noirq(struct device *dev) 745int 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
777static int platform_pm_freeze(struct device *dev) 765int 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
795static int platform_pm_freeze_noirq(struct device *dev) 783int 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
811static int platform_pm_thaw(struct device *dev) 799int 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
829static int platform_pm_thaw_noirq(struct device *dev) 817int 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
845static int platform_pm_poweroff(struct device *dev) 833int 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
863static int platform_pm_poweroff_noirq(struct device *dev) 851int 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
879static int platform_pm_restore(struct device *dev) 867int 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
897static int platform_pm_restore_noirq(struct device *dev) 885int 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
951static const struct dev_pm_ops platform_dev_pm_ops = { 928static 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
971struct bus_type platform_bus_type = { 935struct 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
209extern int platform_pm_prepare(struct device *dev);
210extern 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
217extern int platform_pm_suspend(struct device *dev);
218extern int platform_pm_suspend_noirq(struct device *dev);
219extern int platform_pm_resume(struct device *dev);
220extern 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
229extern int platform_pm_freeze(struct device *dev);
230extern int platform_pm_freeze_noirq(struct device *dev);
231extern int platform_pm_thaw(struct device *dev);
232extern int platform_pm_thaw_noirq(struct device *dev);
233extern int platform_pm_poweroff(struct device *dev);
234extern int platform_pm_poweroff_noirq(struct device *dev);
235extern int platform_pm_restore(struct device *dev);
236extern 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_ */