From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Marc Gonzalez <marc.w.gonzalez@free.fr>
Cc: Stephen Boyd <sboyd@kernel.org>,
Michael Turquette <mturquette@baylibre.com>,
linux-clk <linux-clk@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Jonathan Neusch?fer <j.neuschaefer@gmx.net>,
Guenter Roeck <linux@roeck-us.net>
Subject: Re: [PATCH v1] clk: Add devm_clk_{prepare,enable,prepare_enable}
Date: Mon, 15 Jul 2019 14:46:47 -0700 [thread overview]
Message-ID: <20190715214647.GY7234@tuxbook-pro> (raw)
In-Reply-To: <1d7a1b3b-e9bf-1d80-609d-a9c0c932b15a@free.fr>
On Mon 15 Jul 08:34 PDT 2019, Marc Gonzalez wrote:
[..]
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index c0990703ce54..5e85548357c0 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -914,6 +914,18 @@ int clk_prepare(struct clk *clk)
> }
> EXPORT_SYMBOL_GPL(clk_prepare);
>
> +static void unprepare(void *clk)
This deserves a less generic name.
> +{
> + clk_unprepare(clk);
> +}
> +
> +int devm_clk_prepare(struct device *dev, struct clk *clk)
> +{
> + int rc = clk_prepare(clk);
> + return rc ? : devm_add_action_or_reset(dev, unprepare, clk);
> +}
> +EXPORT_SYMBOL_GPL(devm_clk_prepare);
> +
> static void clk_core_disable(struct clk_core *core)
> {
> lockdep_assert_held(&enable_lock);
> @@ -1136,6 +1148,18 @@ int clk_enable(struct clk *clk)
> }
> EXPORT_SYMBOL_GPL(clk_enable);
>
> +static void disable(void *clk)
> +{
> + clk_disable(clk);
> +}
> +
> +int devm_clk_enable(struct device *dev, struct clk *clk)
clk_enable() is used in code that can't sleep, in what scenario do you
envision it being useful to enable a clock from such region until devres
cleans up the associated device?
> +{
> + int rc = clk_enable(clk);
> + return rc ? : devm_add_action_or_reset(dev, disable, clk);
devm_add_action_or_reset() allocates the devres object with GFP_KERNEL,
so this won't work.
> +}
> +EXPORT_SYMBOL_GPL(devm_clk_enable);
> +
> static int clk_core_prepare_enable(struct clk_core *core)
> {
> int ret;
> diff --git a/include/linux/clk.h b/include/linux/clk.h
> index 3c096c7a51dc..d09b5207e3f1 100644
> --- a/include/linux/clk.h
> +++ b/include/linux/clk.h
> @@ -895,6 +895,14 @@ static inline void clk_restore_context(void) {}
>
> #endif
>
> +int devm_clk_prepare(struct device *dev, struct clk *clk);
> +int devm_clk_enable(struct device *dev, struct clk *clk);
> +static inline int devm_clk_prepare_enable(struct device *dev, struct clk *clk)
devm_clk_prepare_enable() sounds very useful, devm_clk_prepare() might
be useful, so keep those and drop devm_clk_enable().
Regards,
Bjorn
> +{
> + int rc = devm_clk_prepare(dev, clk);
> + return rc ? : devm_clk_enable(dev, clk);
> +}
> +
> /* clk_prepare_enable helps cases using clk_enable in non-atomic context. */
> static inline int clk_prepare_enable(struct clk *clk)
> {
> --
> 2.17.1
next prev parent reply other threads:[~2019-07-15 21:45 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-15 15:34 [PATCH v1] clk: Add devm_clk_{prepare,enable,prepare_enable} Marc Gonzalez
2019-07-15 21:46 ` Bjorn Andersson [this message]
2019-11-25 13:50 ` Marc Gonzalez
2019-11-25 13:50 ` Marc Gonzalez
2019-07-16 0:25 ` Guenter Roeck
2019-07-16 8:18 ` Marc Gonzalez
2019-08-20 8:46 ` Marc Gonzalez
2019-11-25 12:46 ` Marc Gonzalez
2019-11-25 12:46 ` Marc Gonzalez
2019-11-25 12:51 ` Marc Gonzalez
2019-11-25 12:51 ` Marc Gonzalez
2019-11-25 12:52 ` Russell King - ARM Linux admin
2019-11-25 12:52 ` Russell King - ARM Linux admin
2019-11-25 13:16 ` Marc Gonzalez
2019-11-25 13:16 ` Marc Gonzalez
2019-11-25 13:31 ` Russell King - ARM Linux admin
2019-11-25 13:31 ` Russell King - ARM Linux admin
2019-11-25 13:34 ` Marc Gonzalez
2019-11-25 13:34 ` Marc Gonzalez
2019-11-25 13:38 ` Russell King - ARM Linux admin
2019-11-25 13:38 ` Russell King - ARM Linux admin
2019-11-25 12:55 ` Russell King - ARM Linux admin
2019-11-25 12:55 ` Russell King - ARM Linux admin
2019-11-25 13:10 ` Marc Gonzalez
2019-11-25 13:10 ` Marc Gonzalez
2019-11-25 13:37 ` Russell King - ARM Linux admin
2019-11-25 13:37 ` Russell King - ARM Linux admin
2019-11-25 14:11 ` Marc Gonzalez
2019-11-25 14:11 ` Marc Gonzalez
2019-11-25 20:43 ` Geert Uytterhoeven
2019-11-25 20:43 ` 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=20190715214647.GY7234@tuxbook-pro \
--to=bjorn.andersson@linaro.org \
--cc=j.neuschaefer@gmx.net \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=marc.w.gonzalez@free.fr \
--cc=mturquette@baylibre.com \
--cc=sboyd@kernel.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 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.