]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - rpmsg/hwspinlock.git/commitdiff
clk: ti: clkctrl: add support for clkdm init for clkctrl clocks
authorTero Kristo <t-kristo@ti.com>
Mon, 18 Sep 2017 18:02:24 +0000 (21:02 +0300)
committerTero Kristo <t-kristo@ti.com>
Fri, 1 Dec 2017 13:15:17 +0000 (15:15 +0200)
Clkctrl clocks now support clockdomain init also. This will be needed
so that hwmod core can drop the support for clockdomain handling.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
drivers/clk/ti/clkctrl.c
drivers/clk/ti/clock.h

index 2db7d4080f2520f435ce93e63e183dd050812253..284ba449615c1ceebb68b804837c8dc44bbb1b78 100644 (file)
@@ -46,6 +46,7 @@ static bool _early_timeout = true;
 struct omap_clkctrl_provider {
        void __iomem *base;
        struct list_head clocks;
+       char *clkdm_name;
 };
 
 struct omap_clkctrl_clk {
@@ -208,6 +209,7 @@ static const struct clk_ops omap4_clkctrl_clk_ops = {
        .enable         = _omap4_clkctrl_clk_enable,
        .disable        = _omap4_clkctrl_clk_disable,
        .is_enabled     = _omap4_clkctrl_clk_is_enabled,
+       .init           = omap2_init_clk_clkdm,
 };
 
 static struct clk_hw *_ti_omap4_clkctrl_xlate(struct of_phandle_args *clkspec,
@@ -438,6 +440,21 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
 
        provider->base = of_iomap(node, 0);
 
+       provider->clkdm_name = kmalloc(strlen(node->parent->name) + 3,
+                                      GFP_KERNEL);
+       if (!provider->clkdm_name) {
+               kfree(provider);
+               return;
+       }
+
+       /*
+        * Create default clkdm name, replace _cm from end of parent node
+        * name with _clkdm
+        */
+       strcpy(provider->clkdm_name, node->parent->name);
+       provider->clkdm_name[strlen(provider->clkdm_name) - 2] = 0;
+       strcat(provider->clkdm_name, "clkdm");
+
        INIT_LIST_HEAD(&provider->clocks);
 
        /* Generate clocks */
@@ -460,6 +477,11 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
                if (reg_data->flags & CLKF_NO_IDLEST)
                        hw->flags |= NO_IDLEST;
 
+               if (reg_data->clkdm_name)
+                       hw->clkdm_name = reg_data->clkdm_name;
+               else
+                       hw->clkdm_name = provider->clkdm_name;
+
                init.parent_names = &reg_data->parent;
                init.num_parents = 1;
                init.flags = 0;
index 561dbe99ced72122b5b33a808830c0706891a01d..169241fd1edf40bfe7a5da90e16ff6115efde138 100644 (file)
@@ -221,6 +221,7 @@ struct omap_clkctrl_reg_data {
        const struct omap_clkctrl_bit_data *bit_data;
        u16 flags;
        const char *parent;
+       const char *clkdm_name;
 };
 
 struct omap_clkctrl_data {