diff options
Diffstat (limited to 'include/asm-arm')
-rw-r--r-- | include/asm-arm/arch-omap/clock.h | 65 |
1 files changed, 53 insertions, 12 deletions
diff --git a/include/asm-arm/arch-omap/clock.h b/include/asm-arm/arch-omap/clock.h index fc7b80643852..ff0f94de2de9 100644 --- a/include/asm-arm/arch-omap/clock.h +++ b/include/asm-arm/arch-omap/clock.h | |||
@@ -14,6 +14,30 @@ | |||
14 | #define __ARCH_ARM_OMAP_CLOCK_H | 14 | #define __ARCH_ARM_OMAP_CLOCK_H |
15 | 15 | ||
16 | struct module; | 16 | struct module; |
17 | struct clk; | ||
18 | |||
19 | #if defined(CONFIG_ARCH_OMAP2) | ||
20 | |||
21 | struct clksel_rate { | ||
22 | u8 div; | ||
23 | u32 val; | ||
24 | u8 flags; | ||
25 | }; | ||
26 | |||
27 | struct clksel { | ||
28 | struct clk *parent; | ||
29 | const struct clksel_rate *rates; | ||
30 | }; | ||
31 | |||
32 | struct dpll_data { | ||
33 | void __iomem *mult_div1_reg; | ||
34 | u32 mult_mask; | ||
35 | u32 div1_mask; | ||
36 | void __iomem *div2_reg; | ||
37 | u32 div2_mask; | ||
38 | }; | ||
39 | |||
40 | #endif | ||
17 | 41 | ||
18 | struct clk { | 42 | struct clk { |
19 | struct list_head node; | 43 | struct list_head node; |
@@ -25,8 +49,6 @@ struct clk { | |||
25 | __u32 flags; | 49 | __u32 flags; |
26 | void __iomem *enable_reg; | 50 | void __iomem *enable_reg; |
27 | __u8 enable_bit; | 51 | __u8 enable_bit; |
28 | __u8 rate_offset; | ||
29 | __u8 src_offset; | ||
30 | __s8 usecount; | 52 | __s8 usecount; |
31 | void (*recalc)(struct clk *); | 53 | void (*recalc)(struct clk *); |
32 | int (*set_rate)(struct clk *, unsigned long); | 54 | int (*set_rate)(struct clk *, unsigned long); |
@@ -34,6 +56,16 @@ struct clk { | |||
34 | void (*init)(struct clk *); | 56 | void (*init)(struct clk *); |
35 | int (*enable)(struct clk *); | 57 | int (*enable)(struct clk *); |
36 | void (*disable)(struct clk *); | 58 | void (*disable)(struct clk *); |
59 | #if defined(CONFIG_ARCH_OMAP2) | ||
60 | u8 fixed_div; | ||
61 | void __iomem *clksel_reg; | ||
62 | u32 clksel_mask; | ||
63 | const struct clksel *clksel; | ||
64 | const struct dpll_data *dpll_data; | ||
65 | #else | ||
66 | __u8 rate_offset; | ||
67 | __u8 src_offset; | ||
68 | #endif | ||
37 | }; | 69 | }; |
38 | 70 | ||
39 | struct clk_functions { | 71 | struct clk_functions { |
@@ -54,10 +86,12 @@ extern int clk_init(struct clk_functions * custom_clocks); | |||
54 | extern int clk_register(struct clk *clk); | 86 | extern int clk_register(struct clk *clk); |
55 | extern void clk_unregister(struct clk *clk); | 87 | extern void clk_unregister(struct clk *clk); |
56 | extern void propagate_rate(struct clk *clk); | 88 | extern void propagate_rate(struct clk *clk); |
89 | extern void recalculate_root_clocks(void); | ||
57 | extern void followparent_recalc(struct clk * clk); | 90 | extern void followparent_recalc(struct clk * clk); |
58 | extern void clk_allow_idle(struct clk *clk); | 91 | extern void clk_allow_idle(struct clk *clk); |
59 | extern void clk_deny_idle(struct clk *clk); | 92 | extern void clk_deny_idle(struct clk *clk); |
60 | extern int clk_get_usecount(struct clk *clk); | 93 | extern int clk_get_usecount(struct clk *clk); |
94 | extern void clk_enable_init_clocks(void); | ||
61 | 95 | ||
62 | /* Clock flags */ | 96 | /* Clock flags */ |
63 | #define RATE_CKCTL (1 << 0) /* Main fixed ratio clocks */ | 97 | #define RATE_CKCTL (1 << 0) /* Main fixed ratio clocks */ |
@@ -71,22 +105,29 @@ extern int clk_get_usecount(struct clk *clk); | |||
71 | #define CLOCK_NO_IDLE_PARENT (1 << 8) | 105 | #define CLOCK_NO_IDLE_PARENT (1 << 8) |
72 | #define DELAYED_APP (1 << 9) /* Delay application of clock */ | 106 | #define DELAYED_APP (1 << 9) /* Delay application of clock */ |
73 | #define CONFIG_PARTICIPANT (1 << 10) /* Fundamental clock */ | 107 | #define CONFIG_PARTICIPANT (1 << 10) /* Fundamental clock */ |
74 | #define CM_MPU_SEL1 (1 << 11) /* Domain divider/source */ | 108 | #define ENABLE_ON_INIT (1 << 11) /* Enable upon framework init */ |
75 | #define CM_DSP_SEL1 (1 << 12) | 109 | #define INVERT_ENABLE (1 << 12) /* 0 enables, 1 disables */ |
76 | #define CM_GFX_SEL1 (1 << 13) | 110 | /* bits 13-20 are currently free */ |
77 | #define CM_MODEM_SEL1 (1 << 14) | ||
78 | #define CM_CORE_SEL1 (1 << 15) /* Sets divider for many */ | ||
79 | #define CM_CORE_SEL2 (1 << 16) /* sets parent for GPT */ | ||
80 | #define CM_WKUP_SEL1 (1 << 17) | ||
81 | #define CM_PLL_SEL1 (1 << 18) | ||
82 | #define CM_PLL_SEL2 (1 << 19) | ||
83 | #define CM_SYSCLKOUT_SEL1 (1 << 20) | ||
84 | #define CLOCK_IN_OMAP310 (1 << 21) | 111 | #define CLOCK_IN_OMAP310 (1 << 21) |
85 | #define CLOCK_IN_OMAP730 (1 << 22) | 112 | #define CLOCK_IN_OMAP730 (1 << 22) |
86 | #define CLOCK_IN_OMAP1510 (1 << 23) | 113 | #define CLOCK_IN_OMAP1510 (1 << 23) |
87 | #define CLOCK_IN_OMAP16XX (1 << 24) | 114 | #define CLOCK_IN_OMAP16XX (1 << 24) |
88 | #define CLOCK_IN_OMAP242X (1 << 25) | 115 | #define CLOCK_IN_OMAP242X (1 << 25) |
89 | #define CLOCK_IN_OMAP243X (1 << 26) | 116 | #define CLOCK_IN_OMAP243X (1 << 26) |
117 | #define CLOCK_IN_OMAP343X (1 << 27) /* clocks common to all 343X */ | ||
118 | #define PARENT_CONTROLS_CLOCK (1 << 28) | ||
119 | #define CLOCK_IN_OMAP3430ES1 (1 << 29) /* 3430ES1 clocks only */ | ||
120 | #define CLOCK_IN_OMAP3430ES2 (1 << 30) /* 3430ES2 clocks only */ | ||
121 | |||
122 | /* Clksel_rate flags */ | ||
123 | #define DEFAULT_RATE (1 << 0) | ||
124 | #define RATE_IN_242X (1 << 1) | ||
125 | #define RATE_IN_243X (1 << 2) | ||
126 | #define RATE_IN_343X (1 << 3) /* rates common to all 343X */ | ||
127 | #define RATE_IN_3430ES2 (1 << 4) /* 3430ES2 rates only */ | ||
128 | |||
129 | #define RATE_IN_24XX (RATE_IN_242X | RATE_IN_243X) | ||
130 | |||
90 | 131 | ||
91 | /* CM_CLKSEL2_PLL.CORE_CLK_SRC options (24XX) */ | 132 | /* CM_CLKSEL2_PLL.CORE_CLK_SRC options (24XX) */ |
92 | #define CORE_CLK_SRC_32K 0 | 133 | #define CORE_CLK_SRC_32K 0 |