]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
sh: clkfwk: Use shared sh_clk_div_recalc().
authorPaul Mundt <lethal@linux-sh.org>
Fri, 25 May 2012 06:26:01 +0000 (15:26 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Fri, 25 May 2012 06:26:01 +0000 (15:26 +0900)
This generalizes the div4 recalc routine for use by div6 and others, then
makes it the default.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
drivers/sh/clk/cpg.c
include/linux/sh_clk.h

index 9386bd21c0032265a6712ef544dab53000a24bf9..84aeeb8fe013909009f2b4220eeacd408a82981c 100644 (file)
@@ -66,11 +66,6 @@ int __init sh_clk_mstp_register(struct clk *clks, int nr)
        return ret;
 }
 
-static long sh_clk_div_round_rate(struct clk *clk, unsigned long rate)
-{
-       return clk_rate_table_round(clk, clk->freq_table, rate);
-}
-
 /*
  * Div/mult table lookup helpers
  */
@@ -84,6 +79,27 @@ static inline struct clk_div_mult_table *clk_to_div_mult_table(struct clk *clk)
        return clk_to_div_table(clk)->div_mult_table;
 }
 
+/*
+ * Common div ops
+ */
+static long sh_clk_div_round_rate(struct clk *clk, unsigned long rate)
+{
+       return clk_rate_table_round(clk, clk->freq_table, rate);
+}
+
+static unsigned long sh_clk_div_recalc(struct clk *clk)
+{
+       struct clk_div_mult_table *table = clk_to_div_mult_table(clk);
+       unsigned int idx;
+
+       clk_rate_table_build(clk, clk->freq_table, table->nr_divisors,
+                            table, clk->arch_flags ? &clk->arch_flags : NULL);
+
+       idx = (sh_clk_read(clk) >> clk->enable_bit) & clk->div_mask;
+
+       return clk->freq_table[idx].frequency;
+}
+
 /*
  * div6 support
  */
@@ -103,19 +119,6 @@ static struct clk_div_table sh_clk_div6_table = {
        .div_mult_table = &div6_div_mult_table,
 };
 
-static unsigned long sh_clk_div6_recalc(struct clk *clk)
-{
-       struct clk_div_mult_table *table = clk_to_div_mult_table(clk);
-       unsigned int idx;
-
-       clk_rate_table_build(clk, clk->freq_table, table->nr_divisors,
-                            table, NULL);
-
-       idx = sh_clk_read(clk) & clk->div_mask;
-
-       return clk->freq_table[idx].frequency;
-}
-
 static int sh_clk_div6_set_parent(struct clk *clk, struct clk *parent)
 {
        struct clk_div_mult_table *table = clk_to_div_mult_table(clk);
@@ -190,7 +193,7 @@ static void sh_clk_div6_disable(struct clk *clk)
 }
 
 static struct sh_clk_ops sh_clk_div6_clk_ops = {
-       .recalc         = sh_clk_div6_recalc,
+       .recalc         = sh_clk_div_recalc,
        .round_rate     = sh_clk_div_round_rate,
        .set_rate       = sh_clk_div6_set_rate,
        .enable         = sh_clk_div6_enable,
@@ -198,7 +201,7 @@ static struct sh_clk_ops sh_clk_div6_clk_ops = {
 };
 
 static struct sh_clk_ops sh_clk_div6_reparent_clk_ops = {
-       .recalc         = sh_clk_div6_recalc,
+       .recalc         = sh_clk_div_recalc,
        .round_rate     = sh_clk_div_round_rate,
        .set_rate       = sh_clk_div6_set_rate,
        .enable         = sh_clk_div6_enable,
@@ -287,19 +290,6 @@ int __init sh_clk_div6_reparent_register(struct clk *clks, int nr)
 /*
  * div4 support
  */
-static unsigned long sh_clk_div4_recalc(struct clk *clk)
-{
-       struct clk_div_mult_table *table = clk_to_div_mult_table(clk);
-       unsigned int idx;
-
-       clk_rate_table_build(clk, clk->freq_table, table->nr_divisors,
-                            table, &clk->arch_flags);
-
-       idx = (sh_clk_read(clk) >> clk->enable_bit) & clk->div_mask;
-
-       return clk->freq_table[idx].frequency;
-}
-
 static int sh_clk_div4_set_parent(struct clk *clk, struct clk *parent)
 {
        struct clk_div_mult_table *table = clk_to_div_mult_table(clk);
@@ -361,13 +351,13 @@ static void sh_clk_div4_disable(struct clk *clk)
 }
 
 static struct sh_clk_ops sh_clk_div4_clk_ops = {
-       .recalc         = sh_clk_div4_recalc,
+       .recalc         = sh_clk_div_recalc,
        .set_rate       = sh_clk_div4_set_rate,
        .round_rate     = sh_clk_div_round_rate,
 };
 
 static struct sh_clk_ops sh_clk_div4_enable_clk_ops = {
-       .recalc         = sh_clk_div4_recalc,
+       .recalc         = sh_clk_div_recalc,
        .set_rate       = sh_clk_div4_set_rate,
        .round_rate     = sh_clk_div_round_rate,
        .enable         = sh_clk_div4_enable,
@@ -375,7 +365,7 @@ static struct sh_clk_ops sh_clk_div4_enable_clk_ops = {
 };
 
 static struct sh_clk_ops sh_clk_div4_reparent_clk_ops = {
-       .recalc         = sh_clk_div4_recalc,
+       .recalc         = sh_clk_div_recalc,
        .set_rate       = sh_clk_div4_set_rate,
        .round_rate     = sh_clk_div_round_rate,
        .enable         = sh_clk_div4_enable,
index d540b8153178cd818003ce671c9c23b75c5bac23..35a04f19fb538344a1b0461c1d01c8212bdf6a6e 100644 (file)
@@ -172,6 +172,7 @@ int sh_clk_div4_reparent_register(struct clk *clks, int nr,
                        _num_parents, _src_shift, _src_width)   \
 {                                                              \
        .enable_reg = (void __iomem *)_reg,                     \
+       .enable_bit = 0, /* unused */                           \
        .flags = _flags,                                        \
        .div_mask = SH_CLK_DIV6_MSK,                            \
        .parent_table = _parents,                               \
@@ -184,6 +185,7 @@ int sh_clk_div4_reparent_register(struct clk *clks, int nr,
 {                                                              \
        .parent         = _parent,                              \
        .enable_reg     = (void __iomem *)_reg,                 \
+       .enable_bit     = 0,    /* unused */                    \
        .div_mask       = SH_CLK_DIV6_MSK,                      \
        .flags          = _flags,                               \
 }