Commit | Line | Data |
---|---|---|
36ddf31b PM |
1 | #ifndef __ASM_SH_CLOCK_H |
2 | #define __ASM_SH_CLOCK_H | |
3 | ||
4 | #include <linux/kref.h> | |
5 | #include <linux/list.h> | |
6 | #include <linux/seq_file.h> | |
1d118562 | 7 | #include <linux/clk.h> |
36ddf31b PM |
8 | |
9 | struct clk; | |
10 | ||
11 | struct clk_ops { | |
12 | void (*init)(struct clk *clk); | |
13 | void (*enable)(struct clk *clk); | |
14 | void (*disable)(struct clk *clk); | |
15 | void (*recalc)(struct clk *clk); | |
1929cb34 | 16 | int (*set_rate)(struct clk *clk, unsigned long rate, int algo_id); |
f6991b04 | 17 | long (*round_rate)(struct clk *clk, unsigned long rate); |
36ddf31b PM |
18 | }; |
19 | ||
20 | struct clk { | |
21 | struct list_head node; | |
22 | const char *name; | |
1d118562 | 23 | int id; |
36ddf31b PM |
24 | struct module *owner; |
25 | ||
26 | struct clk *parent; | |
27 | struct clk_ops *ops; | |
28 | ||
29 | struct kref kref; | |
30 | ||
31 | unsigned long rate; | |
32 | unsigned long flags; | |
33 | }; | |
34 | ||
35 | #define CLK_ALWAYS_ENABLED (1 << 0) | |
36 | #define CLK_RATE_PROPAGATES (1 << 1) | |
37 | ||
38 | /* Should be defined by processor-specific code */ | |
39 | void arch_init_clk_ops(struct clk_ops **, int type); | |
40 | ||
41 | /* arch/sh/kernel/cpu/clock.c */ | |
42 | int clk_init(void); | |
43 | ||
44 | int __clk_enable(struct clk *); | |
36ddf31b | 45 | void __clk_disable(struct clk *); |
36ddf31b | 46 | |
36ddf31b PM |
47 | void clk_recalc_rate(struct clk *); |
48 | ||
36ddf31b PM |
49 | int clk_register(struct clk *); |
50 | void clk_unregister(struct clk *); | |
51 | ||
1929cb34 | 52 | /* the exported API, in addition to clk_set_rate */ |
53 | /** | |
54 | * clk_set_rate_ex - set the clock rate for a clock source, with additional parameter | |
55 | * @clk: clock source | |
56 | * @rate: desired clock rate in Hz | |
57 | * @algo_id: algorithm id to be passed down to ops->set_rate | |
58 | * | |
59 | * Returns success (0) or negative errno. | |
60 | */ | |
61 | int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id); | |
62 | ||
63 | enum clk_sh_algo_id { | |
64 | NO_CHANGE = 0, | |
65 | ||
66 | IUS_N1_N1, | |
67 | IUS_322, | |
68 | IUS_522, | |
69 | IUS_N11, | |
70 | ||
71 | SB_N1, | |
72 | ||
73 | SB3_N1, | |
74 | SB3_32, | |
75 | SB3_43, | |
76 | SB3_54, | |
77 | ||
78 | BP_N1, | |
79 | ||
80 | IP_N1, | |
81 | }; | |
36ddf31b | 82 | #endif /* __ASM_SH_CLOCK_H */ |