|
@@ -128,54 +128,3 @@ const struct clk_ops clk_multiplier_ops = {
|
|
.set_rate = clk_multiplier_set_rate,
|
|
.set_rate = clk_multiplier_set_rate,
|
|
};
|
|
};
|
|
EXPORT_SYMBOL_GPL(clk_multiplier_ops);
|
|
EXPORT_SYMBOL_GPL(clk_multiplier_ops);
|
|
-
|
|
|
|
-struct clk *clk_register_multiplier(struct device *dev, const char *name,
|
|
|
|
- const char *parent_name,
|
|
|
|
- unsigned long flags,
|
|
|
|
- void __iomem *reg, u8 shift, u8 width,
|
|
|
|
- u8 clk_mult_flags, spinlock_t *lock)
|
|
|
|
-{
|
|
|
|
- struct clk_init_data init;
|
|
|
|
- struct clk_multiplier *mult;
|
|
|
|
- struct clk *clk;
|
|
|
|
-
|
|
|
|
- mult = kmalloc(sizeof(*mult), GFP_KERNEL);
|
|
|
|
- if (!mult)
|
|
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
|
-
|
|
|
|
- init.name = name;
|
|
|
|
- init.ops = &clk_multiplier_ops;
|
|
|
|
- init.flags = flags | CLK_IS_BASIC;
|
|
|
|
- init.parent_names = &parent_name;
|
|
|
|
- init.num_parents = 1;
|
|
|
|
-
|
|
|
|
- mult->reg = reg;
|
|
|
|
- mult->shift = shift;
|
|
|
|
- mult->width = width;
|
|
|
|
- mult->flags = clk_mult_flags;
|
|
|
|
- mult->lock = lock;
|
|
|
|
- mult->hw.init = &init;
|
|
|
|
-
|
|
|
|
- clk = clk_register(dev, &mult->hw);
|
|
|
|
- if (IS_ERR(clk))
|
|
|
|
- kfree(mult);
|
|
|
|
-
|
|
|
|
- return clk;
|
|
|
|
-}
|
|
|
|
-EXPORT_SYMBOL_GPL(clk_register_multiplier);
|
|
|
|
-
|
|
|
|
-void clk_unregister_multiplier(struct clk *clk)
|
|
|
|
-{
|
|
|
|
- struct clk_multiplier *mult;
|
|
|
|
- struct clk_hw *hw;
|
|
|
|
-
|
|
|
|
- hw = __clk_get_hw(clk);
|
|
|
|
- if (!hw)
|
|
|
|
- return;
|
|
|
|
-
|
|
|
|
- mult = to_clk_multiplier(hw);
|
|
|
|
-
|
|
|
|
- clk_unregister(clk);
|
|
|
|
- kfree(mult);
|
|
|
|
-}
|
|
|
|
-EXPORT_SYMBOL_GPL(clk_unregister_multiplier);
|
|
|