From: Ulf Hansson <ulf.hansson@linaro.org>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
Len Brown <len.brown@intel.com>, Pavel Machek <pavel@ucw.cz>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-pm@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org, linux-acpi@vger.kernel.org,
Geert Uytterhoeven <geert+renesas@glider.be>,
Kevin Hilman <khilman@linaro.org>,
Alan Stern <stern@rowland.harvard.edu>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Tomasz Figa <tomasz.figa@gmail.com>,
devicetree@vger.kernel.org,
Linus Walleij <linus.walleij@linaro.org>,
Simon Horman <horms@verge.net.au>,
Magnus Damm <magnus.damm@gmail.com>,
Ben Dooks <ben-linux@fluff.org>,
Kukjin Kim <kgene.kim@samsung.com>,
Stephen Boyd <sboyd@codeaurora.org>,
Philipp Zabel <philipp.zabel@gmail.com>,
Mark Brown <broonie@kernel.org>, Wolfram Sang <wsa@the-dreams.de>,
Chris Ball <chris@printf.net>,
Russell King <linux@arm.linux.org.uk>,
Ulf Hansson <ulf.hansson@linaro.org>
Subject: [PATCH v2 3/9] PM / Domains: Add APIs to attach/detach a PM domain for a device
Date: Thu, 28 Aug 2014 10:38:56 +0200 [thread overview]
Message-ID: <1409215142-8218-4-git-send-email-ulf.hansson@linaro.org> (raw)
In-Reply-To: <1409215142-8218-1-git-send-email-ulf.hansson@linaro.org>
To maintain scalability let's add common methods to attach and detach
a PM domain for a device, dev_pm_domain_attach|detach().
Typically dev_pm_domain_attach() shall be invoked from subsystem level
code at the probe phase to try to attach a device to it's PM domain.
The reversed actions may be done a the remove phase and then by invoking
dev_pm_domain_detach().
The supported PM domains at this point are the ACPI and the generic
PM domains.
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Philipp Zabel <p.zabel@pengutronix.de>
---
drivers/base/power/common.c | 56 +++++++++++++++++++++++++++++++++++++++++++++
include/linux/pm.h | 14 ++++++++++++
2 files changed, 70 insertions(+)
diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c
index df2e5ee..c143d20 100644
--- a/drivers/base/power/common.c
+++ b/drivers/base/power/common.c
@@ -11,6 +11,8 @@
#include <linux/export.h>
#include <linux/slab.h>
#include <linux/pm_clock.h>
+#include <linux/acpi.h>
+#include <linux/pm_domain.h>
/**
* dev_pm_get_subsys_data - Create or refcount power.subsys_data for device.
@@ -82,3 +84,57 @@ int dev_pm_put_subsys_data(struct device *dev)
return ret;
}
EXPORT_SYMBOL_GPL(dev_pm_put_subsys_data);
+
+/**
+ * dev_pm_domain_attach - Attach a device to it's PM domain.
+ * @dev: Device to attach.
+ * @power_on: Used to indicate whether we should power on the device.
+ *
+ * The @dev may only be attached to a single PM domain. By iterating through
+ * the available alternatives we try to find a valid PM domain for the device.
+ *
+ * This function should typically be invoked from subsystem level code during
+ * the probe phase. Especially for those that's hold devices which requires
+ * power management through PM domains.
+ *
+ * Callers must ensure proper synchronization of this function with power
+ * management callbacks.
+ *
+ * Returns 0 on successfully attached PM domain or negative error code.
+ */
+int dev_pm_domain_attach(struct device *dev, bool power_on)
+{
+ int ret;
+
+ ret = acpi_dev_pm_attach(dev, power_on);
+ if (!ret || ret == -EPROBE_DEFER)
+ return ret;
+
+ return genpd_dev_pm_attach(dev);
+}
+EXPORT_SYMBOL_GPL(dev_pm_domain_attach);
+
+/**
+ * dev_pm_domain_detach - Detach a device from it's PM domain.
+ * @dev: Device to attach.
+ * @power_off: Used to indicate whether we should power off the device.
+ *
+ * The @dev may be attached to a PM domain. By iterating through the available
+ * alternatives we detach it from it's PM domain.
+ *
+ * This functions will reverse the actions from dev_pm_domain_attach() and thus
+ * detach the @dev from it's PM domain. Typically it should be invoked from
+ * subsystem level code during the remove phase.
+ *
+ * Callers must ensure proper synchronization of this function with power
+ * management callbacks.
+ *
+ * Returns 0 on successfully detached PM domain or negative error code.
+ */
+int dev_pm_domain_detach(struct device *dev, bool power_off)
+{
+ if (acpi_dev_pm_detach(dev, power_off))
+ return genpd_dev_pm_detach(dev);
+ return 0;
+}
+EXPORT_SYMBOL_GPL(dev_pm_domain_detach);
diff --git a/include/linux/pm.h b/include/linux/pm.h
index 72c0fe0..8176b07 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -621,6 +621,20 @@ struct dev_pm_domain {
struct dev_pm_ops ops;
};
+#ifdef CONFIG_PM
+extern int dev_pm_domain_attach(struct device *dev, bool power_on);
+extern int dev_pm_domain_detach(struct device *dev, bool power_off);
+#else
+static inline int dev_pm_domain_attach(struct device *dev, bool power_on)
+{
+ return -ENODEV;
+}
+static inline int dev_pm_domain_detach(struct device *dev, bool power_off)
+{
+ return -ENODEV;
+}
+#endif
+
/*
* The PM_EVENT_ messages are also used by drivers implementing the legacy
* suspend framework, based on the ->suspend() and ->resume() callbacks common
--
1.9.1
next prev parent reply other threads:[~2014-08-28 8:38 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-28 8:38 [PATCH v2 0/9] PM / Domains: Generic OF-based support Ulf Hansson
2014-08-28 8:38 ` [PATCH v2 1/9] ACPI / PM: Let acpi_dev_pm_detach() return an error code Ulf Hansson
2014-08-28 8:38 ` [PATCH v2 2/9] PM / Domains: Add generic OF-based power domain look-up Ulf Hansson
2014-09-02 18:28 ` Geert Uytterhoeven
2014-09-03 11:24 ` Ulf Hansson
2014-08-28 8:38 ` Ulf Hansson [this message]
2014-08-28 8:38 ` [PATCH v2 4/9] drivercore / platform: Convert to dev_pm_domain_attach|detach() Ulf Hansson
[not found] ` <1409215142-8218-1-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-08-28 8:38 ` [PATCH v2 5/9] i2c: core: " Ulf Hansson
2014-08-28 8:38 ` [PATCH v2 6/9] mmc: sdio: " Ulf Hansson
2014-08-28 8:39 ` [PATCH v2 7/9] spi: core: " Ulf Hansson
2014-08-28 8:39 ` [PATCH v2 8/9] amba: Add support for attach/detach of power domains Ulf Hansson
2014-08-28 8:39 ` [PATCH v2 9/9] ARM: exynos: Move to generic power domain bindings Ulf Hansson
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=1409215142-8218-4-git-send-email-ulf.hansson@linaro.org \
--to=ulf.hansson@linaro.org \
--cc=ben-linux@fluff.org \
--cc=broonie@kernel.org \
--cc=chris@printf.net \
--cc=daniel.lezcano@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=geert+renesas@glider.be \
--cc=gregkh@linuxfoundation.org \
--cc=horms@verge.net.au \
--cc=kgene.kim@samsung.com \
--cc=khilman@linaro.org \
--cc=len.brown@intel.com \
--cc=linus.walleij@linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=magnus.damm@gmail.com \
--cc=pavel@ucw.cz \
--cc=philipp.zabel@gmail.com \
--cc=rjw@rjwysocki.net \
--cc=sboyd@codeaurora.org \
--cc=stern@rowland.harvard.edu \
--cc=tomasz.figa@gmail.com \
--cc=wsa@the-dreams.de \
/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).