]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
ARM: shmobile: add struct clk_ratio and fixed ratio clock macro
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Wed, 27 Mar 2013 07:55:41 +0000 (00:55 -0700)
committerSimon Horman <horms+renesas@verge.net.au>
Tue, 2 Apr 2013 02:02:16 +0000 (11:02 +0900)
Renesas chip has many clocks inside,
and some of them are using fixed ratio via parent clock.
Current shmobile clock code is using own divX_recalc function
and divX_clk_ops.
This patch can reduce these code

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
arch/arm/mach-shmobile/clock.c
arch/arm/mach-shmobile/include/mach/clock.h [new file with mode: 0644]

index e816ca9bd2131949e8847d82ba6028ceb147282c..ad7df629d995413d7e73338e9a984dbf5870c7e8 100644 (file)
 #include <linux/init.h>
 #include <linux/sh_clk.h>
 #include <linux/export.h>
+#include <mach/clock.h>
+#include <mach/common.h>
+
+unsigned long shmobile_fixed_ratio_clk_recalc(struct clk *clk)
+{
+       struct clk_ratio *p = clk->priv;
+
+       return clk->parent->rate / p->div * p->mul;
+};
+
+struct sh_clk_ops shmobile_fixed_ratio_clk_ops = {
+       .recalc = shmobile_fixed_ratio_clk_recalc,
+};
 
 int __init shmobile_clk_init(void)
 {
diff --git a/arch/arm/mach-shmobile/include/mach/clock.h b/arch/arm/mach-shmobile/include/mach/clock.h
new file mode 100644 (file)
index 0000000..76ac612
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef CLOCK_H
+#define CLOCK_H
+
+unsigned long shmobile_fixed_ratio_clk_recalc(struct clk *clk);
+extern struct sh_clk_ops shmobile_fixed_ratio_clk_ops;
+
+/* clock ratio */
+struct clk_ratio {
+       int mul;
+       int div;
+};
+
+#define SH_CLK_RATIO(name, m, d)               \
+static struct clk_ratio name ##_ratio = {      \
+       .mul = m,                               \
+       .div = d,                               \
+}
+
+#define SH_FIXED_RATIO_CLKg(name, p, r)        \
+struct clk name = {                    \
+       .parent = &p,                           \
+       .ops    = &shmobile_fixed_ratio_clk_ops,\
+       .priv   = &r ## _ratio,                 \
+}
+
+#define SH_FIXED_RATIO_CLK(name, p, r)         \
+static SH_FIXED_RATIO_CLKg(name, p, r);
+
+#define SH_FIXED_RATIO_CLK_SET(name, p, m, d)  \
+       SH_CLK_RATIO(name, m, d);               \
+       SH_FIXED_RATIO_CLK(name, p, name);
+
+#define SH_CLK_SET_RATIO(p, m, d)      \
+{                      \
+       (p)->mul = m;   \
+       (p)->div = d;   \
+}
+
+#endif