linux-sh.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Linux PM mailing list <linux-pm@lists.linux-foundation.org>
Cc: Greg KH <gregkh@suse.de>, LKML <linux-kernel@vger.kernel.org>,
	Kevin Hilman <khilman@ti.com>,
	Grant Likely <grant.likely@secretlab.ca>,
	Magnus Damm <magnus.damm@gmail.com>,
	linux-sh@vger.kernel.org, MyungJoo Ham <myungjoo.ham@gmail.com>,
	Guennadi Liakhovetski <g.liakhovetski@gmx.de>,
	Alan Stern <stern@rowland.harvard.edu>
Subject: [PATCH 1/6] PM: Introduce generic prepare and complete callbacks for subsystems
Date: Sun, 15 May 2011 23:30:27 +0000	[thread overview]
Message-ID: <201105160130.28322.rjw@sisk.pl> (raw)
In-Reply-To: <201105160117.46927.rjw@sisk.pl>

From: Rafael J. Wysocki <rjw@sisk.pl>

Introduce generic .prepare() and .complete() power management
callbacks, currently missing, that can be used by subsystems and
power domains and export them.  Provide NULL definitions of all
the generic system sleep callbacks for CONFIG_PM_SLEEP unset.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
 drivers/base/power/generic_ops.c |   39 +++++++++++++++++++++++++++++++++++++++
 include/linux/pm.h               |   26 +++++++++++++++++++-------
 2 files changed, 58 insertions(+), 7 deletions(-)

