From: Jon Hunter <jonathanh@nvidia.com> To: "Rafael J . Wysocki" <rjw@rjwysocki.net>, Kevin Hilman <khilman@kernel.org>, Ulf Hansson <ulf.hansson@linaro.org>, geert@linux-m68k.org, rnayak@codeaurora.org Cc: stanimir.varbanov@linaro.org, sboyd@codeaurora.org, Marek Szyprowski <m.szyprowski@samsung.com>, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, Jon Hunter <jonathanh@nvidia.com> Subject: [RFC PATCH 3/4] PM / Domains: Add OF helpers for getting PM domains Date: Tue, 28 Mar 2017 15:14:02 +0100 [thread overview] Message-ID: <1490710443-27425-4-git-send-email-jonathanh@nvidia.com> (raw) In-Reply-To: <1490710443-27425-1-git-send-email-jonathanh@nvidia.com> Add helper functions for getting PM domains via device-tree that are to be controlled explicitly via the pm_genpd_poweron/off() APIs. PM domains can be retrieved by either index or name. Retrieving a PM domain by name requires that the 'power-domain-names' property is present for the consumer. Signed-off-by: Jon Hunter <jonathanh@nvidia.com> --- drivers/base/power/domain.c | 72 +++++++++++++++++++++++++++++++++++++++++++++ include/linux/pm_domain.h | 17 +++++++++++ 2 files changed, 89 insertions(+) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 4980ec157750..77516b2b3e58 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -2285,6 +2285,78 @@ int of_genpd_parse_idle_states(struct device_node *dn, return 0; } EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states); + +static struct generic_pm_domain *genpd_get(struct device_node *np, int index) +{ + struct of_phandle_args genpdspec; + struct generic_pm_domain *genpd; + int ret; + + if (index < 0) + return ERR_PTR(-EINVAL); + + ret = of_parse_phandle_with_args(np, "power-domains", + "#power-domain-cells", index, + &genpdspec); + if (ret) + return ERR_PTR(ret); + + mutex_lock(&gpd_list_lock); + + genpd = genpd_get_from_provider(&genpdspec); + of_node_put(genpdspec.np); + + if (!IS_ERR(genpd)) { + genpd_lock(genpd); + genpd->device_count++; + genpd->suspended_count++; + genpd_unlock(genpd); + } + + mutex_unlock(&gpd_list_lock); + + return genpd; +} + +/** + * of_genpd_get() - Get a PM domain by index using a device node + * @np: pointer to PM domain consumer node + * @index: index reference for a PM domain in the consumer node + * + * This function parses the 'power-domains' property using the index + * provided to look up a PM domain from the registered list of PM domain + * providers. + */ +struct generic_pm_domain *of_genpd_get(struct device_node *np, int index) +{ + return genpd_get(np, index); +} +EXPORT_SYMBOL(of_genpd_get); + +/** + * of_genpd_get_by_name() - Get a PM domain by name using a device node + * @np: pointer to PM domain consumer node + * @name: name reference for a PM domain in the consumer node + * + * This function parses the 'power-domains' and 'power-domain-names' + * properties, and uses them to look up a PM domain from the registered + * list of PM domain providers. + */ +struct generic_pm_domain *of_genpd_get_by_name(struct device_node *np, + const char *name) +{ + int index; + + if (!np || !name) + return ERR_PTR(-EINVAL); + + index = of_property_match_string(np, "power-domain-names", name); + if (index < 0) + return ERR_PTR(index); + + return genpd_get(np, index); +} +EXPORT_SYMBOL(of_genpd_get_by_name); #endif /* CONFIG_PM_GENERIC_DOMAINS_OF */ diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index b3aa1f237d96..d0183d96a1b3 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -240,6 +240,10 @@ extern int of_genpd_add_subdomain(struct of_phandle_args *parent, extern struct generic_pm_domain *of_genpd_remove_last(struct device_node *np); extern int of_genpd_parse_idle_states(struct device_node *dn, struct genpd_power_state **states, int *n); +extern struct generic_pm_domain *of_genpd_get(struct device_node *np, + int index); +extern struct generic_pm_domain *of_genpd_get_by_name(struct device_node *np, + const char *name); int genpd_dev_pm_attach(struct device *dev); #else /* !CONFIG_PM_GENERIC_DOMAINS_OF */ @@ -285,6 +289,19 @@ struct generic_pm_domain *of_genpd_remove_last(struct device_node *np) { return ERR_PTR(-ENOTSUPP); } + +static inline +struct generic_pm_domain *of_genpd_get(struct device_node *np, int index) +{ + return ERR_PTR(-ENOTSUPP); +} + +static inline +struct generic_pm_domain *of_genpd_get_by_name(struct device_node *np, + const char *name) +{ + return ERR_PTR(-ENOTSUPP); +} #endif /* CONFIG_PM_GENERIC_DOMAINS_OF */ #ifdef CONFIG_PM -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Jon Hunter <jonathanh@nvidia.com> To: "Rafael J . Wysocki" <rjw@rjwysocki.net>, Kevin Hilman <khilman@kernel.org>, Ulf Hansson <ulf.hansson@linaro.org>, <geert@linux-m68k.org>, <rnayak@codeaurora.org> Cc: <stanimir.varbanov@linaro.org>, <sboyd@codeaurora.org>, Marek Szyprowski <m.szyprowski@samsung.com>, <linux-pm@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-tegra@vger.kernel.org>, Jon Hunter <jonathanh@nvidia.com> Subject: [RFC PATCH 3/4] PM / Domains: Add OF helpers for getting PM domains Date: Tue, 28 Mar 2017 15:14:02 +0100 [thread overview] Message-ID: <1490710443-27425-4-git-send-email-jonathanh@nvidia.com> (raw) In-Reply-To: <1490710443-27425-1-git-send-email-jonathanh@nvidia.com> Add helper functions for getting PM domains via device-tree that are to be controlled explicitly via the pm_genpd_poweron/off() APIs. PM domains can be retrieved by either index or name. Retrieving a PM domain by name requires that the 'power-domain-names' property is present for the consumer. Signed-off-by: Jon Hunter <jonathanh@nvidia.com> --- drivers/base/power/domain.c | 72 +++++++++++++++++++++++++++++++++++++++++++++ include/linux/pm_domain.h | 17 +++++++++++ 2 files changed, 89 insertions(+) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 4980ec157750..77516b2b3e58 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -2285,6 +2285,78 @@ int of_genpd_parse_idle_states(struct device_node *dn, return 0; } EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states); + +static struct generic_pm_domain *genpd_get(struct device_node *np, int index) +{ + struct of_phandle_args genpdspec; + struct generic_pm_domain *genpd; + int ret; + + if (index < 0) + return ERR_PTR(-EINVAL); + + ret = of_parse_phandle_with_args(np, "power-domains", + "#power-domain-cells", index, + &genpdspec); + if (ret) + return ERR_PTR(ret); + + mutex_lock(&gpd_list_lock); + + genpd = genpd_get_from_provider(&genpdspec); + of_node_put(genpdspec.np); + + if (!IS_ERR(genpd)) { + genpd_lock(genpd); + genpd->device_count++; + genpd->suspended_count++; + genpd_unlock(genpd); + } + + mutex_unlock(&gpd_list_lock); + + return genpd; +} + +/** + * of_genpd_get() - Get a PM domain by index using a device node + * @np: pointer to PM domain consumer node + * @index: index reference for a PM domain in the consumer node + * + * This function parses the 'power-domains' property using the index + * provided to look up a PM domain from the registered list of PM domain + * providers. + */ +struct generic_pm_domain *of_genpd_get(struct device_node *np, int index) +{ + return genpd_get(np, index); +} +EXPORT_SYMBOL(of_genpd_get); + +/** + * of_genpd_get_by_name() - Get a PM domain by name using a device node + * @np: pointer to PM domain consumer node + * @name: name reference for a PM domain in the consumer node + * + * This function parses the 'power-domains' and 'power-domain-names' + * properties, and uses them to look up a PM domain from the registered + * list of PM domain providers. + */ +struct generic_pm_domain *of_genpd_get_by_name(struct device_node *np, + const char *name) +{ + int index; + + if (!np || !name) + return ERR_PTR(-EINVAL); + + index = of_property_match_string(np, "power-domain-names", name); + if (index < 0) + return ERR_PTR(index); + + return genpd_get(np, index); +} +EXPORT_SYMBOL(of_genpd_get_by_name); #endif /* CONFIG_PM_GENERIC_DOMAINS_OF */ diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index b3aa1f237d96..d0183d96a1b3 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -240,6 +240,10 @@ extern int of_genpd_add_subdomain(struct of_phandle_args *parent, extern struct generic_pm_domain *of_genpd_remove_last(struct device_node *np); extern int of_genpd_parse_idle_states(struct device_node *dn, struct genpd_power_state **states, int *n); +extern struct generic_pm_domain *of_genpd_get(struct device_node *np, + int index); +extern struct generic_pm_domain *of_genpd_get_by_name(struct device_node *np, + const char *name); int genpd_dev_pm_attach(struct device *dev); #else /* !CONFIG_PM_GENERIC_DOMAINS_OF */ @@ -285,6 +289,19 @@ struct generic_pm_domain *of_genpd_remove_last(struct device_node *np) { return ERR_PTR(-ENOTSUPP); } + +static inline +struct generic_pm_domain *of_genpd_get(struct device_node *np, int index) +{ + return ERR_PTR(-ENOTSUPP); +} + +static inline +struct generic_pm_domain *of_genpd_get_by_name(struct device_node *np, + const char *name) +{ + return ERR_PTR(-ENOTSUPP); +} #endif /* CONFIG_PM_GENERIC_DOMAINS_OF */ #ifdef CONFIG_PM -- 2.7.4
next prev parent reply other threads:[~2017-03-28 14:14 UTC|newest] Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-03-28 14:13 [RFC PATCH 0/4] PM / Domains: Add support for explicit control of PM domains Jon Hunter 2017-03-28 14:13 ` Jon Hunter 2017-03-28 14:14 ` [RFC PATCH 1/4] PM / Domains: Prepare for supporting explicit PM domain control Jon Hunter 2017-03-28 14:14 ` Jon Hunter 2017-03-28 14:14 ` [RFC PATCH 2/4] PM / Domains: Add support for explicit control of PM domains Jon Hunter 2017-03-28 14:14 ` Jon Hunter [not found] ` <1490710443-27425-3-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2017-04-10 4:09 ` Rajendra Nayak 2017-04-10 4:09 ` Rajendra Nayak 2017-04-10 8:24 ` Jon Hunter 2017-04-10 8:24 ` Jon Hunter [not found] ` <3135e238-48a3-3693-bb59-63bf2a6d8d0e-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2017-04-10 10:02 ` Rajendra Nayak 2017-04-10 10:02 ` Rajendra Nayak 2017-04-10 19:48 ` Jon Hunter 2017-04-10 19:48 ` Jon Hunter 2017-03-28 14:14 ` Jon Hunter [this message] 2017-03-28 14:14 ` [RFC PATCH 3/4] PM / Domains: Add OF helpers for getting " Jon Hunter [not found] ` <1490710443-27425-1-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2017-03-28 14:14 ` [RFC PATCH 4/4] dt-bindings: Add support for devices with multiple " Jon Hunter 2017-03-28 14:14 ` Jon Hunter 2017-04-10 4:12 ` Rajendra Nayak [not found] ` <3f96256d-0de5-26a2-e656-7912e06806ea-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2017-04-10 8:24 ` Jon Hunter 2017-04-10 8:24 ` Jon Hunter 2017-04-25 11:13 ` [RFC PATCH 0/4] PM / Domains: Add support for explicit control of " Jon Hunter 2017-04-25 11:13 ` Jon Hunter [not found] ` <d2e3ceaa-57e2-033d-ecd1-a3b2bd8ffa26-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2017-04-25 19:34 ` Ulf Hansson 2017-04-25 19:34 ` Ulf Hansson [not found] ` <CAPDyKFoJ58pwGz2U90ob8a8cY=hEbE-wLBHZ0BBzqPoLW_wgGA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-04-25 21:17 ` Rafael J. Wysocki 2017-04-25 21:17 ` Rafael J. Wysocki [not found] ` <CAJZ5v0gMzN_zfC_2nnRtYFyFon3-_mnioQhNbDP0wsr91RnagA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-05-02 10:10 ` Jon Hunter 2017-05-02 10:10 ` Jon Hunter [not found] ` <ffe13074-9113-0a20-0fa6-76d0209dadfc-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2017-05-02 21:51 ` Rafael J. Wysocki 2017-05-02 21:51 ` Rafael J. Wysocki 2017-05-03 8:12 ` Ulf Hansson [not found] ` <CAPDyKFokVKZfRAsEAB6ihx1FxW4JjarionyOwCATr3s+QW4aMg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-05-03 8:32 ` Jon Hunter 2017-05-03 8:32 ` Jon Hunter 2017-05-03 8:32 ` Jon Hunter [not found] ` <b4e8fd34-e2f0-165d-aa22-32ba43a8dbed-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2017-05-03 13:43 ` Ulf Hansson 2017-05-03 13:43 ` Ulf Hansson [not found] ` <CAPDyKFo-hfwbrY+AEMt0=fMshiT-BWvYDvGkKGqquTdowUvWHw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-05-03 14:57 ` Jon Hunter 2017-05-03 14:57 ` Jon Hunter 2017-05-03 17:12 ` Ulf Hansson 2017-05-04 8:44 ` Jon Hunter 2017-05-30 3:41 ` Rajendra Nayak [not found] ` <5fcfeda6-f95c-cdaa-73a5-5c7499a3f9f5-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2017-10-09 16:36 ` Todor Tomov 2017-10-09 16:36 ` Todor Tomov [not found] ` <72397ec8-d169-c5b1-2120-459031b35d48-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2017-10-10 9:13 ` Jon Hunter 2017-10-10 9:13 ` Jon Hunter [not found] ` <1832647.f77WMLkdQb-yvgW3jdyMHm1GS7QM15AGw@public.gmane.org> 2017-05-03 8:12 ` Jon Hunter 2017-05-03 8:12 ` Jon Hunter 2017-04-26 8:06 ` Geert Uytterhoeven [not found] ` <CAMuHMdWvS6_Zf1nn1=zVLb1qNChyk+B6BDZsK9P9oKRBEpPKMg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-04-26 9:04 ` Ulf Hansson 2017-04-26 9:04 ` Ulf Hansson [not found] ` <CAPDyKFqqZPXpxCTDy079QeiAorLVrXZssQ5SvXLWa3oab21b5g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-04-26 9:17 ` Geert Uytterhoeven 2017-04-26 9:17 ` Geert Uytterhoeven [not found] ` <CAMuHMdWNnWdYop_U4BGznxDND3WK-V7hnCBbnPoUDzUHBBpgHA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-04-26 9:55 ` Ulf Hansson 2017-04-26 9:55 ` Ulf Hansson [not found] ` <CAPDyKFrg+L_U6ztzpUdQMuemXyPWvtWVt06GumXa1MoTjJesWg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-05-03 6:43 ` Geert Uytterhoeven 2017-05-03 6:43 ` Geert Uytterhoeven [not found] ` <CAMuHMdXr6-pKb0wRfs0_HhNp75ikGOtd-n2mEY-fvVJhaU5idg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-05-03 8:54 ` Geert Uytterhoeven 2017-05-03 8:54 ` Geert Uytterhoeven
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=1490710443-27425-4-git-send-email-jonathanh@nvidia.com \ --to=jonathanh@nvidia.com \ --cc=geert@linux-m68k.org \ --cc=khilman@kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux-tegra@vger.kernel.org \ --cc=m.szyprowski@samsung.com \ --cc=rjw@rjwysocki.net \ --cc=rnayak@codeaurora.org \ --cc=sboyd@codeaurora.org \ --cc=stanimir.varbanov@linaro.org \ --cc=ulf.hansson@linaro.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.