Commit 384d977d authored by Linus Walleij's avatar Linus Walleij

clk: versatile-icst: refactor to allocate regmap separately

Break out the registration function so it creates a regmap and
pass to the setup function, so the latter can be shared with
a device tree probe function that already has a regmap.

Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: linux-clk@vger.kernel.org
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 179c8fb3
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <linux/clk-provider.h> #include <linux/clk-provider.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/mfd/syscon.h>
#include "clk-icst.h" #include "clk-icst.h"
...@@ -140,21 +141,16 @@ static const struct clk_ops icst_ops = { ...@@ -140,21 +141,16 @@ static const struct clk_ops icst_ops = {
.set_rate = icst_set_rate, .set_rate = icst_set_rate,
}; };
struct clk *icst_clk_register(struct device *dev, static struct clk *icst_clk_setup(struct device *dev,
const struct clk_icst_desc *desc, const struct clk_icst_desc *desc,
const char *name, const char *name,
const char *parent_name, const char *parent_name,
void __iomem *base) struct regmap *map)
{ {
struct clk *clk; struct clk *clk;
struct clk_icst *icst; struct clk_icst *icst;
struct clk_init_data init; struct clk_init_data init;
struct icst_params *pclone; struct icst_params *pclone;
struct regmap_config icst_regmap_conf = {
.reg_bits = 32,
.val_bits = 32,
.reg_stride = 4,
};
icst = kzalloc(sizeof(struct clk_icst), GFP_KERNEL); icst = kzalloc(sizeof(struct clk_icst), GFP_KERNEL);
if (!icst) { if (!icst) {
...@@ -174,15 +170,7 @@ struct clk *icst_clk_register(struct device *dev, ...@@ -174,15 +170,7 @@ struct clk *icst_clk_register(struct device *dev,
init.flags = CLK_IS_ROOT; init.flags = CLK_IS_ROOT;
init.parent_names = (parent_name ? &parent_name : NULL); init.parent_names = (parent_name ? &parent_name : NULL);
init.num_parents = (parent_name ? 1 : 0); init.num_parents = (parent_name ? 1 : 0);
icst->map = regmap_init_mmio(dev, base, &icst_regmap_conf); icst->map = map;
if (IS_ERR(icst->map)) {
int ret;
pr_err("could not initialize ICST regmap\n");
ret = PTR_ERR(icst->map);
kfree(icst);
return ERR_PTR(ret);
}
icst->hw.init = &init; icst->hw.init = &init;
icst->params = pclone; icst->params = pclone;
icst->vcoreg_off = desc->vco_offset; icst->vcoreg_off = desc->vco_offset;
...@@ -196,4 +184,25 @@ struct clk *icst_clk_register(struct device *dev, ...@@ -196,4 +184,25 @@ struct clk *icst_clk_register(struct device *dev,
return clk; return clk;
} }
struct clk *icst_clk_register(struct device *dev,
const struct clk_icst_desc *desc,
const char *name,
const char *parent_name,
void __iomem *base)
{
struct regmap_config icst_regmap_conf = {
.reg_bits = 32,
.val_bits = 32,
.reg_stride = 4,
};
struct regmap *map;
map = regmap_init_mmio(dev, base, &icst_regmap_conf);
if (IS_ERR(map)) {
pr_err("could not initialize ICST regmap\n");
return ERR_CAST(map);
}
return icst_clk_setup(dev, desc, name, parent_name, map);
}
EXPORT_SYMBOL_GPL(icst_clk_register); EXPORT_SYMBOL_GPL(icst_clk_register);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment