summaryrefslogtreecommitdiffstats
path: root/drivers/clk
diff options
context:
space:
mode:
authorAndrey Panov <rockford@yandex.ru>2015-03-04 23:11:34 +0300
committerSascha Hauer <s.hauer@pengutronix.de>2015-03-05 09:11:34 +0100
commit5a3a479dae11dd16ad0b754ae798fc083db3b3aa (patch)
tree0bff605b42d302abc40ec736b383c3304d049e5c /drivers/clk
parent9e3ce4eee64ff143b280efbae1582f20261a3187 (diff)
downloadbarebox-5a3a479dae11dd16ad0b754ae798fc083db3b3aa.tar.gz
barebox-5a3a479dae11dd16ad0b754ae798fc083db3b3aa.tar.xz
CLK: clk-divider: Introduce clk_divider_alloc() and *_free() routines
Signed-off-by: Andrey Panov <rockford@yandex.ru> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/clk')
-rw-r--r--drivers/clk/clk-divider.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
index eb4833441a..cedcddaabd 100644
--- a/drivers/clk/clk-divider.c
+++ b/drivers/clk/clk-divider.c
@@ -212,11 +212,10 @@ struct clk_ops clk_divider_ops = {
.round_rate = clk_divider_round_rate,
};
-struct clk *clk_divider(const char *name, const char *parent,
+struct clk *clk_divider_alloc(const char *name, const char *parent,
void __iomem *reg, u8 shift, u8 width, unsigned flags)
{
struct clk_divider *div = xzalloc(sizeof(*div));
- int ret;
div->shift = shift;
div->reg = reg;
@@ -228,13 +227,31 @@ struct clk *clk_divider(const char *name, const char *parent,
div->clk.parent_names = &div->parent;
div->clk.num_parents = 1;
- ret = clk_register(&div->clk);
+ return &div->clk;
+}
+
+void clk_divider_free(struct clk *clk)
+{
+ struct clk_divider *d = container_of(clk, struct clk_divider, clk);
+
+ free(d);
+}
+
+struct clk *clk_divider(const char *name, const char *parent,
+ void __iomem *reg, u8 shift, u8 width, unsigned flags)
+{
+ struct clk *d;
+ int ret;
+
+ d = clk_divider_alloc(name , parent, reg, shift, width, flags);
+
+ ret = clk_register(d);
if (ret) {
- free(div);
+ clk_divider_free(d);
return ERR_PTR(ret);
}
- return &div->clk;
+ return d;
}
struct clk *clk_divider_one_based(const char *name, const char *parent,