From: Francesco Lavra <francescolavra.fl@gmail.com>
To: Mike Turquette <mturquette@linaro.org>
Cc: linux-kernel@vger.kernel.org, linaro-dev@lists.linaro.org,
linux-arm-kernel@lists.infradead.org, patches@linaro.org
Subject: Re: [PATCH 2/5] clk: notifier handler for dynamic voltage scaling
Date: Sun, 10 Mar 2013 11:21:46 +0100 [thread overview]
Message-ID: <513C5EBA.7040402@gmail.com> (raw)
In-Reply-To: <1362026969-11457-3-git-send-email-mturquette@linaro.org>
On 02/28/2013 05:49 AM, Mike Turquette wrote:
> Dynamic voltage and frequency scaling (dvfs) is a common power saving
> technique in many of today's modern processors. This patch introduces a
> common clk rate-change notifier handler which scales voltage
> appropriately whenever clk_set_rate is called on an affected clock.
>
> There are three prerequisites to using this feature:
>
> 1) the affected clocks must be using the common clk framework
> 2) voltage must be scaled using the regulator framework
> 3) clock frequency and regulator voltage values must be paired via the
> OPP library
>
> If a platform or device meets these requirements then using the notifier
> handler is straightforward. A struct device is used as the basis for
> performing initial look-ups for clocks via clk_get and regulators via
> regulator_get. This means that notifiers are subscribed on a per-device
> basis and multiple devices can have notifiers subscribed to the same
> clock. Put another way, the voltage chosen for a rail during a call to
> clk_set_rate is a function of the device, not the clock.
>
> Signed-off-by: Mike Turquette <mturquette@linaro.org>
[...]
> +struct dvfs_info *dvfs_clk_notifier_register(struct dvfs_info_init *dii)
> +{
> + struct dvfs_info *di;
> + int ret = 0;
> +
> + if (!dii)
> + return ERR_PTR(-EINVAL);
> +
> + di = kzalloc(sizeof(struct dvfs_info), GFP_KERNEL);
> + if (!di)
> + return ERR_PTR(-ENOMEM);
> +
> + di->dev = dii->dev;
> + di->clk = clk_get(di->dev, dii->con_id);
> + if (IS_ERR(di->clk)) {
> + ret = -ENOMEM;
> + goto err;
> + }
> +
> + di->reg = regulator_get(di->dev, dii->reg_id);
> + if (IS_ERR(di->reg)) {
> + ret = -ENOMEM;
> + goto err;
> + }
> +
> + di->tol = dii->tol;
> + di->nb.notifier_call = dvfs_clk_notifier_handler;
> +
> + ret = clk_notifier_register(di->clk, &di->nb);
> +
> + if (ret)
> + goto err;
Shouldn't regulator_put() and clk_put() be called in the error path?
> +
> + return di;
> +
> +err:
> + kfree(di);
> + return ERR_PTR(ret);
> +}
> +EXPORT_SYMBOL_GPL(dvfs_clk_notifier_register);
> +
> +void dvfs_clk_notifier_unregister(struct dvfs_info *di)
> +{
> + clk_notifier_unregister(di->clk, &di->nb);
> + clk_put(di->clk);
> + regulator_put(di->reg);
> + kfree(di);
> +}
> +EXPORT_SYMBOL_GPL(dvfs_clk_notifier_unregister);
Regards,
Francesco
next prev parent reply other threads:[~2013-03-10 10:20 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-28 4:49 [PATCH v3 0/5] common clk framework reentrancy & dvfs, take 3 Mike Turquette
2013-02-28 4:49 ` [PATCH 1/5] clk: allow reentrant calls into the clk framework Mike Turquette
2013-02-28 9:54 ` Ulf Hansson
[not found] ` <20130318201551.8663.22731@quantum>
2013-03-18 21:00 ` Russell King - ARM Linux
2013-03-27 3:33 ` Bill Huang
2013-02-28 4:49 ` [PATCH 2/5] clk: notifier handler for dynamic voltage scaling Mike Turquette
2013-03-01 9:41 ` Bill Huang
2013-03-01 20:49 ` Stephen Warren
2013-03-02 2:58 ` Bill Huang
[not found] ` <20130301182234.6210.63879@quantum>
[not found] ` <20130301204832.6210.40653@quantum>
2013-03-02 2:55 ` Bill Huang
2013-03-02 8:22 ` Richard Zhao
2013-03-03 10:54 ` Mike Turquette
2013-03-03 13:27 ` Richard Zhao
[not found] ` <20130304072519.6210.97088@quantum>
2013-03-13 13:59 ` Ulf Hansson
2013-03-10 10:21 ` Francesco Lavra [this message]
2013-04-02 17:49 ` Taras Kondratiuk
2013-02-28 4:49 ` [PATCH 3/5] cpufreq: omap: scale regulator from clk notifier Mike Turquette
2013-02-28 4:49 ` [PATCH 4/5] HACK: set_parent callback for OMAP4 non-core DPLLs Mike Turquette
2013-02-28 4:49 ` [PATCH 5/5] HACK: omap: opp: add fake 400MHz OPP to bypass MPU Mike Turquette
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=513C5EBA.7040402@gmail.com \
--to=francescolavra.fl@gmail.com \
--cc=linaro-dev@lists.linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mturquette@linaro.org \
--cc=patches@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: 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).