Commit ddfb183e authored by Tero Kristo's avatar Tero Kristo

clk: ti: clkctrl: add support for clkdm init for clkctrl clocks

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: default avatarTero Kristo <t-kristo@ti.com>
parent c2c296c3
...@@ -46,6 +46,7 @@ static bool _early_timeout = true; ...@@ -46,6 +46,7 @@ static bool _early_timeout = true;
struct omap_clkctrl_provider { struct omap_clkctrl_provider {
void __iomem *base; void __iomem *base;
struct list_head clocks; struct list_head clocks;
char *clkdm_name;
}; };
struct omap_clkctrl_clk { struct omap_clkctrl_clk {
...@@ -208,6 +209,7 @@ static const struct clk_ops omap4_clkctrl_clk_ops = { ...@@ -208,6 +209,7 @@ static const struct clk_ops omap4_clkctrl_clk_ops = {
.enable = _omap4_clkctrl_clk_enable, .enable = _omap4_clkctrl_clk_enable,
.disable = _omap4_clkctrl_clk_disable, .disable = _omap4_clkctrl_clk_disable,
.is_enabled = _omap4_clkctrl_clk_is_enabled, .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, 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) ...@@ -438,6 +440,21 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
provider->base = of_iomap(node, 0); 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); INIT_LIST_HEAD(&provider->clocks);
/* Generate clocks */ /* Generate clocks */
...@@ -460,6 +477,11 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node) ...@@ -460,6 +477,11 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
if (reg_data->flags & CLKF_NO_IDLEST) if (reg_data->flags & CLKF_NO_IDLEST)
hw->flags |= 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.parent_names = &reg_data->parent;
init.num_parents = 1; init.num_parents = 1;
init.flags = 0; init.flags = 0;
......
...@@ -221,6 +221,7 @@ struct omap_clkctrl_reg_data { ...@@ -221,6 +221,7 @@ struct omap_clkctrl_reg_data {
const struct omap_clkctrl_bit_data *bit_data; const struct omap_clkctrl_bit_data *bit_data;
u16 flags; u16 flags;
const char *parent; const char *parent;
const char *clkdm_name;
}; };
struct omap_clkctrl_data { struct omap_clkctrl_data {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment