| Alessandro Rubini | 28ad94e | 2009-07-02 19:06:47 +0100 | [diff] [blame] | 1 | /* | 
|  | 2 | *  linux/arch/arm/mach-nomadik/clock.c | 
|  | 3 | * | 
|  | 4 | *  Copyright (C) 2009 Alessandro Rubini | 
|  | 5 | */ | 
|  | 6 | #include <linux/kernel.h> | 
|  | 7 | #include <linux/module.h> | 
|  | 8 | #include <linux/errno.h> | 
|  | 9 | #include <linux/clk.h> | 
|  | 10 | #include <asm/clkdev.h> | 
|  | 11 | #include "clock.h" | 
|  | 12 |  | 
|  | 13 | /* | 
|  | 14 | * The nomadik board uses generic clocks, but the serial pl011 file | 
|  | 15 | * calls clk_enable(), clk_disable(), clk_get_rate(), so we provide them | 
|  | 16 | */ | 
|  | 17 | unsigned long clk_get_rate(struct clk *clk) | 
|  | 18 | { | 
|  | 19 | return clk->rate; | 
|  | 20 | } | 
|  | 21 | EXPORT_SYMBOL(clk_get_rate); | 
|  | 22 |  | 
|  | 23 | /* enable and disable do nothing */ | 
|  | 24 | int clk_enable(struct clk *clk) | 
|  | 25 | { | 
|  | 26 | return 0; | 
|  | 27 | } | 
|  | 28 | EXPORT_SYMBOL(clk_enable); | 
|  | 29 |  | 
|  | 30 | void clk_disable(struct clk *clk) | 
|  | 31 | { | 
|  | 32 | } | 
|  | 33 | EXPORT_SYMBOL(clk_disable); | 
|  | 34 |  | 
| Linus Walleij | ba327b1 | 2010-05-26 07:38:54 +0100 | [diff] [blame] | 35 | static struct clk clk_24 = { | 
|  | 36 | .rate = 2400000, | 
|  | 37 | }; | 
|  | 38 |  | 
| Rabin Vincent | dc6048c | 2010-05-06 10:47:25 +0100 | [diff] [blame] | 39 | static struct clk clk_48 = { | 
|  | 40 | .rate = 48 * 1000 * 1000, | 
|  | 41 | }; | 
| Alessandro Rubini | 28ad94e | 2009-07-02 19:06:47 +0100 | [diff] [blame] | 42 |  | 
| Rabin Vincent | af7dc22 | 2010-05-06 11:14:17 +0100 | [diff] [blame] | 43 | /* | 
|  | 44 | * Catch-all default clock to satisfy drivers using the clk API.  We don't | 
|  | 45 | * model the actual hardware clocks yet. | 
|  | 46 | */ | 
|  | 47 | static struct clk clk_default; | 
|  | 48 |  | 
| Rabin Vincent | dc6048c | 2010-05-06 10:47:25 +0100 | [diff] [blame] | 49 | #define CLK(_clk, dev)				\ | 
|  | 50 | {					\ | 
|  | 51 | .clk		= _clk,		\ | 
|  | 52 | .dev_id		= dev,		\ | 
|  | 53 | } | 
|  | 54 |  | 
|  | 55 | static struct clk_lookup lookups[] = { | 
| Russell King | 3126c7b | 2010-07-15 11:01:17 +0100 | [diff] [blame] | 56 | { | 
|  | 57 | .con_id		= "apb_pclk", | 
|  | 58 | .clk		= &clk_default, | 
|  | 59 | }, | 
| Linus Walleij | ba327b1 | 2010-05-26 07:38:54 +0100 | [diff] [blame] | 60 | CLK(&clk_24, "mtu0"), | 
|  | 61 | CLK(&clk_24, "mtu1"), | 
| Rabin Vincent | dc6048c | 2010-05-06 10:47:25 +0100 | [diff] [blame] | 62 | CLK(&clk_48, "uart0"), | 
|  | 63 | CLK(&clk_48, "uart1"), | 
| Rabin Vincent | af7dc22 | 2010-05-06 11:14:17 +0100 | [diff] [blame] | 64 | CLK(&clk_default, "gpio.0"), | 
|  | 65 | CLK(&clk_default, "gpio.1"), | 
|  | 66 | CLK(&clk_default, "gpio.2"), | 
|  | 67 | CLK(&clk_default, "gpio.3"), | 
| Srinidhi Kasagar | 1944cc8 | 2010-05-19 06:49:13 +0100 | [diff] [blame] | 68 | CLK(&clk_default, "rng"), | 
| Rabin Vincent | dc6048c | 2010-05-06 10:47:25 +0100 | [diff] [blame] | 69 | }; | 
|  | 70 |  | 
| Linus Walleij | ba327b1 | 2010-05-26 07:38:54 +0100 | [diff] [blame] | 71 | int __init clk_init(void) | 
| Rabin Vincent | dc6048c | 2010-05-06 10:47:25 +0100 | [diff] [blame] | 72 | { | 
|  | 73 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 
| Alessandro Rubini | 28ad94e | 2009-07-02 19:06:47 +0100 | [diff] [blame] | 74 | return 0; | 
|  | 75 | } |