|
@@ -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 = ®_data->parent;
|
|
|
init.num_parents = 1;
|
|
|
init.flags = 0;
|