Merge branch 'reiserfs/kill-bkl' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / arch / arm / mach-lh7a40x / clocks.c
1 /* arch/arm/mach-lh7a40x/clocks.c
2  *
3  *  Copyright (C) 2004 Marc Singer
4  *
5  *  This program is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU General Public License
7  *  version 2 as published by the Free Software Foundation.
8  *
9  */
10 #include <mach/hardware.h>
11 #include <mach/clocks.h>
12 #include <linux/err.h>
13
14 struct module;
15
16 struct clk {
17         struct list_head node;
18         unsigned long rate;
19         struct module *owner;
20         const char *name;
21 };
22
23 /* ----- */
24
25 #define MAINDIV1(c)     (((c) >>  7) & 0x0f)
26 #define MAINDIV2(c)     (((c) >> 11) & 0x1f)
27 #define PS(c)           (((c) >> 18) & 0x03)
28 #define PREDIV(c)       (((c) >>  2) & 0x1f)
29 #define HCLKDIV(c)      (((c) >>  0) & 0x02)
30 #define PCLKDIV(c)      (((c) >> 16) & 0x03)
31
32 unsigned int fclkfreq_get (void)
33 {
34         unsigned int clkset = CSC_CLKSET;
35         unsigned int gclk
36                 = XTAL_IN
37                 / (1 << PS(clkset))
38                 * (MAINDIV1(clkset) + 2)
39                 / (PREDIV(clkset)   + 2)
40                 * (MAINDIV2(clkset) + 2)
41                 ;
42         return gclk;
43 }
44
45 unsigned int hclkfreq_get (void)
46 {
47         unsigned int clkset = CSC_CLKSET;
48         unsigned int hclk = fclkfreq_get () / (HCLKDIV(clkset) + 1);
49
50         return hclk;
51 }
52
53 unsigned int pclkfreq_get (void)
54 {
55         unsigned int clkset = CSC_CLKSET;
56         int pclkdiv = PCLKDIV(clkset);
57         unsigned int pclk;
58         if (pclkdiv == 0x3)
59                 pclkdiv = 0x2;
60         pclk = hclkfreq_get () / (1 << pclkdiv);
61
62         return pclk;
63 }
64
65 /* ----- */
66
67 struct clk *clk_get (struct device *dev, const char *id)
68 {
69         return dev && strcmp(dev_name(dev), "cldc-lh7a40x") == 0
70                  ? NULL : ERR_PTR(-ENOENT);
71 }
72 EXPORT_SYMBOL(clk_get);
73
74 void clk_put (struct clk *clk)
75 {
76 }
77 EXPORT_SYMBOL(clk_put);
78
79 int clk_enable (struct clk *clk)
80 {
81         return 0;
82 }
83 EXPORT_SYMBOL(clk_enable);
84
85 void clk_disable (struct clk *clk)
86 {
87 }
88 EXPORT_SYMBOL(clk_disable);
89
90 unsigned long clk_get_rate (struct clk *clk)
91 {
92         return 0;
93 }
94 EXPORT_SYMBOL(clk_get_rate);
95
96 long clk_round_rate (struct clk *clk, unsigned long rate)
97 {
98         return rate;
99 }
100 EXPORT_SYMBOL(clk_round_rate);
101
102 int clk_set_rate (struct clk *clk, unsigned long rate)
103 {
104         return -EIO;
105 }
106 EXPORT_SYMBOL(clk_set_rate);