Commit ead47825 authored by Tero Kristo's avatar Tero Kristo

clk: ti: generalize the init sequence of clk_hw_omap clocks

Add a generic API for initializing clocks of clk_hw_omap type clocks,
and convert the whole TI clock driver suite to use this for registering
the clocks. Also, get rid of the now redundant API for adding the clocks
to the OMAP HW clocks list; instead this is used directly from the
register API.
Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
Tested-by: default avatarKeerthy <j-keerthy@ti.com>
parent 8aa09cf3
...@@ -165,7 +165,7 @@ static void __init omap_clk_register_apll(void *user, ...@@ -165,7 +165,7 @@ static void __init omap_clk_register_apll(void *user,
ad->clk_bypass = __clk_get_hw(clk); ad->clk_bypass = __clk_get_hw(clk);
clk = ti_clk_register(NULL, &clk_hw->hw, node->name); clk = ti_clk_register_omap_hw(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);
...@@ -402,7 +402,7 @@ static void __init of_omap2_apll_setup(struct device_node *node) ...@@ -402,7 +402,7 @@ static void __init of_omap2_apll_setup(struct device_node *node)
if (ret) if (ret)
goto cleanup; goto cleanup;
clk = clk_register(NULL, &clk_hw->hw); clk = ti_clk_register_omap_hw(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(init); kfree(init);
......
...@@ -520,20 +520,31 @@ struct clk *ti_clk_register(struct device *dev, struct clk_hw *hw, ...@@ -520,20 +520,31 @@ struct clk *ti_clk_register(struct device *dev, struct clk_hw *hw,
} }
/** /**
* omap2_init_clk_hw_omap_clocks - initialize an OMAP clock * ti_clk_register_omap_hw - register a clk_hw_omap to the clock framework
* @hw: struct clk_hw * to initialize * @dev: device for this clock
* @hw: hardware clock handle
* @con: connection ID for this clock
* *
* Add an OMAP clock @clk to the internal list of OMAP clocks. Used * Registers a clk_hw_omap clock to the clock framewor, adds a clock alias
* temporarily for autoidle handling, until this support can be * for it, and adds the list to the available clk_hw_omap type clocks.
* integrated into the common clock framework code in some way. No * Returns a handle to the registered clock if successful, ERR_PTR value
* return value. * in failure.
*/ */
void omap2_init_clk_hw_omap_clocks(struct clk_hw *hw) struct clk *ti_clk_register_omap_hw(struct device *dev, struct clk_hw *hw,
const char *con)
{ {
struct clk_hw_omap *c; struct clk *clk;
struct clk_hw_omap *oclk;
c = to_clk_hw_omap(hw); clk = ti_clk_register(dev, hw, con);
list_add(&c->node, &clk_hw_omap_clocks); if (IS_ERR(clk))
return clk;
oclk = to_clk_hw_omap(hw);
list_add(&oclk->node, &clk_hw_omap_clocks);
return clk;
} }
/** /**
......
...@@ -203,6 +203,8 @@ typedef void (*ti_of_clk_init_cb_t)(void *, struct device_node *); ...@@ -203,6 +203,8 @@ typedef void (*ti_of_clk_init_cb_t)(void *, struct device_node *);
struct clk *ti_clk_register(struct device *dev, struct clk_hw *hw, struct clk *ti_clk_register(struct device *dev, struct clk_hw *hw,
const char *con); const char *con);
struct clk *ti_clk_register_omap_hw(struct device *dev, struct clk_hw *hw,
const char *con);
int ti_clk_add_alias(struct device *dev, struct clk *clk, const char *con); int ti_clk_add_alias(struct device *dev, struct clk *clk, const char *con);
void ti_clk_add_aliases(void); void ti_clk_add_aliases(void);
...@@ -221,7 +223,6 @@ int ti_clk_retry_init(struct device_node *node, void *user, ...@@ -221,7 +223,6 @@ int ti_clk_retry_init(struct device_node *node, void *user,
ti_of_clk_init_cb_t func); ti_of_clk_init_cb_t func);
int ti_clk_add_component(struct device_node *node, struct clk_hw *hw, int type); int ti_clk_add_component(struct device_node *node, struct clk_hw *hw, int type);
void omap2_init_clk_hw_omap_clocks(struct clk_hw *hw);
int of_ti_clk_autoidle_setup(struct device_node *node); int of_ti_clk_autoidle_setup(struct device_node *node);
void omap2_clk_enable_init_clocks(const char **clk_names, u8 num_clocks); void omap2_clk_enable_init_clocks(const char **clk_names, u8 num_clocks);
......
...@@ -192,10 +192,9 @@ static void __init _register_dpll(void *user, ...@@ -192,10 +192,9 @@ static void __init _register_dpll(void *user,
dd->clk_bypass = __clk_get_hw(clk); dd->clk_bypass = __clk_get_hw(clk);
/* register the clock */ /* register the clock */
clk = ti_clk_register(NULL, &clk_hw->hw, node->name); clk = ti_clk_register_omap_hw(NULL, &clk_hw->hw, node->name);
if (!IS_ERR(clk)) { if (!IS_ERR(clk)) {
omap2_init_clk_hw_omap_clocks(&clk_hw->hw);
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);
kfree(clk_hw->hw.init); kfree(clk_hw->hw.init);
...@@ -265,14 +264,12 @@ static void _register_dpll_x2(struct device_node *node, ...@@ -265,14 +264,12 @@ static void _register_dpll_x2(struct device_node *node,
#endif #endif
/* register the clock */ /* register the clock */
clk = ti_clk_register(NULL, &clk_hw->hw, name); clk = ti_clk_register_omap_hw(NULL, &clk_hw->hw, name);
if (IS_ERR(clk)) { if (IS_ERR(clk))
kfree(clk_hw); kfree(clk_hw);
} else { else
omap2_init_clk_hw_omap_clocks(&clk_hw->hw);
of_clk_add_provider(node, of_clk_src_simple_get, clk); of_clk_add_provider(node, of_clk_src_simple_get, clk);
}
} }
#endif #endif
......
...@@ -123,7 +123,7 @@ static struct clk *_register_gate(struct device *dev, const char *name, ...@@ -123,7 +123,7 @@ static struct clk *_register_gate(struct device *dev, const char *name,
init.flags = flags; init.flags = flags;
clk = ti_clk_register(NULL, &clk_hw->hw, name); clk = ti_clk_register_omap_hw(NULL, &clk_hw->hw, name);
if (IS_ERR(clk)) if (IS_ERR(clk))
kfree(clk_hw); kfree(clk_hw);
......
...@@ -57,12 +57,10 @@ static struct clk *_register_interface(struct device *dev, const char *name, ...@@ -57,12 +57,10 @@ 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 = ti_clk_register(NULL, &clk_hw->hw, name); clk = ti_clk_register_omap_hw(NULL, &clk_hw->hw, name);
if (IS_ERR(clk)) if (IS_ERR(clk))
kfree(clk_hw); kfree(clk_hw);
else
omap2_init_clk_hw_omap_clocks(&clk_hw->hw);
return clk; return clk;
} }
......
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