Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+28 −19
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/clk-provider.h>
#include <linux/io.h>
#include <linux/regmap.h>
#include <linux/mfd/syscon.h>

#include "clk-icst.h"

@@ -140,21 +141,16 @@ static const struct clk_ops icst_ops = {
	.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 char *name,
				  const char *parent_name,
			void __iomem *base)
				  struct regmap *map)
{
	struct clk *clk;
	struct clk_icst *icst;
	struct clk_init_data init;
	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);
	if (!icst) {
@@ -174,15 +170,7 @@ struct clk *icst_clk_register(struct device *dev,
	init.flags = CLK_IS_ROOT;
	init.parent_names = (parent_name ? &parent_name : NULL);
	init.num_parents = (parent_name ? 1 : 0);
	icst->map = regmap_init_mmio(dev, base, &icst_regmap_conf);
	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->map = map;
	icst->hw.init = &init;
	icst->params = pclone;
	icst->vcoreg_off = desc->vco_offset;
@@ -196,4 +184,25 @@ struct clk *icst_clk_register(struct device *dev,

	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);