1
0
Fork 0

clk: ti: remove exported ll_ops struct, instead add an API for registration

We should avoid exporting data from drivers, instead use an API for
registering the clock low level operations.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
hifive-unleashed-5.1
Tero Kristo 2015-04-27 21:55:42 +03:00
parent 9e11814ab8
commit e9e63088e4
7 changed files with 42 additions and 6 deletions

View File

@ -112,6 +112,19 @@ static struct ti_clk_ll_ops omap_clk_ll_ops = {
.cm_split_idlest_reg = cm_split_idlest_reg,
};
/**
* omap2_clk_setup_ll_ops - setup clock driver low-level ops
*
* Sets up clock driver low-level platform ops. These are needed
* for register accesses and various other misc platform operations.
* Returns 0 on success, -EBUSY if low level ops have been registered
* already.
*/
int __init omap2_clk_setup_ll_ops(void)
{
return ti_clk_setup_ll_ops(&omap_clk_ll_ops);
}
/**
* omap2_clk_provider_init - initialize a clock provider
* @match_table: DT device table to match for devices to init
@ -130,8 +143,6 @@ int __init omap2_clk_provider_init(struct device_node *np, int index,
{
struct clk_iomap *io;
ti_clk_ll_ops = &omap_clk_ll_ops;
io = kzalloc(sizeof(*io), GFP_KERNEL);
io->regmap = syscon;
@ -155,8 +166,6 @@ void __init omap2_clk_legacy_provider_init(int index, void __iomem *mem)
{
struct clk_iomap *io;
ti_clk_ll_ops = &omap_clk_ll_ops;
io = memblock_virt_alloc(sizeof(*io), 0);
io->mem = mem;

View File

@ -83,6 +83,7 @@ struct regmap;
int __init omap2_clk_provider_init(struct device_node *np, int index,
struct regmap *syscon, void __iomem *mem);
void __init omap2_clk_legacy_provider_init(int index, void __iomem *mem);
int __init omap2_clk_setup_ll_ops(void);
void __init ti_clk_init_features(void);
#endif

View File

@ -722,6 +722,8 @@ int __init omap_clk_init(void)
ti_clk_init_features();
omap2_clk_setup_ll_ops();
if (of_have_populated_dt()) {
ret = omap_control_init();
if (ret)

View File

@ -32,6 +32,27 @@ static struct device_node *clocks_node_ptr[CLK_MAX_MEMMAPS];
struct ti_clk_features ti_clk_features;
/**
* ti_clk_setup_ll_ops - setup low level clock operations
* @ops: low level clock ops descriptor
*
* Sets up low level clock operations for TI clock driver. This is used
* to provide various callbacks for the clock driver towards platform
* specific code. Returns 0 on success, -EBUSY if ll_ops have been
* registered already.
*/
int ti_clk_setup_ll_ops(struct ti_clk_ll_ops *ops)
{
if (ti_clk_ll_ops) {
pr_err("Attempt to register ll_ops multiple times.\n");
return -EBUSY;
}
ti_clk_ll_ops = ops;
return 0;
}
/**
* ti_dt_clocks_register - register DT alias clocks during boot
* @oclks: list of clocks to register

View File

@ -280,4 +280,6 @@ long omap4_dpll_regm4xen_determine_rate(struct clk_hw *hw,
unsigned long *best_parent_rate,
struct clk_hw **best_parent_clk);
extern struct ti_clk_ll_ops *ti_clk_ll_ops;
#endif

View File

@ -21,6 +21,8 @@
#include <linux/of_address.h>
#include <linux/clk/ti.h>
#include "clock.h"
#undef pr_fmt
#define pr_fmt(fmt) "%s: " fmt, __func__

View File

@ -235,8 +235,6 @@ struct ti_clk_ll_ops {
u8 *idlest_reg_id);
};
extern struct ti_clk_ll_ops *ti_clk_ll_ops;
#define to_clk_hw_omap(_hw) container_of(_hw, struct clk_hw_omap, hw)
void omap2_init_clk_clkdm(struct clk_hw *clk);
@ -255,6 +253,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk);
void ti_dt_clk_init_provider(struct device_node *np, int index);
void ti_dt_clk_init_retry_clks(void);
void ti_dt_clockdomains_setup(void);
int ti_clk_setup_ll_ops(struct ti_clk_ll_ops *ops);
int omap3430_dt_clk_init(void);
int omap3630_dt_clk_init(void);