clk: ti: convert to use proper register definition for all accesses
Currently, TI clock driver uses an encapsulated struct that is cast into a void pointer to store all register addresses. This can be considered as rather nasty hackery, and prevents from expanding the register address field also. Instead, replace all the code to use proper struct in place for this, which contains all the previously used data. This patch is rather large as it is touching multiple files, but this can't be split up as we need to avoid any boot breakage. Signed-off-by: Tero Kristo <t-kristo@ti.com> Acked-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
@@ -203,17 +203,10 @@ cleanup:
|
||||
}
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_ATAGS)
|
||||
static void __iomem *_get_reg(u8 module, u16 offset)
|
||||
void _get_reg(u8 module, u16 offset, struct clk_omap_reg *reg)
|
||||
{
|
||||
u32 reg;
|
||||
struct clk_omap_reg *reg_setup;
|
||||
|
||||
reg_setup = (struct clk_omap_reg *)®
|
||||
|
||||
reg_setup->index = module;
|
||||
reg_setup->offset = offset;
|
||||
|
||||
return (void __iomem *)reg;
|
||||
reg->index = module;
|
||||
reg->offset = offset;
|
||||
}
|
||||
|
||||
struct clk *ti_clk_register_dpll(struct ti_clk *setup)
|
||||
@@ -255,10 +248,10 @@ struct clk *ti_clk_register_dpll(struct ti_clk *setup)
|
||||
init.num_parents = dpll->num_parents;
|
||||
init.parent_names = dpll->parents;
|
||||
|
||||
dd->control_reg = _get_reg(dpll->module, dpll->control_reg);
|
||||
dd->idlest_reg = _get_reg(dpll->module, dpll->idlest_reg);
|
||||
dd->mult_div1_reg = _get_reg(dpll->module, dpll->mult_div1_reg);
|
||||
dd->autoidle_reg = _get_reg(dpll->module, dpll->autoidle_reg);
|
||||
_get_reg(dpll->module, dpll->control_reg, &dd->control_reg);
|
||||
_get_reg(dpll->module, dpll->idlest_reg, &dd->idlest_reg);
|
||||
_get_reg(dpll->module, dpll->mult_div1_reg, &dd->mult_div1_reg);
|
||||
_get_reg(dpll->module, dpll->autoidle_reg, &dd->autoidle_reg);
|
||||
|
||||
dd->modes = dpll->modes;
|
||||
dd->div1_mask = dpll->div1_mask;
|
||||
@@ -344,12 +337,9 @@ static void _register_dpll_x2(struct device_node *node,
|
||||
ret = of_property_count_elems_of_size(node, "reg", 1);
|
||||
if (ret <= 0) {
|
||||
hw_ops = NULL;
|
||||
} else {
|
||||
clk_hw->clksel_reg = ti_clk_get_reg_addr(node, 0);
|
||||
if (IS_ERR(clk_hw->clksel_reg)) {
|
||||
kfree(clk_hw);
|
||||
return;
|
||||
}
|
||||
} else if (ti_clk_get_reg_addr(node, 0, &clk_hw->clksel_reg)) {
|
||||
kfree(clk_hw);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -412,7 +402,8 @@ static void __init of_ti_dpll_setup(struct device_node *node,
|
||||
|
||||
init->parent_names = parent_names;
|
||||
|
||||
dd->control_reg = ti_clk_get_reg_addr(node, 0);
|
||||
if (ti_clk_get_reg_addr(node, 0, &dd->control_reg))
|
||||
goto cleanup;
|
||||
|
||||
/*
|
||||
* Special case for OMAP2 DPLL, register order is different due to
|
||||
@@ -420,25 +411,22 @@ static void __init of_ti_dpll_setup(struct device_node *node,
|
||||
* missing idlest_mask.
|
||||
*/
|
||||
if (!dd->idlest_mask) {
|
||||
dd->mult_div1_reg = ti_clk_get_reg_addr(node, 1);
|
||||
if (ti_clk_get_reg_addr(node, 1, &dd->mult_div1_reg))
|
||||
goto cleanup;
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
clk_hw->ops = &clkhwops_omap2xxx_dpll;
|
||||
omap2xxx_clkt_dpllcore_init(&clk_hw->hw);
|
||||
#endif
|
||||
} else {
|
||||
dd->idlest_reg = ti_clk_get_reg_addr(node, 1);
|
||||
if (IS_ERR(dd->idlest_reg))
|
||||
if (ti_clk_get_reg_addr(node, 1, &dd->idlest_reg))
|
||||
goto cleanup;
|
||||
|
||||
dd->mult_div1_reg = ti_clk_get_reg_addr(node, 2);
|
||||
if (ti_clk_get_reg_addr(node, 2, &dd->mult_div1_reg))
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (IS_ERR(dd->control_reg) || IS_ERR(dd->mult_div1_reg))
|
||||
goto cleanup;
|
||||
|
||||
if (dd->autoidle_mask) {
|
||||
dd->autoidle_reg = ti_clk_get_reg_addr(node, 3);
|
||||
if (IS_ERR(dd->autoidle_reg))
|
||||
if (ti_clk_get_reg_addr(node, 3, &dd->autoidle_reg))
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user