aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/base/platform.c35
-rw-r--r--include/linux/platform_device.h3
2 files changed, 38 insertions, 0 deletions
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 579906f88b09..a01abf9ebf7b 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -976,6 +976,41 @@ struct bus_type platform_bus_type = {
976}; 976};
977EXPORT_SYMBOL_GPL(platform_bus_type); 977EXPORT_SYMBOL_GPL(platform_bus_type);
978 978
979/**
980 * platform_bus_get_pm_ops() - return pointer to busses dev_pm_ops
981 *
982 * This function can be used by platform code to get the current
983 * set of dev_pm_ops functions used by the platform_bus_type.
984 */
985const struct dev_pm_ops * __init platform_bus_get_pm_ops(void)
986{
987 return platform_bus_type.pm;
988}
989
990/**
991 * platform_bus_set_pm_ops() - update dev_pm_ops for the platform_bus_type
992 *
993 * @pm: pointer to new dev_pm_ops struct to be used for platform_bus_type
994 *
995 * Platform code can override the dev_pm_ops methods of
996 * platform_bus_type by using this function. It is expected that
997 * platform code will first do a platform_bus_get_pm_ops(), then
998 * kmemdup it, then customize selected methods and pass a pointer to
999 * the new struct dev_pm_ops to this function.
1000 *
1001 * Since platform-specific code is customizing methods for *all*
1002 * devices (not just platform-specific devices) it is expected that
1003 * any custom overrides of these functions will keep existing behavior
1004 * and simply extend it. For example, any customization of the
1005 * runtime PM methods should continue to call the pm_generic_*
1006 * functions as the default ones do in addition to the
1007 * platform-specific behavior.
1008 */
1009void __init platform_bus_set_pm_ops(const struct dev_pm_ops *pm)
1010{
1011 platform_bus_type.pm = pm;
1012}
1013
979int __init platform_bus_init(void) 1014int __init platform_bus_init(void)
980{ 1015{
981 int error; 1016 int error;
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
index d7ecad0093bb..2e700ec0601f 100644
--- a/include/linux/platform_device.h
+++ b/include/linux/platform_device.h
@@ -138,6 +138,9 @@ extern struct platform_device *platform_create_bundle(struct platform_driver *dr
138 struct resource *res, unsigned int n_res, 138 struct resource *res, unsigned int n_res,
139 const void *data, size_t size); 139 const void *data, size_t size);
140 140
141extern const struct dev_pm_ops * platform_bus_get_pm_ops(void);
142extern void platform_bus_set_pm_ops(const struct dev_pm_ops *pm);
143
141/* early platform driver interface */ 144/* early platform driver interface */
142struct early_platform_driver { 145struct early_platform_driver {
143 const char *class_str; 146 const char *class_str;