|
@@ -44,6 +44,32 @@ int pm_notifier_call_chain(unsigned long val)
|
|
|
== NOTIFY_BAD) ? -EINVAL : 0;
|
|
|
}
|
|
|
|
|
|
+/* If set, devices may be suspended and resumed asynchronously. */
|
|
|
+int pm_async_enabled = 1;
|
|
|
+
|
|
|
+static ssize_t pm_async_show(struct kobject *kobj, struct kobj_attribute *attr,
|
|
|
+ char *buf)
|
|
|
+{
|
|
|
+ return sprintf(buf, "%d\n", pm_async_enabled);
|
|
|
+}
|
|
|
+
|
|
|
+static ssize_t pm_async_store(struct kobject *kobj, struct kobj_attribute *attr,
|
|
|
+ const char *buf, size_t n)
|
|
|
+{
|
|
|
+ unsigned long val;
|
|
|
+
|
|
|
+ if (strict_strtoul(buf, 10, &val))
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ if (val > 1)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ pm_async_enabled = val;
|
|
|
+ return n;
|
|
|
+}
|
|
|
+
|
|
|
+power_attr(pm_async);
|
|
|
+
|
|
|
#ifdef CONFIG_PM_DEBUG
|
|
|
int pm_test_level = TEST_NONE;
|
|
|
|
|
@@ -208,8 +234,11 @@ static struct attribute * g[] = {
|
|
|
#ifdef CONFIG_PM_TRACE
|
|
|
&pm_trace_attr.attr,
|
|
|
#endif
|
|
|
-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PM_DEBUG)
|
|
|
+#ifdef CONFIG_PM_SLEEP
|
|
|
+ &pm_async_attr.attr,
|
|
|
+#ifdef CONFIG_PM_DEBUG
|
|
|
&pm_test_attr.attr,
|
|
|
+#endif
|
|
|
#endif
|
|
|
NULL,
|
|
|
};
|