]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ARM: OMAP2+: PRCM: split PRCM module init to their own driver files
authorTero Kristo <t-kristo@ti.com>
Wed, 12 Mar 2014 16:33:45 +0000 (18:33 +0200)
committerTero Kristo <t-kristo@ti.com>
Fri, 27 Mar 2015 08:55:56 +0000 (10:55 +0200)
Splits the clock related provider module inits under their own driver files.
Previously this was done for all modules under the common PRM driver.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
arch/arm/mach-omap2/cm.h
arch/arm/mach-omap2/cm_common.c
arch/arm/mach-omap2/control.c
arch/arm/mach-omap2/control.h
arch/arm/mach-omap2/io.c
arch/arm/mach-omap2/prm_common.c
include/linux/clk/ti.h

index 6222e87a79b623e7299e2c694e01246979d1accd..748ac338812b42b334544f2060de9b98d8f74ddd 100644 (file)
@@ -70,6 +70,7 @@ int omap_cm_module_enable(u8 mode, u8 part, u16 inst, u16 clkctrl_offs);
 int omap_cm_module_disable(u8 part, u16 inst, u16 clkctrl_offs);
 extern int cm_register(struct cm_ll_data *cld);
 extern int cm_unregister(struct cm_ll_data *cld);
+int omap_cm_init(void);
 
 # endif
 
index 8fe02fcedc48e3974bc90388753efa8a9c27aab6..f3d578be327238d6e6dddd11f6af9fa37b1e6c3c 100644 (file)
 #include <linux/init.h>
 #include <linux/errno.h>
 #include <linux/bug.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
 
 #include "cm2xxx.h"
 #include "cm3xxx.h"
 #include "cm44xx.h"
