From: Rajendra Nayak <rnayak@codeaurora.org> To: sboyd@codeaurora.org, mturquette@baylibre.com Cc: linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org, georgi.djakov@linaro.org, svarbanov@mm-sol.com, srinivas.kandagatla@linaro.org, sviau@codeaurora.org, Rajendra Nayak <rnayak@codeaurora.org> Subject: [PATCH v6 04/13] clk: qcom: gdsc: Manage clocks with !CONFIG_PM Date: Wed, 22 Jul 2015 12:41:00 +0530 [thread overview] Message-ID: <1437549069-29655-5-git-send-email-rnayak@codeaurora.org> (raw) In-Reply-To: <1437549069-29655-1-git-send-email-rnayak@codeaurora.org> With CONFIG_PM disabled, turn the devices clocks on during driver binding to the device, and turn them off when the driver is unbound from the device. Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> --- drivers/clk/qcom/gdsc.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/drivers/clk/qcom/gdsc.c b/drivers/clk/qcom/gdsc.c index 3125809..9ddd2f8 100644 --- a/drivers/clk/qcom/gdsc.c +++ b/drivers/clk/qcom/gdsc.c @@ -16,6 +16,7 @@ #include <linux/jiffies.h> #include <linux/pm_clock.h> #include <linux/slab.h> +#include <linux/platform_device.h> #include "gdsc.h" #define PWR_ON_MASK BIT(31) @@ -200,3 +201,61 @@ void gdsc_unregister(struct device *dev) { of_genpd_del_provider(dev->of_node); } + +#ifndef CONFIG_PM +static void enable_clock(struct device *dev, const char *con_id) +{ + struct clk *clk; + + clk = clk_get(dev, con_id); + if (!IS_ERR(clk)) { + clk_prepare_enable(clk); + clk_put(clk); + } +} + +static void disable_clock(struct device *dev, const char *con_id) +{ + struct clk *clk; + + clk = clk_get(dev, con_id); + if (!IS_ERR(clk)) { + clk_disable_unprepare(clk); + clk_put(clk); + } +} + +static int clk_notify(struct notifier_block *nb, unsigned long action, + void *data) +{ + int sz; + struct device *dev = data; + char **con_id, *con_ids[] = { "core", "iface", NULL }; + + if (!of_find_property(dev->of_node, "power-domains", &sz)) + return 0; + + switch (action) { + case BUS_NOTIFY_BIND_DRIVER: + for (con_id = con_ids; *con_id; con_id++) + enable_clock(dev, *con_id); + break; + case BUS_NOTIFY_UNBOUND_DRIVER: + for (con_id = con_ids; *con_id; con_id++) + disable_clock(dev, *con_id); + break; + } + return 0; +} + +struct notifier_block nb = { + .notifier_call = clk_notify, +}; + +int qcom_pm_runtime_init(void) +{ + bus_register_notifier(&platform_bus_type, &nb); + return 0; +} +core_initcall(qcom_pm_runtime_init); +#endif -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
WARNING: multiple messages have this Message-ID (diff)
From: rnayak@codeaurora.org (Rajendra Nayak) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v6 04/13] clk: qcom: gdsc: Manage clocks with !CONFIG_PM Date: Wed, 22 Jul 2015 12:41:00 +0530 [thread overview] Message-ID: <1437549069-29655-5-git-send-email-rnayak@codeaurora.org> (raw) In-Reply-To: <1437549069-29655-1-git-send-email-rnayak@codeaurora.org> With CONFIG_PM disabled, turn the devices clocks on during driver binding to the device, and turn them off when the driver is unbound from the device. Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> --- drivers/clk/qcom/gdsc.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/drivers/clk/qcom/gdsc.c b/drivers/clk/qcom/gdsc.c index 3125809..9ddd2f8 100644 --- a/drivers/clk/qcom/gdsc.c +++ b/drivers/clk/qcom/gdsc.c @@ -16,6 +16,7 @@ #include <linux/jiffies.h> #include <linux/pm_clock.h> #include <linux/slab.h> +#include <linux/platform_device.h> #include "gdsc.h" #define PWR_ON_MASK BIT(31) @@ -200,3 +201,61 @@ void gdsc_unregister(struct device *dev) { of_genpd_del_provider(dev->of_node); } + +#ifndef CONFIG_PM +static void enable_clock(struct device *dev, const char *con_id) +{ + struct clk *clk; + + clk = clk_get(dev, con_id); + if (!IS_ERR(clk)) { + clk_prepare_enable(clk); + clk_put(clk); + } +} + +static void disable_clock(struct device *dev, const char *con_id) +{ + struct clk *clk; + + clk = clk_get(dev, con_id); + if (!IS_ERR(clk)) { + clk_disable_unprepare(clk); + clk_put(clk); + } +} + +static int clk_notify(struct notifier_block *nb, unsigned long action, + void *data) +{ + int sz; + struct device *dev = data; + char **con_id, *con_ids[] = { "core", "iface", NULL }; + + if (!of_find_property(dev->of_node, "power-domains", &sz)) + return 0; + + switch (action) { + case BUS_NOTIFY_BIND_DRIVER: + for (con_id = con_ids; *con_id; con_id++) + enable_clock(dev, *con_id); + break; + case BUS_NOTIFY_UNBOUND_DRIVER: + for (con_id = con_ids; *con_id; con_id++) + disable_clock(dev, *con_id); + break; + } + return 0; +} + +struct notifier_block nb = { + .notifier_call = clk_notify, +}; + +int qcom_pm_runtime_init(void) +{ + bus_register_notifier(&platform_bus_type, &nb); + return 0; +} +core_initcall(qcom_pm_runtime_init); +#endif -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
next prev parent reply other threads:[~2015-07-22 7:11 UTC|newest] Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-07-22 7:10 [PATCH v6 00/13] qcom: Add support for GDSCs Rajendra Nayak 2015-07-22 7:10 ` Rajendra Nayak 2015-07-22 7:10 ` [PATCH v6 01/13] clk: " Rajendra Nayak 2015-07-22 7:10 ` Rajendra Nayak 2015-07-23 0:25 ` Stephen Boyd 2015-07-23 0:25 ` Stephen Boyd 2015-07-23 8:37 ` Rajendra Nayak 2015-07-23 8:37 ` Rajendra Nayak 2015-07-23 9:09 ` Stanimir Varbanov 2015-07-23 9:09 ` Stanimir Varbanov 2015-07-23 18:04 ` Stephen Boyd 2015-07-23 18:04 ` Stephen Boyd 2015-07-22 7:10 ` [PATCH v6 02/13] clk: qcom: gdsc: Prepare common clk probe to register gdscs Rajendra Nayak 2015-07-22 7:10 ` Rajendra Nayak 2015-07-23 0:27 ` Stephen Boyd 2015-07-23 0:27 ` Stephen Boyd 2015-07-22 7:10 ` [PATCH v6 03/13] clk: qcom: gdsc: Use PM clocks to control gdsc clocks Rajendra Nayak 2015-07-22 7:10 ` Rajendra Nayak 2015-07-23 1:01 ` Stephen Boyd 2015-07-23 1:01 ` Stephen Boyd 2015-07-23 8:34 ` Rajendra Nayak 2015-07-23 8:34 ` Rajendra Nayak 2015-07-23 9:22 ` Stanimir Varbanov 2015-07-23 9:22 ` Stanimir Varbanov 2015-07-23 10:28 ` Rajendra Nayak 2015-07-23 10:28 ` Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak [this message] 2015-07-22 7:11 ` [PATCH v6 04/13] clk: qcom: gdsc: Manage clocks with !CONFIG_PM Rajendra Nayak 2015-07-23 1:03 ` Stephen Boyd 2015-07-23 1:03 ` Stephen Boyd 2015-07-23 8:35 ` Rajendra Nayak 2015-07-23 8:35 ` Rajendra Nayak 2015-07-29 1:04 ` Stephen Boyd 2015-07-29 1:04 ` Stephen Boyd 2015-07-29 4:37 ` Rajendra Nayak 2015-07-29 4:37 ` Rajendra Nayak 2015-07-30 0:13 ` Stephen Boyd 2015-07-30 0:13 ` Stephen Boyd 2015-07-30 1:39 ` Rajendra Nayak 2015-07-30 1:39 ` Rajendra Nayak 2015-07-22 7:11 ` [PATCH v6 05/13] clk: qcom: gdsc: Enable an RCG before turing on the gdsc Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak 2015-07-22 7:11 ` [PATCH v6 06/13] clk: qcom: gdsc: Add support for Memory RET/OFF Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak 2015-07-22 7:11 ` [PATCH v6 07/13] clk: qcom: gdsc: Add support for ON only state Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak 2015-07-23 1:11 ` Stephen Boyd 2015-07-23 1:11 ` Stephen Boyd 2015-07-22 7:11 ` [PATCH v6 08/13] clk: qcom: gdsc: Add GDSCs in msm8916 GCC Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak 2015-07-23 1:07 ` Stephen Boyd 2015-07-23 1:07 ` Stephen Boyd 2015-07-23 8:36 ` Rajendra Nayak 2015-07-23 8:36 ` Rajendra Nayak 2015-07-22 7:11 ` [PATCH v6 09/13] clk: qcom: gdsc: Add GDSCs in msm8974 GCC Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak 2015-07-23 1:08 ` Stephen Boyd 2015-07-23 1:08 ` Stephen Boyd 2015-07-22 7:11 ` [PATCH v6 10/13] clk: qcom: gdsc: Add GDSCs in msm8974 MMCC Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak 2015-07-23 1:09 ` Stephen Boyd 2015-07-23 1:09 ` Stephen Boyd 2015-07-22 7:11 ` [PATCH v6 11/13] clk: qcom: gdsc: Add GDSCs in apq8084 GCC Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak 2015-07-22 7:11 ` [PATCH v6 12/13] clk: qcom: gdsc: Add GDSCs in apq8084 MMCC Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak 2015-07-22 7:11 ` [PATCH v6 13/13] arm: dts: qcom: Add #power-domain-cells property Rajendra Nayak 2015-07-22 7:11 ` Rajendra Nayak
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=1437549069-29655-5-git-send-email-rnayak@codeaurora.org \ --to=rnayak@codeaurora.org \ --cc=georgi.djakov@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=mturquette@baylibre.com \ --cc=sboyd@codeaurora.org \ --cc=srinivas.kandagatla@linaro.org \ --cc=svarbanov@mm-sol.com \ --cc=sviau@codeaurora.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.