|
@@ -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 = {
|
|
.set_rate = icst_set_rate,
|
|
.set_rate = icst_set_rate,
|
|
};
|
|
};
|
|
|
|
|
|
-struct clk *icst_clk_register(struct device *dev,
|
|
|
|
- const struct clk_icst_desc *desc,
|
|
|
|
- const char *name,
|
|
|
|
- const char *parent_name,
|
|
|
|
- void __iomem *base)
|
|
|
|
|
|
+static struct clk *icst_clk_setup(struct device *dev,
|
|
|
|
+ const struct clk_icst_desc *desc,
|
|
|
|
+ const char *name,
|
|
|
|
+ const char *parent_name,
|
|
|
|
+ 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,
|
|
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);
|
|
|
|
- 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->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,
|
|
|
|
|
|
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);
|