[RFC v2 9/9] arm/highbank: Use clock binding common support code

Grant Likely grant.likely at secretlab.ca
Tue Dec 13 09:02:09 EST 2011


This patch makes the Calxeda Highbank platform use the common DT clock
binding support code for setting up timers and fixed clocks.

Signed-off-by: Grant Likely <grant.likely at secretlab.ca>
Cc: Rob Herring <rob.herring at calxeda.com>
---
 arch/arm/Kconfig                             |    1 +
 arch/arm/boot/dts/highbank.dts               |   32 ++++++++++++++++++++++++-
 arch/arm/mach-highbank/clock.c               |   19 ---------------
 arch/arm/mach-highbank/core.h                |    1 -
 arch/arm/mach-highbank/highbank.c            |   13 +---------
 arch/arm/mach-highbank/include/mach/clkdev.h |   11 +++++++++
 6 files changed, 44 insertions(+), 33 deletions(-)
 create mode 100644 arch/arm/mach-highbank/include/mach/clkdev.h

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index e084b7e..33c2958 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -341,6 +341,7 @@ config ARCH_HIGHBANK
 	select ARM_GIC
 	select ARM_TIMER_SP804
 	select CLKDEV_LOOKUP
+	select HAVE_MACH_CLKDEV
 	select CPU_V7
 	select GENERIC_CLOCKEVENTS
 	select HAVE_ARM_SCU
diff --git a/arch/arm/boot/dts/highbank.dts b/arch/arm/boot/dts/highbank.dts
index aeb1a75..a60e41d 100644
--- a/arch/arm/boot/dts/highbank.dts
+++ b/arch/arm/boot/dts/highbank.dts
@@ -25,6 +25,10 @@
 	#address-cells = <1>;
 	#size-cells = <1>;
 
+	clocks = <&pclk>;
+	clock-names = "apb_pclk";
+	clock-ranges;
+
 	cpus {
 		#address-cells = <1>;
 		#size-cells = <0>;
@@ -54,6 +58,20 @@
 		};
 	};
 
+	clocks {
+		eclk: eclk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <200000000>;
+		};
+
+		pclk: pclk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <150000000>;
+		};
+	};
+
 	memory {
 		name = "memory";
 		device_type = "memory";
@@ -70,6 +88,7 @@
 		compatible = "simple-bus";
 		interrupt-parent = <&intc>;
 		ranges;
+		clock-ranges;
 
 		timer at fff10600 {
 			compatible = "arm,smp-twd";
@@ -117,6 +136,7 @@
 			compatible = "calxeda,hb-sdhci";
 			reg = <0xffe0e000 0x1000>;
 			interrupts = <0 90 4>;
+			clocks = <&eclk>;
 		};
 
 		ipc at fff20000 {
@@ -157,10 +177,18 @@
 			interrupts = <0 17 4>;
 		};
 
-		timer {
+		timer at fff34000 {
+			compatible = "arm,sp804", "arm,primecell";
+			reg = <0xfff34000 0x20>;
+			interrupts = <0 18 4>;
+			linux,clockevents-device;
+		};
+
+		timer at fff34020 {
 			compatible = "arm,sp804", "arm,primecell";
-			reg = <0xfff34000 0x1000>;
+			reg = <0xfff34020 0x20>;
 			interrupts = <0 18 4>;
+			linux,clock-source;
 		};
 
 		rtc at fff35000 {
diff --git a/arch/arm/mach-highbank/clock.c b/arch/arm/mach-highbank/clock.c
index c25a2ae..96f4599 100644
--- a/arch/arm/mach-highbank/clock.c
+++ b/arch/arm/mach-highbank/clock.c
@@ -19,10 +19,6 @@
 #include <linux/clk.h>
 #include <linux/clkdev.h>
 
-struct clk {
-	unsigned long rate;
-};
-
 int clk_enable(struct clk *clk)
 {
 	return 0;
@@ -45,18 +41,3 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
 {
 	return 0;
 }
-
-static struct clk eclk = { .rate = 200000000 };
-static struct clk pclk = { .rate = 150000000 };
-
-static struct clk_lookup lookups[] = {
-	{ .clk = &pclk, .con_id = "apb_pclk", },
-	{ .clk = &pclk, .dev_id = "sp804", },
-	{ .clk = &eclk, .dev_id = "ffe0e000.sdhci", },
-	{ .clk = &pclk, .dev_id = "fff36000.serial", },
-};
-
-void __init highbank_clocks_init(void)
-{
-	clkdev_add_table(lookups, ARRAY_SIZE(lookups));
-}
diff --git a/arch/arm/mach-highbank/core.h b/arch/arm/mach-highbank/core.h
index 7e33fc9..490f430 100644
--- a/arch/arm/mach-highbank/core.h
+++ b/arch/arm/mach-highbank/core.h
@@ -1,5 +1,4 @@
 extern void highbank_set_cpu_jump(int cpu, void *jump_addr);
-extern void highbank_clocks_init(void);
 extern void __iomem *scu_base_addr;
 #ifdef CONFIG_DEBUG_HIGHBANK_UART
 extern void highbank_lluart_map_io(void);
diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c
index 88660d5..13a3b15 100644
--- a/arch/arm/mach-highbank/highbank.c
+++ b/arch/arm/mach-highbank/highbank.c
@@ -95,24 +95,15 @@ static void __init highbank_init_irq(void)
 
 static void __init highbank_timer_init(void)
 {
-	int irq;
 	struct device_node *np;
-	void __iomem *timer_base;
 
 	/* Map system registers */
 	np = of_find_compatible_node(NULL, NULL, "calxeda,hb-sregs");
 	sregs_base = of_iomap(np, 0);
 	WARN_ON(!sregs_base);
 
-	np = of_find_compatible_node(NULL, NULL, "arm,sp804");
-	timer_base = of_iomap(np, 0);
-	WARN_ON(!timer_base);
-	irq = irq_of_parse_and_map(np, 0);
-
-	highbank_clocks_init();
-
-	sp804_clocksource_init(timer_base + 0x20, "timer1");
-	sp804_clockevents_init(timer_base, irq, "timer0");
+	for_each_compatible_node(np, NULL, "arm,sp804")
+		sp804_dt_setup(np);
 }
 
 static struct sys_timer highbank_timer = {
diff --git a/arch/arm/mach-highbank/include/mach/clkdev.h b/arch/arm/mach-highbank/include/mach/clkdev.h
new file mode 100644
index 0000000..0fe8f0e
--- /dev/null
+++ b/arch/arm/mach-highbank/include/mach/clkdev.h
@@ -0,0 +1,11 @@
+#ifndef __ASM_MACH_CLKDEV_H
+#define __ASM_MACH_CLKDEV_H
+
+struct clk {
+	unsigned long rate;
+};
+
+#define __clk_get(clk)	({ 1; })
+#define __clk_put(clk)	do { } while (0)
+
+#endif
-- 
1.7.5.4



More information about the devicetree-discuss mailing list