diff options
-rw-r--r-- | drivers/base/power/common.c | 15 | ||||
-rw-r--r-- | drivers/base/power/domain.c | 2 | ||||
-rw-r--r-- | drivers/base/power/runtime.c | 2 | ||||
-rw-r--r-- | include/linux/device.h | 7 | ||||
-rw-r--r-- | include/linux/pm.h | 6 |
5 files changed, 10 insertions, 22 deletions
diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c index cf7a85134730..39c32529b833 100644 --- a/drivers/base/power/common.c +++ b/drivers/base/power/common.c | |||
@@ -83,18 +83,3 @@ int dev_pm_put_subsys_data(struct device *dev) | |||
83 | return ret; | 83 | return ret; |
84 | } | 84 | } |
85 | EXPORT_SYMBOL_GPL(dev_pm_put_subsys_data); | 85 | EXPORT_SYMBOL_GPL(dev_pm_put_subsys_data); |
86 | |||
87 | /** | ||
88 | * dev_pm_syscore_device - Set/unset the given device's power.syscore flag. | ||
89 | * @dev: Device whose flag is to be modified. | ||
90 | * @val: New value of the flag. | ||
91 | */ | ||
92 | void dev_pm_syscore_device(struct device *dev, bool val) | ||
93 | { | ||
94 | unsigned long flags; | ||
95 | |||
96 | spin_lock_irqsave(&dev->power.lock, flags); | ||
97 | dev->power.syscore = val; | ||
98 | spin_unlock_irqrestore(&dev->power.lock, flags); | ||
99 | } | ||
100 | EXPORT_SYMBOL_GPL(dev_pm_syscore_device); | ||
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index d7e71b5b080e..5f4606f13be6 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c | |||
@@ -442,7 +442,7 @@ static int pm_genpd_poweroff(struct generic_pm_domain *genpd) | |||
442 | not_suspended = 0; | 442 | not_suspended = 0; |
443 | list_for_each_entry(pdd, &genpd->dev_list, list_node) | 443 | list_for_each_entry(pdd, &genpd->dev_list, list_node) |
444 | if (pdd->dev->driver && (!pm_runtime_suspended(pdd->dev) | 444 | if (pdd->dev->driver && (!pm_runtime_suspended(pdd->dev) |
445 | || pdd->dev->power.irq_safe || pdd->dev->power.syscore)) | 445 | || pdd->dev->power.irq_safe)) |
446 | not_suspended++; | 446 | not_suspended++; |
447 | 447 | ||
448 | if (not_suspended > genpd->in_progress) | 448 | if (not_suspended > genpd->in_progress) |
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index bd1de3980919..7d9c1cb1c39a 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c | |||
@@ -134,7 +134,7 @@ static int rpm_check_suspend_allowed(struct device *dev) | |||
134 | 134 | ||
135 | if (dev->power.runtime_error) | 135 | if (dev->power.runtime_error) |
136 | retval = -EINVAL; | 136 | retval = -EINVAL; |
137 | else if (dev->power.disable_depth > 0 || dev->power.syscore) | 137 | else if (dev->power.disable_depth > 0) |
138 | retval = -EACCES; | 138 | retval = -EACCES; |
139 | else if (atomic_read(&dev->power.usage_count) > 0) | 139 | else if (atomic_read(&dev->power.usage_count) > 0) |
140 | retval = -EAGAIN; | 140 | retval = -EAGAIN; |
diff --git a/include/linux/device.h b/include/linux/device.h index 52a5f15a2223..86529e642d6c 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -772,6 +772,13 @@ static inline void pm_suspend_ignore_children(struct device *dev, bool enable) | |||
772 | dev->power.ignore_children = enable; | 772 | dev->power.ignore_children = enable; |
773 | } | 773 | } |
774 | 774 | ||
775 | static inline void dev_pm_syscore_device(struct device *dev, bool val) | ||
776 | { | ||
777 | #ifdef CONFIG_PM_SLEEP | ||
778 | dev->power.syscore = val; | ||
779 | #endif | ||
780 | } | ||
781 | |||
775 | static inline void device_lock(struct device *dev) | 782 | static inline void device_lock(struct device *dev) |
776 | { | 783 | { |
777 | mutex_lock(&dev->mutex); | 784 | mutex_lock(&dev->mutex); |
diff --git a/include/linux/pm.h b/include/linux/pm.h index b79a0dd3bc6d..44d1f2307dbc 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
@@ -43,12 +43,8 @@ struct device; | |||
43 | 43 | ||
44 | #ifdef CONFIG_PM | 44 | #ifdef CONFIG_PM |
45 | extern const char power_group_name[]; /* = "power" */ | 45 | extern const char power_group_name[]; /* = "power" */ |
46 | |||
47 | extern void dev_pm_syscore_device(struct device *dev, bool val); | ||
48 | #else | 46 | #else |
49 | #define power_group_name NULL | 47 | #define power_group_name NULL |
50 | |||
51 | static inline void dev_pm_syscore_device(struct device *dev, bool val) {} | ||
52 | #endif | 48 | #endif |
53 | 49 | ||
54 | typedef struct pm_message { | 50 | typedef struct pm_message { |
@@ -515,13 +511,13 @@ struct dev_pm_info { | |||
515 | bool is_suspended:1; /* Ditto */ | 511 | bool is_suspended:1; /* Ditto */ |
516 | bool ignore_children:1; | 512 | bool ignore_children:1; |
517 | bool early_init:1; /* Owned by the PM core */ | 513 | bool early_init:1; /* Owned by the PM core */ |
518 | bool syscore:1; | ||
519 | spinlock_t lock; | 514 | spinlock_t lock; |
520 | #ifdef CONFIG_PM_SLEEP | 515 | #ifdef CONFIG_PM_SLEEP |
521 | struct list_head entry; | 516 | struct list_head entry; |
522 | struct completion completion; | 517 | struct completion completion; |
523 | struct wakeup_source *wakeup; | 518 | struct wakeup_source *wakeup; |
524 | bool wakeup_path:1; | 519 | bool wakeup_path:1; |
520 | bool syscore:1; | ||
525 | #else | 521 | #else |
526 | unsigned int should_wakeup:1; | 522 | unsigned int should_wakeup:1; |
527 | #endif | 523 | #endif |