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 */ 17unsigned long clk_get_rate(struct clk *clk) 18{ 19 return clk->rate; 20} 21EXPORT_SYMBOL(clk_get_rate); 22 23/* enable and disable do nothing */ 24int clk_enable(struct clk *clk) 25{ 26 return 0; 27} 28EXPORT_SYMBOL(clk_enable); 29 30void clk_disable(struct clk *clk) 31{ 32} 33EXPORT_SYMBOL(clk_disable); 34 35static struct clk clk_24 = { 36 .rate = 2400000, 37}; 38 39static struct clk clk_48 = { 40 .rate = 48 * 1000 * 1000, 41}; 42 43/* 44 * Catch-all default clock to satisfy drivers using the clk API. We don't 45 * model the actual hardware clocks yet. 46 */ 47static struct clk clk_default; 48 49#define CLK(_clk, dev) \ 50 { \ 51 .clk = _clk, \ 52 .dev_id = dev, \ 53 } 54 55static struct clk_lookup lookups[] = { 56 { 57 .con_id = "apb_pclk", 58 .clk = &clk_default, 59 }, 60 CLK(&clk_24, "mtu0"), 61 CLK(&clk_24, "mtu1"), 62 CLK(&clk_48, "uart0"), 63 CLK(&clk_48, "uart1"), 64 CLK(&clk_default, "gpio.0"), 65 CLK(&clk_default, "gpio.1"), 66 CLK(&clk_default, "gpio.2"), 67 CLK(&clk_default, "gpio.3"), 68 CLK(&clk_default, "rng"), 69}; 70 71int __init clk_init(void) 72{ 73 clkdev_add_table(lookups, ARRAY_SIZE(lookups)); 74 return 0; 75} 76