Commit 1ae79c46 authored by Tero Kristo's avatar Tero Kristo

clk: ti: use automatic clock alias generation framework

Generate clock aliases automatically for all TI clock drivers.
Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
parent c17435c5
...@@ -164,7 +164,7 @@ static void __init omap_clk_register_apll(struct clk_hw *hw, ...@@ -164,7 +164,7 @@ static void __init omap_clk_register_apll(struct clk_hw *hw,
ad->clk_bypass = __clk_get_hw(clk); ad->clk_bypass = __clk_get_hw(clk);
clk = clk_register(NULL, &clk_hw->hw); clk = ti_clk_register(NULL, &clk_hw->hw, node->name);
if (!IS_ERR(clk)) { if (!IS_ERR(clk)) {
of_clk_add_provider(node, of_clk_src_simple_get, clk); of_clk_add_provider(node, of_clk_src_simple_get, clk);
kfree(clk_hw->hw.init->parent_names); kfree(clk_hw->hw.init->parent_names);
......
...@@ -24,6 +24,9 @@ ...@@ -24,6 +24,9 @@
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/clk/ti.h>
#include "clock.h"
#define DRA7_ATL_INSTANCES 4 #define DRA7_ATL_INSTANCES 4
...@@ -171,6 +174,7 @@ static void __init of_dra7_atl_clock_setup(struct device_node *node) ...@@ -171,6 +174,7 @@ static void __init of_dra7_atl_clock_setup(struct device_node *node)
struct clk_init_data init = { NULL }; struct clk_init_data init = { NULL };
const char **parent_names = NULL; const char **parent_names = NULL;
struct clk *clk; struct clk *clk;
int ret;
clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL); clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
if (!clk_hw) { if (!clk_hw) {
...@@ -200,9 +204,14 @@ static void __init of_dra7_atl_clock_setup(struct device_node *node) ...@@ -200,9 +204,14 @@ static void __init of_dra7_atl_clock_setup(struct device_node *node)
init.parent_names = parent_names; init.parent_names = parent_names;
clk = clk_register(NULL, &clk_hw->hw); clk = ti_clk_register(NULL, &clk_hw->hw, node->name);
if (!IS_ERR(clk)) { if (!IS_ERR(clk)) {
ret = ti_clk_add_alias(NULL, clk, node->name);
if (ret) {
clk_unregister(clk);
goto cleanup;
}
of_clk_add_provider(node, of_clk_src_simple_get, clk); of_clk_add_provider(node, of_clk_src_simple_get, clk);
kfree(parent_names); kfree(parent_names);
return; return;
......
...@@ -298,6 +298,7 @@ struct clk __init *ti_clk_register_clk(struct ti_clk *setup) ...@@ -298,6 +298,7 @@ struct clk __init *ti_clk_register_clk(struct ti_clk *setup)
struct ti_clk_fixed *fixed; struct ti_clk_fixed *fixed;
struct ti_clk_fixed_factor *fixed_factor; struct ti_clk_fixed_factor *fixed_factor;
struct clk_hw *clk_hw; struct clk_hw *clk_hw;
int ret;
if (setup->clk) if (setup->clk)
return setup->clk; return setup->clk;
...@@ -308,6 +309,13 @@ struct clk __init *ti_clk_register_clk(struct ti_clk *setup) ...@@ -308,6 +309,13 @@ struct clk __init *ti_clk_register_clk(struct ti_clk *setup)
clk = clk_register_fixed_rate(NULL, setup->name, NULL, 0, clk = clk_register_fixed_rate(NULL, setup->name, NULL, 0,
fixed->frequency); fixed->frequency);
if (!IS_ERR(clk)) {
ret = ti_clk_add_alias(NULL, clk, setup->name);
if (ret) {
clk_unregister(clk);
clk = ERR_PTR(ret);
}
}
break; break;
case TI_CLK_MUX: case TI_CLK_MUX:
clk = ti_clk_register_mux(setup); clk = ti_clk_register_mux(setup);
...@@ -325,6 +333,13 @@ struct clk __init *ti_clk_register_clk(struct ti_clk *setup) ...@@ -325,6 +333,13 @@ struct clk __init *ti_clk_register_clk(struct ti_clk *setup)
fixed_factor->parent, fixed_factor->parent,
0, fixed_factor->mult, 0, fixed_factor->mult,
fixed_factor->div); fixed_factor->div);
if (!IS_ERR(clk)) {
ret = ti_clk_add_alias(NULL, clk, setup->name);
if (ret) {
clk_unregister(clk);
clk = ERR_PTR(ret);
}
}
break; break;
case TI_CLK_GATE: case TI_CLK_GATE:
clk = ti_clk_register_gate(setup); clk = ti_clk_register_gate(setup);
...@@ -378,9 +393,6 @@ int __init ti_clk_register_legacy_clks(struct ti_clk_alias *clks) ...@@ -378,9 +393,6 @@ int __init ti_clk_register_legacy_clks(struct ti_clk_alias *clks)
clks->clk->name, PTR_ERR(clk)); clks->clk->name, PTR_ERR(clk));
return PTR_ERR(clk); return PTR_ERR(clk);
} }
} else {
clks->lk.clk = clk;
clkdev_add(&clks->lk);
} }
clks++; clks++;
} }
...@@ -403,8 +415,6 @@ int __init ti_clk_register_legacy_clks(struct ti_clk_alias *clks) ...@@ -403,8 +415,6 @@ int __init ti_clk_register_legacy_clks(struct ti_clk_alias *clks)
} }
} else { } else {
retry = true; retry = true;
retry_clk->lk.clk = clk;
clkdev_add(&retry_clk->lk);
list_del(&retry_clk->link); list_del(&retry_clk->link);
} }
} }
......
...@@ -126,6 +126,7 @@ struct clk *ti_clk_register_composite(struct ti_clk *setup) ...@@ -126,6 +126,7 @@ struct clk *ti_clk_register_composite(struct ti_clk *setup)
int num_parents = 1; int num_parents = 1;
const char **parent_names = NULL; const char **parent_names = NULL;
struct clk *clk; struct clk *clk;
int ret;
comp = setup->data; comp = setup->data;
...@@ -150,6 +151,12 @@ struct clk *ti_clk_register_composite(struct ti_clk *setup) ...@@ -150,6 +151,12 @@ struct clk *ti_clk_register_composite(struct ti_clk *setup)
&ti_composite_divider_ops, gate, &ti_composite_divider_ops, gate,
&ti_composite_gate_ops, 0); &ti_composite_gate_ops, 0);
ret = ti_clk_add_alias(NULL, clk, setup->name);
if (ret) {
clk_unregister(clk);
return ERR_PTR(ret);
}
return clk; return clk;
} }
#endif #endif
...@@ -163,6 +170,7 @@ static void __init _register_composite(struct clk_hw *hw, ...@@ -163,6 +170,7 @@ static void __init _register_composite(struct clk_hw *hw,
int num_parents = 0; int num_parents = 0;
const char **parent_names = NULL; const char **parent_names = NULL;
int i; int i;
int ret;
/* Check for presence of each component clock */ /* Check for presence of each component clock */
for (i = 0; i < CLK_COMPONENT_TYPE_MAX; i++) { for (i = 0; i < CLK_COMPONENT_TYPE_MAX; i++) {
...@@ -217,8 +225,14 @@ static void __init _register_composite(struct clk_hw *hw, ...@@ -217,8 +225,14 @@ static void __init _register_composite(struct clk_hw *hw,
_get_hw(cclk, CLK_COMPONENT_TYPE_GATE), _get_hw(cclk, CLK_COMPONENT_TYPE_GATE),
&ti_composite_gate_ops, 0); &ti_composite_gate_ops, 0);
if (!IS_ERR(clk)) if (!IS_ERR(clk)) {
ret = ti_clk_add_alias(NULL, clk, node->name);
if (ret) {
clk_unregister(clk);
goto cleanup;
}
of_clk_add_provider(node, of_clk_src_simple_get, clk); of_clk_add_provider(node, of_clk_src_simple_get, clk);
}
cleanup: cleanup:
/* Free component clock list entries */ /* Free component clock list entries */
......
...@@ -311,7 +311,7 @@ static struct clk *_register_divider(struct device *dev, const char *name, ...@@ -311,7 +311,7 @@ static struct clk *_register_divider(struct device *dev, const char *name,
div->table = table; div->table = table;
/* register the clock */ /* register the clock */
clk = clk_register(dev, &div->hw); clk = ti_clk_register(dev, &div->hw, name);
if (IS_ERR(clk)) if (IS_ERR(clk))
kfree(div); kfree(div);
......
...@@ -185,7 +185,7 @@ static void __init _register_dpll(struct clk_hw *hw, ...@@ -185,7 +185,7 @@ static void __init _register_dpll(struct clk_hw *hw,
dd->clk_bypass = __clk_get_hw(clk); dd->clk_bypass = __clk_get_hw(clk);
/* register the clock */ /* register the clock */
clk = clk_register(NULL, &clk_hw->hw); clk = ti_clk_register(NULL, &clk_hw->hw, node->name);
if (!IS_ERR(clk)) { if (!IS_ERR(clk)) {
omap2_init_clk_hw_omap_clocks(&clk_hw->hw); omap2_init_clk_hw_omap_clocks(&clk_hw->hw);
...@@ -288,7 +288,7 @@ struct clk *ti_clk_register_dpll(struct ti_clk *setup) ...@@ -288,7 +288,7 @@ struct clk *ti_clk_register_dpll(struct ti_clk *setup)
if (dpll->flags & CLKF_J_TYPE) if (dpll->flags & CLKF_J_TYPE)
dd->flags |= DPLL_J_TYPE; dd->flags |= DPLL_J_TYPE;
clk = clk_register(NULL, &clk_hw->hw); clk = ti_clk_register(NULL, &clk_hw->hw, setup->name);
if (!IS_ERR(clk)) if (!IS_ERR(clk))
return clk; return clk;
...@@ -340,7 +340,7 @@ static void _register_dpll_x2(struct device_node *node, ...@@ -340,7 +340,7 @@ static void _register_dpll_x2(struct device_node *node,
init.num_parents = 1; init.num_parents = 1;
/* register the clock */ /* register the clock */
clk = clk_register(NULL, &clk_hw->hw); clk = ti_clk_register(NULL, &clk_hw->hw, name);
if (IS_ERR(clk)) { if (IS_ERR(clk)) {
kfree(clk_hw); kfree(clk_hw);
......
...@@ -62,6 +62,7 @@ static void __init of_ti_fixed_factor_clk_setup(struct device_node *node) ...@@ -62,6 +62,7 @@ static void __init of_ti_fixed_factor_clk_setup(struct device_node *node)
if (!IS_ERR(clk)) { if (!IS_ERR(clk)) {
of_clk_add_provider(node, of_clk_src_simple_get, clk); of_clk_add_provider(node, of_clk_src_simple_get, clk);
of_ti_clk_autoidle_setup(node); of_ti_clk_autoidle_setup(node);
ti_clk_add_alias(NULL, clk, clk_name);
} }
} }
CLK_OF_DECLARE(ti_fixed_factor_clk, "ti,fixed-factor-clock", CLK_OF_DECLARE(ti_fixed_factor_clk, "ti,fixed-factor-clock",
......
...@@ -120,7 +120,7 @@ static struct clk *_register_gate(struct device *dev, const char *name, ...@@ -120,7 +120,7 @@ static struct clk *_register_gate(struct device *dev, const char *name,
init.flags = flags; init.flags = flags;
clk = clk_register(NULL, &clk_hw->hw); clk = ti_clk_register(NULL, &clk_hw->hw, name);
if (IS_ERR(clk)) if (IS_ERR(clk))
kfree(clk_hw); kfree(clk_hw);
......
...@@ -58,7 +58,7 @@ static struct clk *_register_interface(struct device *dev, const char *name, ...@@ -58,7 +58,7 @@ static struct clk *_register_interface(struct device *dev, const char *name,
init.num_parents = 1; init.num_parents = 1;
init.parent_names = &parent_name; init.parent_names = &parent_name;
clk = clk_register(NULL, &clk_hw->hw); clk = ti_clk_register(NULL, &clk_hw->hw, name);
if (IS_ERR(clk)) if (IS_ERR(clk))
kfree(clk_hw); kfree(clk_hw);
......
...@@ -127,7 +127,7 @@ static struct clk *_register_mux(struct device *dev, const char *name, ...@@ -127,7 +127,7 @@ static struct clk *_register_mux(struct device *dev, const char *name,
mux->table = table; mux->table = table;
mux->hw.init = &init; mux->hw.init = &init;
clk = clk_register(dev, &mux->hw); clk = ti_clk_register(dev, &mux->hw, name);
if (IS_ERR(clk)) if (IS_ERR(clk))
kfree(mux); kfree(mux);
......
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