We need to allow SoCs to create their own drivers for this so that they
can use their own of-platdata structs. To minimise code duplication,
export the driver operations and the ofdata_to_plat() setup function.

Signed-off-by: Simon Glass <s...@chromium.org>
---

(no changes since v1)

 drivers/clk/clk_fixed_rate.c | 14 ++++++++++----
 include/linux/clk-provider.h |  5 +++++
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/drivers/clk/clk_fixed_rate.c b/drivers/clk/clk_fixed_rate.c
index 3c5a83c523c..09f9ef26a42 100644
--- a/drivers/clk/clk_fixed_rate.c
+++ b/drivers/clk/clk_fixed_rate.c
@@ -25,18 +25,24 @@ const struct clk_ops clk_fixed_rate_ops = {
        .enable = dummy_enable,
 };
 
-static int clk_fixed_rate_of_to_plat(struct udevice *dev)
+void clk_fixed_rate_ofdata_to_plat_(struct udevice *dev,
+                                   struct clk_fixed_rate *plat)
 {
-       struct clk *clk = &to_clk_fixed_rate(dev)->clk;
+       struct clk *clk = &plat->clk;
 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
-       to_clk_fixed_rate(dev)->fixed_rate =
-               dev_read_u32_default(dev, "clock-frequency", 0);
+       plat->fixed_rate = dev_read_u32_default(dev, "clock-frequency", 0);
 #endif
        /* Make fixed rate clock accessible from higher level struct clk */
        /* FIXME: This is not allowed */
        dev_set_uclass_priv(dev, clk);
+
        clk->dev = dev;
        clk->enable_count = 0;
+}
+
+static int clk_fixed_rate_of_to_plat(struct udevice *dev)
+{
+       clk_fixed_rate_ofdata_to_plat_(dev, to_clk_fixed_rate(dev));
 
        return 0;
 }
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index c871ea646d3..f9ca8e433ec 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -193,6 +193,8 @@ struct clk_fixed_factor {
        unsigned int    div;
 };
 
+extern const struct clk_ops clk_fixed_rate_ops;
+
 #define to_clk_fixed_factor(_clk) container_of(_clk, struct clk_fixed_factor,\
                                               clk)
 
@@ -203,6 +205,9 @@ struct clk_fixed_rate {
 
 #define to_clk_fixed_rate(dev) ((struct clk_fixed_rate *)dev_get_plat(dev))
 
+void clk_fixed_rate_ofdata_to_plat_(struct udevice *dev,
+                                   struct clk_fixed_rate *plat);
+
 struct clk_composite {
        struct clk      clk;
        struct clk_ops  ops;
-- 
2.30.0.478.g8a0d178c01-goog

Reply via email to