diff options
Diffstat (limited to 'arch/arm/mach-omap2/clock.h')
-rw-r--r-- | arch/arm/mach-omap2/clock.h | 102 |
1 files changed, 76 insertions, 26 deletions
diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h index 9ae7540f8af2..ad8a1f7c1afc 100644 --- a/arch/arm/mach-omap2/clock.h +++ b/arch/arm/mach-omap2/clock.h | |||
@@ -1,8 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/arm/mach-omap2/clock.h | 2 | * linux/arch/arm/mach-omap2/clock.h |
3 | * | 3 | * |
4 | * Copyright (C) 2005-2008 Texas Instruments, Inc. | 4 | * Copyright (C) 2005-2009 Texas Instruments, Inc. |
5 | * Copyright (C) 2004-2008 Nokia Corporation | 5 | * Copyright (C) 2004-2009 Nokia Corporation |
6 | * | 6 | * |
7 | * Contacts: | 7 | * Contacts: |
8 | * Richard Woodruff <r-woodruff2@ti.com> | 8 | * Richard Woodruff <r-woodruff2@ti.com> |
@@ -16,7 +16,7 @@ | |||
16 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK_H | 16 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK_H |
17 | #define __ARCH_ARM_MACH_OMAP2_CLOCK_H | 17 | #define __ARCH_ARM_MACH_OMAP2_CLOCK_H |
18 | 18 | ||
19 | #include <mach/clock.h> | 19 | #include <plat/clock.h> |
20 | 20 | ||
21 | /* The maximum error between a target DPLL rate and the rounded rate in Hz */ | 21 | /* The maximum error between a target DPLL rate and the rounded rate in Hz */ |
22 | #define DEFAULT_DPLL_RATE_TOLERANCE 50000 | 22 | #define DEFAULT_DPLL_RATE_TOLERANCE 50000 |
@@ -36,7 +36,21 @@ | |||
36 | #define OMAP3XXX_EN_DPLL_FRBYPASS 0x6 | 36 | #define OMAP3XXX_EN_DPLL_FRBYPASS 0x6 |
37 | #define OMAP3XXX_EN_DPLL_LOCKED 0x7 | 37 | #define OMAP3XXX_EN_DPLL_LOCKED 0x7 |
38 | 38 | ||
39 | int omap2_clk_init(void); | 39 | /* OMAP4xxx CM_CLKMODE_DPLL*.EN_*_DPLL bits - for omap2_get_dpll_rate() */ |
40 | #define OMAP4XXX_EN_DPLL_MNBYPASS 0x4 | ||
41 | #define OMAP4XXX_EN_DPLL_LPBYPASS 0x5 | ||
42 | #define OMAP4XXX_EN_DPLL_FRBYPASS 0x6 | ||
43 | #define OMAP4XXX_EN_DPLL_LOCKED 0x7 | ||
44 | |||
45 | /* CM_CLKEN_PLL*.EN* bit values - not all are available for every DPLL */ | ||
46 | #define DPLL_LOW_POWER_STOP 0x1 | ||
47 | #define DPLL_LOW_POWER_BYPASS 0x5 | ||
48 | #define DPLL_LOCKED 0x7 | ||
49 | |||
50 | /* DPLL Type and DCO Selection Flags */ | ||
51 | #define DPLL_J_TYPE 0x1 | ||
52 | #define DPLL_NO_DCO_SEL 0x2 | ||
53 | |||
40 | int omap2_clk_enable(struct clk *clk); | 54 | int omap2_clk_enable(struct clk *clk); |
41 | void omap2_clk_disable(struct clk *clk); | 55 | void omap2_clk_disable(struct clk *clk); |
42 | long omap2_clk_round_rate(struct clk *clk, unsigned long rate); | 56 | long omap2_clk_round_rate(struct clk *clk, unsigned long rate); |
@@ -44,6 +58,14 @@ int omap2_clk_set_rate(struct clk *clk, unsigned long rate); | |||
44 | int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent); | 58 | int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent); |
45 | int omap2_dpll_set_rate_tolerance(struct clk *clk, unsigned int tolerance); | 59 | int omap2_dpll_set_rate_tolerance(struct clk *clk, unsigned int tolerance); |
46 | long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate); | 60 | long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate); |
61 | unsigned long omap3_dpll_recalc(struct clk *clk); | ||
62 | unsigned long omap3_clkoutx2_recalc(struct clk *clk); | ||
63 | void omap3_dpll_allow_idle(struct clk *clk); | ||
64 | void omap3_dpll_deny_idle(struct clk *clk); | ||
65 | u32 omap3_dpll_autoidle_read(struct clk *clk); | ||
66 | int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate); | ||
67 | int omap3_noncore_dpll_enable(struct clk *clk); | ||
68 | void omap3_noncore_dpll_disable(struct clk *clk); | ||
47 | 69 | ||
48 | #ifdef CONFIG_OMAP_RESET_CLOCKS | 70 | #ifdef CONFIG_OMAP_RESET_CLOCKS |
49 | void omap2_clk_disable_unused(struct clk *clk); | 71 | void omap2_clk_disable_unused(struct clk *clk); |
@@ -59,42 +81,70 @@ u32 omap2_clksel_round_rate_div(struct clk *clk, unsigned long target_rate, | |||
59 | u32 *new_div); | 81 | u32 *new_div); |
60 | u32 omap2_clksel_to_divisor(struct clk *clk, u32 field_val); | 82 | u32 omap2_clksel_to_divisor(struct clk *clk, u32 field_val); |
61 | u32 omap2_divisor_to_clksel(struct clk *clk, u32 div); | 83 | u32 omap2_divisor_to_clksel(struct clk *clk, u32 div); |
62 | unsigned long omap2_fixed_divisor_recalc(struct clk *clk); | ||
63 | long omap2_clksel_round_rate(struct clk *clk, unsigned long target_rate); | 84 | long omap2_clksel_round_rate(struct clk *clk, unsigned long target_rate); |
64 | int omap2_clksel_set_rate(struct clk *clk, unsigned long rate); | 85 | int omap2_clksel_set_rate(struct clk *clk, unsigned long rate); |
86 | int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent); | ||
65 | u32 omap2_get_dpll_rate(struct clk *clk); | 87 | u32 omap2_get_dpll_rate(struct clk *clk); |
88 | void omap2_init_dpll_parent(struct clk *clk); | ||
66 | int omap2_wait_clock_ready(void __iomem *reg, u32 cval, const char *name); | 89 | int omap2_wait_clock_ready(void __iomem *reg, u32 cval, const char *name); |
67 | void omap2_clk_prepare_for_reboot(void); | 90 | |
91 | |||
92 | #ifdef CONFIG_ARCH_OMAP2 | ||
93 | void omap2xxx_clk_prepare_for_reboot(void); | ||
94 | #else | ||
95 | static inline void omap2xxx_clk_prepare_for_reboot(void) | ||
96 | { | ||
97 | } | ||
98 | #endif | ||
99 | |||
100 | #ifdef CONFIG_ARCH_OMAP3 | ||
101 | void omap3_clk_prepare_for_reboot(void); | ||
102 | #else | ||
103 | static inline void omap3_clk_prepare_for_reboot(void) | ||
104 | { | ||
105 | } | ||
106 | #endif | ||
107 | |||
108 | #ifdef CONFIG_ARCH_OMAP4 | ||
109 | void omap4_clk_prepare_for_reboot(void); | ||
110 | #else | ||
111 | static inline void omap4_clk_prepare_for_reboot(void) | ||
112 | { | ||
113 | } | ||
114 | #endif | ||
115 | |||
68 | int omap2_dflt_clk_enable(struct clk *clk); | 116 | int omap2_dflt_clk_enable(struct clk *clk); |
69 | void omap2_dflt_clk_disable(struct clk *clk); | 117 | void omap2_dflt_clk_disable(struct clk *clk); |
70 | void omap2_clk_dflt_find_companion(struct clk *clk, void __iomem **other_reg, | 118 | void omap2_clk_dflt_find_companion(struct clk *clk, void __iomem **other_reg, |
71 | u8 *other_bit); | 119 | u8 *other_bit); |
72 | void omap2_clk_dflt_find_idlest(struct clk *clk, void __iomem **idlest_reg, | 120 | void omap2_clk_dflt_find_idlest(struct clk *clk, void __iomem **idlest_reg, |
73 | u8 *idlest_bit); | 121 | u8 *idlest_bit, u8 *idlest_val); |
122 | int omap2_clk_switch_mpurate_at_boot(const char *mpurate_ck_name); | ||
123 | void omap2_clk_print_new_rates(const char *hfclkin_ck_name, | ||
124 | const char *core_ck_name, | ||
125 | const char *mpu_ck_name); | ||
126 | |||
127 | extern u8 cpu_mask; | ||
74 | 128 | ||
75 | extern const struct clkops clkops_omap2_dflt_wait; | 129 | extern const struct clkops clkops_omap2_dflt_wait; |
130 | extern const struct clkops clkops_dummy; | ||
76 | extern const struct clkops clkops_omap2_dflt; | 131 | extern const struct clkops clkops_omap2_dflt; |
77 | 132 | ||
78 | extern u8 cpu_mask; | 133 | extern struct clk_functions omap2_clk_functions; |
134 | extern struct clk *vclk, *sclk; | ||
135 | |||
136 | extern const struct clksel_rate gpt_32k_rates[]; | ||
137 | extern const struct clksel_rate gpt_sys_rates[]; | ||
138 | extern const struct clksel_rate gfx_l3_rates[]; | ||
79 | 139 | ||
80 | /* clksel_rate data common to 24xx/343x */ | 140 | #if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_CPU_FREQ) |
81 | static const struct clksel_rate gpt_32k_rates[] = { | 141 | extern void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table); |
82 | { .div = 1, .val = 0, .flags = RATE_IN_24XX | RATE_IN_343X | DEFAULT_RATE }, | 142 | extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table); |
83 | { .div = 0 } | 143 | #else |
84 | }; | 144 | #define omap2_clk_init_cpufreq_table 0 |
85 | 145 | #define omap2_clk_exit_cpufreq_table 0 | |
86 | static const struct clksel_rate gpt_sys_rates[] = { | 146 | #endif |
87 | { .div = 1, .val = 1, .flags = RATE_IN_24XX | RATE_IN_343X | DEFAULT_RATE }, | ||
88 | { .div = 0 } | ||
89 | }; | ||
90 | |||
91 | static const struct clksel_rate gfx_l3_rates[] = { | ||
92 | { .div = 1, .val = 1, .flags = RATE_IN_24XX | RATE_IN_343X }, | ||
93 | { .div = 2, .val = 2, .flags = RATE_IN_24XX | RATE_IN_343X | DEFAULT_RATE }, | ||
94 | { .div = 3, .val = 3, .flags = RATE_IN_243X | RATE_IN_343X }, | ||
95 | { .div = 4, .val = 4, .flags = RATE_IN_243X | RATE_IN_343X }, | ||
96 | { .div = 0 } | ||
97 | }; | ||
98 | 147 | ||
148 | extern const struct clkops clkops_omap3_noncore_dpll_ops; | ||
99 | 149 | ||
100 | #endif | 150 | #endif |