提交 0a5f337e 编写于 作者: M Magnus Damm 提交者: Paul Mundt

sh: introduce struct clk_div4_table

This patch introduces struct clk_div4_table. The structure
will be used to keep div4 specific data, and is with this
patch replacing the struct clk_div_mult_table pointer arg
used by the sh_clk_div4_register() functions.
Signed-off-by: NMagnus Damm <damm@opensource.se>
Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
上级 de7ca214
...@@ -146,12 +146,16 @@ int sh_clk_mstp32_register(struct clk *clks, int nr); ...@@ -146,12 +146,16 @@ int sh_clk_mstp32_register(struct clk *clks, int nr);
.flags = _flags, \ .flags = _flags, \
} }
struct clk_div4_table {
struct clk_div_mult_table *div_mult_table;
};
int sh_clk_div4_register(struct clk *clks, int nr, int sh_clk_div4_register(struct clk *clks, int nr,
struct clk_div_mult_table *table); struct clk_div4_table *table);
int sh_clk_div4_enable_register(struct clk *clks, int nr, int sh_clk_div4_enable_register(struct clk *clks, int nr,
struct clk_div_mult_table *table); struct clk_div4_table *table);
int sh_clk_div4_reparent_register(struct clk *clks, int nr, int sh_clk_div4_reparent_register(struct clk *clks, int nr,
struct clk_div_mult_table *table); struct clk_div4_table *table);
#define SH_CLK_DIV6(_name, _parent, _reg, _flags) \ #define SH_CLK_DIV6(_name, _parent, _reg, _flags) \
{ \ { \
......
...@@ -149,7 +149,8 @@ int __init sh_clk_div6_register(struct clk *clks, int nr) ...@@ -149,7 +149,8 @@ int __init sh_clk_div6_register(struct clk *clks, int nr)
static unsigned long sh_clk_div4_recalc(struct clk *clk) static unsigned long sh_clk_div4_recalc(struct clk *clk)
{ {
struct clk_div_mult_table *table = clk->priv; struct clk_div4_table *d4t = clk->priv;
struct clk_div_mult_table *table = d4t->div_mult_table;
unsigned int idx; unsigned int idx;
clk_rate_table_build(clk, clk->freq_table, table->nr_divisors, clk_rate_table_build(clk, clk->freq_table, table->nr_divisors,
...@@ -162,7 +163,8 @@ static unsigned long sh_clk_div4_recalc(struct clk *clk) ...@@ -162,7 +163,8 @@ static unsigned long sh_clk_div4_recalc(struct clk *clk)
static int sh_clk_div4_set_parent(struct clk *clk, struct clk *parent) static int sh_clk_div4_set_parent(struct clk *clk, struct clk *parent)
{ {
struct clk_div_mult_table *table = clk->priv; struct clk_div4_table *d4t = clk->priv;
struct clk_div_mult_table *table = d4t->div_mult_table;
u32 value; u32 value;
int ret; int ret;
...@@ -234,11 +236,11 @@ static struct clk_ops sh_clk_div4_reparent_clk_ops = { ...@@ -234,11 +236,11 @@ static struct clk_ops sh_clk_div4_reparent_clk_ops = {
}; };
static int __init sh_clk_div4_register_ops(struct clk *clks, int nr, static int __init sh_clk_div4_register_ops(struct clk *clks, int nr,
struct clk_div_mult_table *table, struct clk_ops *ops) struct clk_div4_table *table, struct clk_ops *ops)
{ {
struct clk *clkp; struct clk *clkp;
void *freq_table; void *freq_table;
int nr_divs = table->nr_divisors; int nr_divs = table->div_mult_table->nr_divisors;
int freq_table_size = sizeof(struct cpufreq_frequency_table); int freq_table_size = sizeof(struct cpufreq_frequency_table);
int ret = 0; int ret = 0;
int k; int k;
...@@ -267,20 +269,20 @@ static int __init sh_clk_div4_register_ops(struct clk *clks, int nr, ...@@ -267,20 +269,20 @@ static int __init sh_clk_div4_register_ops(struct clk *clks, int nr,
} }
int __init sh_clk_div4_register(struct clk *clks, int nr, int __init sh_clk_div4_register(struct clk *clks, int nr,
struct clk_div_mult_table *table) struct clk_div4_table *table)
{ {
return sh_clk_div4_register_ops(clks, nr, table, &sh_clk_div4_clk_ops); return sh_clk_div4_register_ops(clks, nr, table, &sh_clk_div4_clk_ops);
} }
int __init sh_clk_div4_enable_register(struct clk *clks, int nr, int __init sh_clk_div4_enable_register(struct clk *clks, int nr,
struct clk_div_mult_table *table) struct clk_div4_table *table)
{ {
return sh_clk_div4_register_ops(clks, nr, table, return sh_clk_div4_register_ops(clks, nr, table,
&sh_clk_div4_enable_clk_ops); &sh_clk_div4_enable_clk_ops);
} }
int __init sh_clk_div4_reparent_register(struct clk *clks, int nr, int __init sh_clk_div4_reparent_register(struct clk *clks, int nr,
struct clk_div_mult_table *table) struct clk_div4_table *table)
{ {
return sh_clk_div4_register_ops(clks, nr, table, return sh_clk_div4_register_ops(clks, nr, table,
&sh_clk_div4_reparent_clk_ops); &sh_clk_div4_reparent_clk_ops);
......
...@@ -107,13 +107,17 @@ struct clk *main_clks[] = { ...@@ -107,13 +107,17 @@ struct clk *main_clks[] = {
static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 }; static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 };
static struct clk_div_mult_table div4_table = { static struct clk_div_mult_table div4_div_mult_table = {
.divisors = divisors, .divisors = divisors,
.nr_divisors = ARRAY_SIZE(divisors), .nr_divisors = ARRAY_SIZE(divisors),
.multipliers = multipliers, .multipliers = multipliers,
.nr_multipliers = ARRAY_SIZE(multipliers), .nr_multipliers = ARRAY_SIZE(multipliers),
}; };
static struct clk_div4_table div4_table = {
.div_mult_table = &div4_div_mult_table,
};
enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P, enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P,
DIV4_SIUA, DIV4_SIUB, DIV4_NR }; DIV4_SIUA, DIV4_SIUB, DIV4_NR };
......
...@@ -110,13 +110,17 @@ struct clk *main_clks[] = { ...@@ -110,13 +110,17 @@ struct clk *main_clks[] = {
static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 }; static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 };
static struct clk_div_mult_table div4_table = { static struct clk_div_mult_table div4_div_mult_table = {
.divisors = divisors, .divisors = divisors,
.nr_divisors = ARRAY_SIZE(divisors), .nr_divisors = ARRAY_SIZE(divisors),
.multipliers = multipliers, .multipliers = multipliers,
.nr_multipliers = ARRAY_SIZE(multipliers), .nr_multipliers = ARRAY_SIZE(multipliers),
}; };
static struct clk_div4_table div4_table = {
.div_mult_table = &div4_div_mult_table,
};
enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P, enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P,
DIV4_SIUA, DIV4_SIUB, DIV4_NR }; DIV4_SIUA, DIV4_SIUB, DIV4_NR };
......
...@@ -110,13 +110,17 @@ struct clk *main_clks[] = { ...@@ -110,13 +110,17 @@ struct clk *main_clks[] = {
static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 }; static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 };
static struct clk_div_mult_table div4_table = { static struct clk_div_mult_table div4_div_mult_table = {
.divisors = divisors, .divisors = divisors,
.nr_divisors = ARRAY_SIZE(divisors), .nr_divisors = ARRAY_SIZE(divisors),
.multipliers = multipliers, .multipliers = multipliers,
.nr_multipliers = ARRAY_SIZE(multipliers), .nr_multipliers = ARRAY_SIZE(multipliers),
}; };
static struct clk_div4_table div4_table = {
.div_mult_table = &div4_div_mult_table,
};
#define DIV4(_str, _reg, _bit, _mask, _flags) \ #define DIV4(_str, _reg, _bit, _mask, _flags) \
SH_CLK_DIV4(_str, &pll_clk, _reg, _bit, _mask, _flags) SH_CLK_DIV4(_str, &pll_clk, _reg, _bit, _mask, _flags)
......
...@@ -110,13 +110,17 @@ struct clk *main_clks[] = { ...@@ -110,13 +110,17 @@ struct clk *main_clks[] = {
static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; static int multipliers[] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 }; static int divisors[] = { 1, 3, 2, 5, 3, 4, 5, 6, 8, 10, 12, 16, 20 };
static struct clk_div_mult_table div4_table = { static struct clk_div_mult_table div4_div_mult_table = {
.divisors = divisors, .divisors = divisors,
.nr_divisors = ARRAY_SIZE(divisors), .nr_divisors = ARRAY_SIZE(divisors),
.multipliers = multipliers, .multipliers = multipliers,
.nr_multipliers = ARRAY_SIZE(multipliers), .nr_multipliers = ARRAY_SIZE(multipliers),
}; };
static struct clk_div4_table div4_table = {
.div_mult_table = &div4_div_mult_table,
};
enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P, DIV4_NR }; enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_B3, DIV4_P, DIV4_NR };
#define DIV4(_str, _reg, _bit, _mask, _flags) \ #define DIV4(_str, _reg, _bit, _mask, _flags) \
......
...@@ -129,11 +129,15 @@ struct clk *main_clks[] = { ...@@ -129,11 +129,15 @@ struct clk *main_clks[] = {
static int divisors[] = { 2, 3, 4, 6, 8, 12, 16, 0, 24, 32, 36, 48, 0, 72 }; static int divisors[] = { 2, 3, 4, 6, 8, 12, 16, 0, 24, 32, 36, 48, 0, 72 };
static struct clk_div_mult_table div4_table = { static struct clk_div_mult_table div4_div_mult_table = {
.divisors = divisors, .divisors = divisors,
.nr_divisors = ARRAY_SIZE(divisors), .nr_divisors = ARRAY_SIZE(divisors),
}; };
static struct clk_div4_table div4_table = {
.div_mult_table = &div4_div_mult_table,
};
enum { DIV4_I, DIV4_SH, DIV4_B, DIV4_P, DIV4_M1, DIV4_NR }; enum { DIV4_I, DIV4_SH, DIV4_B, DIV4_P, DIV4_M1, DIV4_NR };
#define DIV4(_str, _reg, _bit, _mask, _flags) \ #define DIV4(_str, _reg, _bit, _mask, _flags) \
......
...@@ -57,11 +57,15 @@ static struct clk *clks[] = { ...@@ -57,11 +57,15 @@ static struct clk *clks[] = {
static unsigned int div2[] = { 1, 2, 4, 6, 8, 12, 16, 18, static unsigned int div2[] = { 1, 2, 4, 6, 8, 12, 16, 18,
24, 32, 36, 48 }; 24, 32, 36, 48 };
static struct clk_div_mult_table div4_table = { static struct clk_div_mult_table div4_div_mult_table = {
.divisors = div2, .divisors = div2,
.nr_divisors = ARRAY_SIZE(div2), .nr_divisors = ARRAY_SIZE(div2),
}; };
static struct clk_div4_table div4_table = {
.div_mult_table = &div4_div_mult_table,
};
enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_DDR, DIV4_GA, enum { DIV4_I, DIV4_U, DIV4_SH, DIV4_B, DIV4_DDR, DIV4_GA,
DIV4_DU, DIV4_P, DIV4_NR }; DIV4_DU, DIV4_P, DIV4_NR };
......
...@@ -59,11 +59,15 @@ static struct clk *clks[] = { ...@@ -59,11 +59,15 @@ static struct clk *clks[] = {
static unsigned int div2[] = { 1, 2, 4, 6, 8, 12, 16, 18, static unsigned int div2[] = { 1, 2, 4, 6, 8, 12, 16, 18,
24, 32, 36, 48 }; 24, 32, 36, 48 };
static struct clk_div_mult_table div4_table = { static struct clk_div_mult_table div4_div_mult_table = {
.divisors = div2, .divisors = div2,
.nr_divisors = ARRAY_SIZE(div2), .nr_divisors = ARRAY_SIZE(div2),
}; };
static struct clk_div4_table div4_table = {
.div_mult_table = &div4_div_mult_table,
};
enum { DIV4_I, DIV4_SH, DIV4_B, DIV4_DDR, DIV4_DU, DIV4_P, DIV4_NR }; enum { DIV4_I, DIV4_SH, DIV4_B, DIV4_DDR, DIV4_DU, DIV4_P, DIV4_NR };
#define DIV4(_str, _bit, _mask, _flags) \ #define DIV4(_str, _bit, _mask, _flags) \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册