+#include "clock.h"
 
 /*
  * cm_ll_data: function pointers to SoC-specific implementations of
@@ -212,3 +215,51 @@ int cm_unregister(struct cm_ll_data *cld)
 
        return 0;
 }
+
+static struct omap_prcm_init_data cm_data = {
+       .index = TI_CLKM_CM,
+};
+
+static struct omap_prcm_init_data cm2_data = {
+       .index = TI_CLKM_CM2,
+};
+
+static const struct of_device_id omap_cm_dt_match_table[] = {
+       { .compatible = "ti,omap3-cm", .data = &cm_data },
+       { .compatible = "ti,omap4-cm1", .data = &cm_data },
+       { .compatible = "ti,omap4-cm2", .data = &cm2_data },
+       { .compatible = "ti,omap5-cm-core-aon", .data = &cm_data },
+       { .compatible = "ti,omap5-cm-core", .data = &cm2_data },
+       { .compatible = "ti,dra7-cm-core-aon", .data = &cm_data },
+       { .compatible = "ti,dra7-cm-core", .data = &cm2_data },
+       { }
+};
+
+/**
+ * omap_cm_init - low level init for the CM drivers
+ *
+ * Initializes the low level clock infrastructure for CM drivers.
+ * Returns 0 in success, negative error value in failure.
+ */
+int __init omap_cm_init(void)
+{
+       struct device_node *np;
+       void __iomem *mem;
+       const struct of_device_id *match;
+       const struct omap_prcm_init_data *data;
+       int ret;
+
+       for_each_matching_node_and_match(np, omap_cm_dt_match_table, &match) {
+               data = match->data;
+
+               mem = of_iomap(np, 0);
+               if (!mem)
+                       return -ENOMEM;
+
+               ret = omap2_clk_provider_init(np, data->index, mem);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
index da041b4ab29c6bb0b5ae5e67aee2271887b8b73e..e8818242f968bd969b137d8db1e7d9fc11497520 100644 (file)
@@ -14,6 +14,7 @@
 
 #include <linux/kernel.h>
 #include <linux/io.h>
+#include <linux/of_address.h>
 
 #include "soc.h"
 #include "iomap.h"
@@ -25,6 +26,7 @@
 #include "sdrc.h"
 #include "pm.h"
 #include "control.h"
+#include "clock.h"
 
 /* Used by omap3_ctrl_save_padconf() */
 #define START_PADCONF_SAVE             0x2
@@ -611,3 +613,48 @@ void __init omap3_ctrl_init(void)
        omap3_ctrl_setup_d2d_padconf();
 }
 #endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */
+
+struct control_init_data {
+       int index;
+};
+
+static struct control_init_data ctrl_data = {
+       .index = TI_CLKM_CTRL,
+};
+
+static const struct of_device_id omap_scrm_dt_match_table[] = {
+       { .compatible = "ti,am3-scrm", .data = &ctrl_data },
+       { .compatible = "ti,am4-scrm", .data = &ctrl_data },
+       { .compatible = "ti,omap2-scrm", .data = &ctrl_data },
+       { .compatible = "ti,omap3-scrm", .data = &ctrl_data },
+       { }
+};
+
+/**
+ * omap_control_init - low level init for the control driver
+ *
+ * Initializes the low level clock infrastructure for control driver.
+ * Returns 0 in success, negative error value in failure.
+ */
+int __init omap_control_init(void)
+{
+       struct device_node *np;
+       void __iomem *mem;
+       const struct of_device_id *match;
+       const struct omap_prcm_init_data *data;
+       int ret;
+
+       for_each_matching_node_and_match(np, omap_scrm_dt_match_table, &match) {
+               data = match->data;
+
+               mem = of_iomap(np, 0);
+               if (!mem)
+                       return -ENOMEM;
+
+               ret = omap2_clk_provider_init(np, data->index, mem);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
index b8a48718121015931c1d7d90092dd1161a5c4efb..baf5783cb05d0eecc0650bf83b033494e4c2d24f 100644 (file)
@@ -464,6 +464,7 @@ extern void omap_ctrl_write_dsp_boot_mode(u8 bootmode);
 extern void omap3630_ctrl_disable_rta(void);
 extern int omap3_ctrl_save_padconf(void);
 void omap3_ctrl_init(void);
+int omap_control_init(void);
 extern void omap2_set_globals_control(void __iomem *ctrl,
                                      void __iomem *ctrl_pad);
 #else
index 460da22a005c7a4799ae42515809a8607c75b69b..46640c0ddc0f2605577530d81eca5c037645924d 100644 (file)
@@ -756,6 +756,10 @@ int __init omap_clk_init(void)
        ti_clk_init_features();
 
        if (of_have_populated_dt()) {
+               ret = omap_control_init();
+               if (ret)
+                       return ret;
+
                ret = omap_prcm_init();
                if (ret)
                        return ret;
index 1bfd00e10f76db0984f63e56747cd639e7da3ba6..6cbebbe252c43292ff9e82065d57e552b532a864 100644 (file)
@@ -637,43 +637,22 @@ static struct omap_prcm_init_data prm_data = {
        .index = TI_CLKM_PRM,
 };
 
-static struct omap_prcm_init_data cm_data = {
-       .index = TI_CLKM_CM,
-};
-
-static struct omap_prcm_init_data cm2_data = {
-       .index = TI_CLKM_CM2,
-};
-
 static struct omap_prcm_init_data scrm_data = {
        .index = TI_CLKM_SCRM,
 };
 
 static const struct of_device_id omap_prcm_dt_match_table[] = {
        { .compatible = "ti,am3-prcm", .data = &prm_data },
-       { .compatible = "ti,am3-scrm", .data = &scrm_data },
        { .compatible = "ti,am4-prcm", .data = &prm_data },
-       { .compatible = "ti,am4-scrm", .data = &scrm_data },
        { .compatible = "ti,dm814-prcm", .data = &prm_data },
-       { .compatible = "ti,dm814-scrm", .data = &scrm_data },
        { .compatible = "ti,dm816-prcm", .data = &prm_data },
-       { .compatible = "ti,dm816-scrm", .data = &scrm_data },
        { .compatible = "ti,omap2-prcm", .data = &prm_data },
-       { .compatible = "ti,omap2-scrm", .data = &scrm_data },
        { .compatible = "ti,omap3-prm", .data = &prm_data },
-       { .compatible = "ti,omap3-cm", .data = &cm_data },
-       { .compatible = "ti,omap3-scrm", .data = &scrm_data },
-       { .compatible = "ti,omap4-cm1", .data = &cm_data },
        { .compatible = "ti,omap4-prm", .data = &prm_data },
-       { .compatible = "ti,omap4-cm2", .data = &cm2_data },
        { .compatible = "ti,omap4-scrm", .data = &scrm_data },
        { .compatible = "ti,omap5-prm", .data = &prm_data },
-       { .compatible = "ti,omap5-cm-core-aon", .data = &cm_data },
        { .compatible = "ti,omap5-scrm", .data = &scrm_data },
-       { .compatible = "ti,omap5-cm-core", .data = &cm2_data },
        { .compatible = "ti,dra7-prm", .data = &prm_data },
-       { .compatible = "ti,dra7-cm-core-aon", .data = &cm_data },
-       { .compatible = "ti,dra7-cm-core", .data = &cm2_data },
        { }
 };
 
@@ -703,6 +682,8 @@ int __init omap_prcm_init(void)
                        return ret;
        }
 
+       omap_cm_init();
+
        return 0;
 }
 
index 19895a3f48b78e581b42acfa191427112faf546a..79b76e13d90425db1ed1320b1bfe9f11aecfd767 100644 (file)
@@ -215,15 +215,14 @@ struct ti_dt_clk {
                .node_name = name,      \
        }
 
-/* Maximum number of clock memmaps */
-#define CLK_MAX_MEMMAPS                        4
-
 /* Static memmap indices */
 enum {
        TI_CLKM_CM = 0,
        TI_CLKM_CM2,
        TI_CLKM_PRM,
        TI_CLKM_SCRM,
+       TI_CLKM_CTRL,
+       CLK_MAX_MEMMAPS
 };
 
 typedef void (*ti_of_clk_init_cb_t)(struct clk_hw *, struct device_node *);