Index: linux-2.6/drivers/base/power/generic_ops.c
=================================--- linux-2.6.orig/drivers/base/power/generic_ops.c
+++ linux-2.6/drivers/base/power/generic_ops.c
@@ -74,6 +74,23 @@ EXPORT_SYMBOL_GPL(pm_generic_runtime_res
 
 #ifdef CONFIG_PM_SLEEP
 /**
+ * pm_generic_prepare - Generic routine preparing a device for power transition.
+ * @dev: Device to prepare.
+ *
+ * Prepare a device for a system-wide power transition.
+ */
+int pm_generic_prepare(struct device *dev)
+{
+	struct device_driver *drv = dev->driver;
+	int ret = 0;
+
+	if (drv && drv->pm && drv->pm->prepare)
+		ret = drv->pm->prepare(dev);
+
+	return ret;
+}
+
+/**
  * __pm_generic_call - Generic suspend/freeze/poweroff/thaw subsystem callback.
  * @dev: Device to handle.
  * @event: PM transition of the system under way.
@@ -213,16 +230,38 @@ int pm_generic_restore(struct device *de
 	return __pm_generic_resume(dev, PM_EVENT_RESTORE);
 }
 EXPORT_SYMBOL_GPL(pm_generic_restore);
+
+/**
+ * pm_generic_complete - Generic routine competing a device power transition.
+ * @dev: Device to handle.
+ *
+ * Complete a device power transition during a system-wide power transition.
+ */
+void pm_generic_complete(struct device *dev)
+{
+	struct device_driver *drv = dev->driver;
+
+	if (drv && drv->pm && drv->pm->complete)
+		drv->pm->complete(dev);
+
+	/*
+	 * Let runtime PM try to suspend devices that haven't been in use before
+	 * going into the system-wide sleep state we're resuming from.
+	 */
+	pm_runtime_idle(dev);
+}
 #endif /* CONFIG_PM_SLEEP */
 
 struct dev_pm_ops generic_subsys_pm_ops = {
 #ifdef CONFIG_PM_SLEEP
+	.prepare = pm_generic_prepare,
 	.suspend = pm_generic_suspend,
 	.resume = pm_generic_resume,
 	.freeze = pm_generic_freeze,
 	.thaw = pm_generic_thaw,
 	.poweroff = pm_generic_poweroff,
 	.restore = pm_generic_restore,
+	.complete = pm_generic_complete,
 #endif
 #ifdef CONFIG_PM_RUNTIME
 	.runtime_suspend = pm_generic_runtime_suspend,
Index: linux-2.6/include/linux/pm.h
=================================--- linux-2.6.orig/include/linux/pm.h
+++ linux-2.6/include/linux/pm.h
@@ -550,6 +550,16 @@ extern void __suspend_report_result(cons
 	} while (0)
 
 extern int device_pm_wait_for_dev(struct device *sub, struct device *dev);
+
+extern int pm_generic_prepare(struct device *dev);
+extern int pm_generic_suspend(struct device *dev);
+extern int pm_generic_resume(struct device *dev);
+extern int pm_generic_freeze(struct device *dev);
+extern int pm_generic_thaw(struct device *dev);
+extern int pm_generic_restore(struct device *dev);
+extern int pm_generic_poweroff(struct device *dev);
+extern void pm_generic_complete(struct device *dev);
+
 #else /* !CONFIG_PM_SLEEP */
 
 #define device_pm_lock() do {} while (0)
@@ -566,6 +576,15 @@ static inline int device_pm_wait_for_dev
 {
 	return 0;
 }
+
+#define pm_generic_prepare	NULL
+#define pm_generic_suspend	NULL
+#define pm_generic_resume	NULL
+#define pm_generic_freeze	NULL
+#define pm_generic_thaw		NULL
+#define pm_generic_restore	NULL
+#define pm_generic_poweroff	NULL
+#define pm_generic_complete	NULL
 #endif /* !CONFIG_PM_SLEEP */
 
 /* How to reorder dpm_list after device_move() */
@@ -576,11 +595,4 @@ enum dpm_order {
 	DPM_ORDER_DEV_LAST,
 };
 
-extern int pm_generic_suspend(struct device *dev);
-extern int pm_generic_resume(struct device *dev);
-extern int pm_generic_freeze(struct device *dev);
-extern int pm_generic_thaw(struct device *dev);
-extern int pm_generic_restore(struct device *dev);
-extern int pm_generic_poweroff(struct device *dev);
-
 #endif /* _LINUX_PM_H */


  reply	other threads:[~2011-05-15 23:30 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-28 23:54 [RFC][PATCH 0/2] PM: Support for generic I/O power domains Rafael J. Wysocki
2011-04-28 23:54 ` [RFC][PATCH 1/2] PM / Runtime: " Rafael J. Wysocki
2011-04-29  1:26   ` [linux-pm] [RFC][PATCH 1/2] PM / Runtime: Support for generic I/O MyungJoo Ham
2011-04-29 20:11     ` [linux-pm] [RFC][PATCH 1/2] PM / Runtime: Support for generic I/O power domains Rafael J. Wysocki
2011-05-04  8:43       ` [linux-pm] [RFC][PATCH 1/2] PM / Runtime: Support for generic I/O MyungJoo Ham
2011-05-04 17:08         ` [linux-pm] [RFC][PATCH 1/2] PM / Runtime: Support for generic I/O power domains Rafael J. Wysocki
2011-04-29 20:54   ` [RFC][PATCH 1/2] PM / Runtime: Support for generic I/O power Greg KH
2011-04-30  0:54   ` [Update][RFC][PATCH 1/2] PM / Runtime: Support for generic I/O power domains (v2) Rafael J. Wysocki
2011-04-30  1:08     ` [Update][RFC][PATCH 1/2] PM / Runtime: Support for generic I/O Greg KH
2011-05-11  7:26     ` Kevin Hilman
2011-05-11 20:37       ` [Update][RFC][PATCH 1/2] PM / Runtime: Support for generic I/O power domains (v2) Rafael J. Wysocki
2011-04-28 23:55 ` [RFC][PATCH 2/2] ARM / shmobile: Support for I/O power domains for SH7372 Rafael J. Wysocki
2011-04-30  0:59   ` [Update][RFC][PATCH 2/2] ARM / shmobile: Support for I/O power domains for SH7372 (v2) Rafael J. Wysocki
2011-04-30  9:56     ` [RFC][PATCH] ARM / shmobile: Support for power domain A4MP on SH7372 Rafael J. Wysocki
2011-05-08 21:20 ` [RFC][PATCH 0/5] PM: Support for generic I/O power domains (v2) Rafael J. Wysocki
2011-05-08 21:22   ` [PATCH 1/5] PM / Runtime: Support for generic I/O power domains (v3) Rafael J. Wysocki
     [not found]     ` <BANLkTinPGQNUrFnyFVazqA72iyMbB-K_OA@mail.gmail.com>
2011-05-09 19:22       ` [linux-pm] " Rafael J. Wysocki
2011-05-10  8:22     ` Lin Ming
2011-05-10 19:03       ` Rafael J. Wysocki
2011-05-08 21:23   ` [PATCH 2/5] PM: Introduce generic prepare and complete callbacks for subsystems Rafael J. Wysocki
2011-05-08 21:24   ` [PATCH 3/5] PM: Support for system-wide power transitions in generic power domains Rafael J. Wysocki
2011-05-09 14:36     ` [linux-pm] [PATCH 3/5] PM: Support for system-wide power Alan Stern
2011-05-09 19:20       ` [linux-pm] [PATCH 3/5] PM: Support for system-wide power transitions in generic power domains Rafael J. Wysocki
2011-05-09 22:10     ` [Update][PATCH 3/5] PM: System-wide power transitions support for " Rafael J. Wysocki
2011-05-10 21:19       ` [Update 2x][PATCH " Rafael J. Wysocki
2011-05-11 17:17     ` [PATCH 3/5] PM: Support for system-wide power transitions in Jonathan Corbet
2011-05-11 19:11       ` [PATCH 3/5] PM: Support for system-wide power transitions in generic power domains Rafael J. Wysocki
2011-05-08 21:25   ` [PATCH 4/5] ARM / shmobile: Support for I/O power domains for SH7372 (v4) Rafael J. Wysocki
2011-05-08 21:25   ` [PATCH 5/5] ARM / shmobile: Support for power domain A4MP on SH7372 Rafael J. Wysocki
2011-05-15 23:17   ` [PATCH 0/6] PM: Support for generic I/O power domains (v3) Rafael J. Wysocki
2011-05-15 23:30     ` Rafael J. Wysocki [this message]
2011-05-15 23:31     ` [PATCH 2/6] PM / Runtime: Support for generic I/O power domains (v4) Rafael J. Wysocki
2011-05-15 23:31     ` [PATCH 3/6] PM: System-wide transitions support for generic power domains (v2) Rafael J. Wysocki
2011-05-15 23:32     ` [PATCH 4/6] ARM / shmobile: Support for I/O power domains for SH7372 (v5) Rafael J. Wysocki
2011-05-15 23:33     ` [PATCH 5/6] ARM / shmobile: Support for power domain A4MP on SH7372 Rafael J. Wysocki
2011-05-15 23:34     ` [PATCH 6/6][RFC] PM / Domains: Support for multiple generic power domain states R. J. Wysocki
2011-05-15 23:38     ` Rafael J. Wysocki
2011-05-16 10:07       ` Kevin Hilman
2011-05-16 18:29         ` Rafael J. Wysocki
2011-05-27 23:15     ` [PATCH 0/5] PM: Support for generic I/O power domains (v4) Rafael J. Wysocki
2011-05-27 23:17       ` [PATCH 1/5] PM / Runtime: " Rafael J. Wysocki
2011-06-02  7:29         ` [PATCH 1/5] PM / Runtime: Support for generic I/O power domains Guennadi Liakhovetski
2011-06-06 18:48           ` [PATCH 1/5] PM / Runtime: Support for generic I/O power domains (v4) Rafael J. Wysocki
2011-05-27 23:17       ` [PATCH 2/5] PM: System-wide transitions support for generic power domains (v2) Rafael J. Wysocki
2011-05-27 23:18       ` [PATCH 3/5] ARM / shmobile: Support for I/O power domains for SH7372 (v5) Rafael J. Wysocki
2011-05-27 23:18       ` [PATCH 4/5] PM / Domains: Support for multiple generic power domain states Rafael J. Wysocki
2011-05-27 23:19       ` [PATCH 5/5] ARM / shmobile: Support for power domain A4MP on SH7372 Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201105160130.28322.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=g.liakhovetski@gmx.de \
    --cc=grant.likely@secretlab.ca \
    --cc=gregkh@suse.de \
    --cc=khilman@ti.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=magnus.damm@gmail.com \
    --cc=myungjoo.ham@gmail.com \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).