From: viresh.kumar@st.com (Viresh Kumar)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V3] CLKDEV: Add helper routines to allocate and add clkdevs for given struct clk *
Date: Tue, 17 Apr 2012 09:18:54 +0530 [thread overview]
Message-ID: <71de017a62f9c2032b25d44353df3f9be51e69a2.1334634063.git.viresh.kumar@st.com> (raw)
In-Reply-To: <20120416205133.GW3852@pengutronix.de>
From: Russell King <rmk+kernel@arm.linux.org.uk>
With common clock framework, clks are allocated at runtime. Some of them require
clkdevs to be allocated and added in global clkdev list.
This patch introduces helper routines to:
- allocate and add single clkdev for a single clk structure.
- add multiple clkdevs for a single clk structure.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
---
Arnd,
If this patch is acceptable to everybody, can you push it for v3.5?
V2->V3:
- Don't initialize ap to NULL, as this gives warnings on some compilers
- Create macro clkdev_alloc_valist() to avoid duplicate code.
drivers/clk/clkdev.c | 64 +++++++++++++++++++++++++++++++++++++++++++----
include/linux/clkdev.h | 3 ++
2 files changed, 61 insertions(+), 6 deletions(-)
diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
index 6db161f..9d93d27 100644
--- a/drivers/clk/clkdev.c
+++ b/drivers/clk/clkdev.c
@@ -116,8 +116,9 @@ struct clk_lookup_alloc {
char con_id[MAX_CON_ID];
};
-struct clk_lookup * __init_refok
-clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...)
+static struct clk_lookup * __init_refok
+__clkdev_alloc_valist(struct clk *clk, const char *con_id, const char *dev_fmt,
+ va_list ap)
{
struct clk_lookup_alloc *cla;
@@ -132,16 +133,35 @@ clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...)
}
if (dev_fmt) {
- va_list ap;
-
- va_start(ap, dev_fmt);
vscnprintf(cla->dev_id, sizeof(cla->dev_id), dev_fmt, ap);
cla->cl.dev_id = cla->dev_id;
- va_end(ap);
}
return &cla->cl;
}
+
+#define clkdev_alloc_valist(_cl, _clk, _con_id, _dev_fmt, _ap) \
+ do { \
+ if (_dev_fmt) \
+ va_start(_ap, _dev_fmt); \
+ \
+ _cl = __clkdev_alloc_valist(_clk, _con_id, _dev_fmt, \
+ _ap); \
+ \
+ if (_dev_fmt) \
+ va_end(ap); \
+ } while (0);
+
+struct clk_lookup * __init_refok
+clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...)
+{
+ struct clk_lookup *cl;
+ va_list ap;
+
+ clkdev_alloc_valist(cl, clk, con_id, dev_fmt, ap);
+
+ return cl;
+}
EXPORT_SYMBOL(clkdev_alloc);
int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
@@ -173,3 +193,35 @@ void clkdev_drop(struct clk_lookup *cl)
kfree(cl);
}
EXPORT_SYMBOL(clkdev_drop);
+
+int clk_register_clkdev(struct clk *clk, const char *con_id,
+ const char *dev_fmt, ...)
+{
+ struct clk_lookup *cl;
+ va_list ap;
+
+ clkdev_alloc_valist(cl, clk, con_id, dev_fmt, ap);
+
+ if (!cl)
+ return -ENOMEM;
+
+ clkdev_add(cl);
+ return 0;
+}
+EXPORT_SYMBOL(clk_register_clkdev);
+
+int clk_register_clkdevs(struct clk *clk, struct clk_lookup *cl, size_t num)
+{
+ unsigned i;
+
+ if (!clk)
+ return -ENOMEM;
+
+ for (i = 0; i < num; i++, cl++) {
+ cl->clk = clk;
+ clkdev_add(cl);
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL(clk_register_clkdevs);
diff --git a/include/linux/clkdev.h b/include/linux/clkdev.h
index d9a4fd0..01d8ff6 100644
--- a/include/linux/clkdev.h
+++ b/include/linux/clkdev.h
@@ -39,5 +39,8 @@ void clkdev_drop(struct clk_lookup *cl);
void clkdev_add_table(struct clk_lookup *, size_t);
int clk_add_alias(const char *, const char *, char *, struct device *);
+int clk_register_clkdev(struct clk *clk, const char *con_id,
+ const char *dev_fmt, ...);
+int clk_register_clkdevs(struct clk *clk, struct clk_lookup *cl, size_t num);
#endif
--
1.7.9
next prev parent reply other threads:[~2012-04-17 3:48 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-16 5:19 [PATCH] CLKDEV: Add helper routines to allocate and add clkdevs for given struct clk * Viresh Kumar
2012-04-16 10:25 ` Domenico Andreoli
2012-04-16 10:30 ` Viresh Kumar
2012-04-16 10:38 ` Russell King - ARM Linux
2012-04-16 10:39 ` Viresh Kumar
2012-04-16 10:56 ` Domenico Andreoli
2012-04-16 10:58 ` Viresh Kumar
2012-04-16 11:02 ` Russell King - ARM Linux
2012-04-16 11:52 ` Domenico Andreoli
2012-04-16 13:39 ` viresh kumar
2012-04-16 20:46 ` Domenico Andreoli
2012-04-16 20:51 ` s.hauer at pengutronix.de
2012-04-17 3:39 ` Viresh Kumar
2012-04-17 3:48 ` Viresh Kumar [this message]
2012-04-17 3:34 ` Viresh Kumar
2012-04-16 20:56 ` s.hauer at pengutronix.de
2012-04-16 21:06 ` Domenico Andreoli
2012-04-16 21:12 ` s.hauer at pengutronix.de
2012-04-17 3:40 ` Viresh Kumar
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=71de017a62f9c2032b25d44353df3f9be51e69a2.1334634063.git.viresh.kumar@st.com \
--to=viresh.kumar@st.com \
--cc=linux-arm-kernel@lists.infradead.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).