| 
									
										
										
										
											2009-05-13 17:38:11 +09:00
										 |  |  | #include <linux/clk.h>
 | 
					
						
							|  |  |  | #include <linux/compiler.h>
 | 
					
						
							| 
									
										
										
										
											2009-06-17 04:55:42 +00:00
										 |  |  | #include <linux/slab.h>
 | 
					
						
							| 
									
										
										
										
											2009-05-28 12:52:29 +00:00
										 |  |  | #include <linux/io.h>
 | 
					
						
							| 
									
										
										
										
											2010-11-17 10:04:33 +01:00
										 |  |  | #include <linux/clkdev.h>
 | 
					
						
							| 
									
										
										
										
											2009-05-13 17:38:11 +09:00
										 |  |  | #include <asm/clock.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct clk master_clk = { | 
					
						
							|  |  |  | 	.flags		= CLK_ENABLE_ON_INIT, | 
					
						
							|  |  |  | 	.rate		= CONFIG_SH_PCLK_FREQ, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct clk peripheral_clk = { | 
					
						
							|  |  |  | 	.parent		= &master_clk, | 
					
						
							|  |  |  | 	.flags		= CLK_ENABLE_ON_INIT, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct clk bus_clk = { | 
					
						
							|  |  |  | 	.parent		= &master_clk, | 
					
						
							|  |  |  | 	.flags		= CLK_ENABLE_ON_INIT, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct clk cpu_clk = { | 
					
						
							|  |  |  | 	.parent		= &master_clk, | 
					
						
							|  |  |  | 	.flags		= CLK_ENABLE_ON_INIT, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * The ordering of these clocks matters, do not change it. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static struct clk *onchip_clocks[] = { | 
					
						
							|  |  |  | 	&master_clk, | 
					
						
							|  |  |  | 	&peripheral_clk, | 
					
						
							|  |  |  | 	&bus_clk, | 
					
						
							|  |  |  | 	&cpu_clk, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-11 09:35:11 +00:00
										 |  |  | static struct clk_lookup lookups[] = { | 
					
						
							|  |  |  | 	/* main clocks */ | 
					
						
							|  |  |  | 	CLKDEV_CON_ID("master_clk", &master_clk), | 
					
						
							|  |  |  | 	CLKDEV_CON_ID("peripheral_clk", &peripheral_clk), | 
					
						
							|  |  |  | 	CLKDEV_CON_ID("bus_clk", &bus_clk), | 
					
						
							|  |  |  | 	CLKDEV_CON_ID("cpu_clk", &cpu_clk), | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-13 17:38:11 +09:00
										 |  |  | int __init __deprecated cpg_clk_init(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	int i, ret = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for (i = 0; i < ARRAY_SIZE(onchip_clocks); i++) { | 
					
						
							|  |  |  | 		struct clk *clk = onchip_clocks[i]; | 
					
						
							|  |  |  | 		arch_init_clk_ops(&clk->ops, i); | 
					
						
							|  |  |  | 		if (clk->ops) | 
					
						
							|  |  |  | 			ret |= clk_register(clk); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-11 09:35:11 +00:00
										 |  |  | 	clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-29 17:22:50 +09:00
										 |  |  | 	clk_add_alias("tmu_fck", NULL, "peripheral_clk", NULL); | 
					
						
							|  |  |  | 	clk_add_alias("mtu2_fck", NULL, "peripheral_clk", NULL); | 
					
						
							|  |  |  | 	clk_add_alias("cmt_fck", NULL, "peripheral_clk", NULL); | 
					
						
							|  |  |  | 	clk_add_alias("sci_ick", NULL, "peripheral_clk", NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-13 17:38:11 +09:00
										 |  |  | 	return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2011-03-30 22:57:33 -03:00
										 |  |  |  * Placeholder for compatibility, until the lazy CPUs do this | 
					
						
							| 
									
										
										
										
											2009-05-13 17:38:11 +09:00
										 |  |  |  * on their own. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | int __init __weak arch_clk_init(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return cpg_clk_init(); | 
					
						
							|  |  |  | } |