clk: fixed-rate: Export driver parts for OF_PLATDATA_INST
authorSimon Glass <sjg@chromium.org>
Mon, 15 Mar 2021 04:25:23 +0000 (17:25 +1300)
committerSimon Glass <sjg@chromium.org>
Fri, 26 Mar 2021 04:03:08 +0000 (17:03 +1300)
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 <sjg@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/clk/clk_fixed_rate.c
include/linux/clk-provider.h

index 3c5a83c..09f9ef2 100644 (file)
@@ -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;
 }
index cc9c430..6fda14f 100644 (file)
@@ -192,6 +192,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)
 
@@ -202,6 +204,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;