]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
clk: fractional-divider: Add hw based registration APIs
authorStephen Boyd <sboyd@codeaurora.org>
Sun, 7 Feb 2016 08:15:09 +0000 (00:15 -0800)
committerStephen Boyd <sboyd@codeaurora.org>
Tue, 19 Apr 2016 23:56:28 +0000 (16:56 -0700)
Add registration APIs in the clk fractional divider code to
return struct clk_hw pointers instead of struct clk pointers.
This way we hide the struct clk pointer from providers unless
they need to use consumer facing APIs.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
drivers/clk/clk-fractional-divider.c
include/linux/clk-provider.h

index 1abcd76b4993805f2b135b92e5bc285b10de5c95..aab904618eb636f9f926a6b7b46d7b03b780b10c 100644 (file)
@@ -116,14 +116,15 @@ const struct clk_ops clk_fractional_divider_ops = {
 };
 EXPORT_SYMBOL_GPL(clk_fractional_divider_ops);
 
-struct clk *clk_register_fractional_divider(struct device *dev,
+struct clk_hw *clk_hw_register_fractional_divider(struct device *dev,
                const char *name, const char *parent_name, unsigned long flags,
                void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth,
                u8 clk_divider_flags, spinlock_t *lock)
 {
        struct clk_fractional_divider *fd;
        struct clk_init_data init;
-       struct clk *clk;
+       struct clk_hw *hw;
+       int ret;
 
        fd = kzalloc(sizeof(*fd), GFP_KERNEL);
        if (!fd)
@@ -146,10 +147,39 @@ struct clk *clk_register_fractional_divider(struct device *dev,
        fd->lock = lock;
        fd->hw.init = &init;
 
-       clk = clk_register(dev, &fd->hw);
-       if (IS_ERR(clk))
+       hw = &fd->hw;
+       ret = clk_hw_register(dev, hw);
+       if (ret) {
                kfree(fd);
+               hw = ERR_PTR(ret);
+       }
+
+       return hw;
+}
+EXPORT_SYMBOL_GPL(clk_hw_register_fractional_divider);
 
-       return clk;
+struct clk *clk_register_fractional_divider(struct device *dev,
+               const char *name, const char *parent_name, unsigned long flags,
+               void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth,
+               u8 clk_divider_flags, spinlock_t *lock)
+{
+       struct clk_hw *hw;
+
+       hw = clk_hw_register_fractional_divider(dev, name, parent_name, flags,
+                       reg, mshift, mwidth, nshift, nwidth, clk_divider_flags,
+                       lock);
+       if (IS_ERR(hw))
+               return ERR_CAST(hw);
+       return hw->clk;
 }
 EXPORT_SYMBOL_GPL(clk_register_fractional_divider);
+
+void clk_hw_unregister_fractional_divider(struct clk_hw *hw)
+{
+       struct clk_fractional_divider *fd;
+
+       fd = to_clk_fd(hw);
+
+       clk_hw_unregister(hw);
+       kfree(fd);
+}
index 79ad1a8a6831919649d8b3def350c8c7891f90e9..bcbaf6c95d5202cfb9317872965aac9381daa354 100644 (file)
@@ -563,6 +563,11 @@ struct clk *clk_register_fractional_divider(struct device *dev,
                const char *name, const char *parent_name, unsigned long flags,
                void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth,
                u8 clk_divider_flags, spinlock_t *lock);
+struct clk_hw *clk_hw_register_fractional_divider(struct device *dev,
+               const char *name, const char *parent_name, unsigned long flags,
+               void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth,
+               u8 clk_divider_flags, spinlock_t *lock);
+void clk_hw_unregister_fractional_divider(struct clk_hw *hw);
 
 /**
  * struct clk_multiplier - adjustable multiplier clock