diff options
author | Rajendra Nayak <rnayak@ti.com> | 2011-02-25 18:06:48 -0500 |
---|---|---|
committer | Paul Walmsley <paul@pwsan.com> | 2011-02-25 18:06:48 -0500 |
commit | 4da71ae607fc657075286abd2774041ff4d00fe5 (patch) | |
tree | c43b8dfe4c8bae5bd3aa66771488804112154f6e /arch/arm/mach-omap2 | |
parent | 5cd1937b6d5990fe5d5287d925f05afd38e9fb02 (diff) |
OMAP: clockdomain: Arch specific funcs for clkdm_clk_enable/disable
Define the following architecture specific funtions for omap2/3/4
.clkdm_clk_enable
.clkdm_clk_disable
Convert the platform-independent framework to call these functions.
Also rename the api's by removing the omap2_ preamble.
Hence call omap2_clkdm_k_enable as clkdm_clk_enable and
omap2_clkdm_clk_disable as clkdm_clk_disable.a
Remove unused functions (_enable/_disable_hwsup) and unsed
headers from clockdomain.c file.
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Paul Walmsley <paul@pwsan.com>
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r-- | arch/arm/mach-omap2/clock.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clockdomain.c | 131 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clockdomain.h | 4 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clockdomain2xxx_3xxx.c | 69 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clockdomain44xx.c | 28 |
5 files changed, 114 insertions, 124 deletions
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 2a2f15213add..e9625fcf6390 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c | |||
@@ -264,7 +264,7 @@ void omap2_clk_disable(struct clk *clk) | |||
264 | clk->ops->disable(clk); | 264 | clk->ops->disable(clk); |
265 | 265 | ||
266 | if (clk->clkdm) | 266 | if (clk->clkdm) |
267 | omap2_clkdm_clk_disable(clk->clkdm, clk); | 267 | clkdm_clk_disable(clk->clkdm, clk); |
268 | 268 | ||
269 | if (clk->parent) | 269 | if (clk->parent) |
270 | omap2_clk_disable(clk->parent); | 270 | omap2_clk_disable(clk->parent); |
@@ -304,7 +304,7 @@ int omap2_clk_enable(struct clk *clk) | |||
304 | } | 304 | } |
305 | 305 | ||
306 | if (clk->clkdm) { | 306 | if (clk->clkdm) { |
307 | ret = omap2_clkdm_clk_enable(clk->clkdm, clk); | 307 | ret = clkdm_clk_enable(clk->clkdm, clk); |
308 | if (ret) { | 308 | if (ret) { |
309 | WARN(1, "clock: %s: could not enable clockdomain %s: " | 309 | WARN(1, "clock: %s: could not enable clockdomain %s: " |
310 | "%d\n", clk->name, clk->clkdm->name, ret); | 310 | "%d\n", clk->name, clk->clkdm->name, ret); |
@@ -322,7 +322,7 @@ int omap2_clk_enable(struct clk *clk) | |||
322 | 322 | ||
323 | oce_err3: | 323 | oce_err3: |
324 | if (clk->clkdm) | 324 | if (clk->clkdm) |
325 | omap2_clkdm_clk_disable(clk->clkdm, clk); | 325 | clkdm_clk_disable(clk->clkdm, clk); |
326 | oce_err2: | 326 | oce_err2: |
327 | if (clk->parent) | 327 | if (clk->parent) |
328 | omap2_clk_disable(clk->parent); | 328 | omap2_clk_disable(clk->parent); |
diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c index 44664e7cc2a6..70d242007e0b 100644 --- a/arch/arm/mach-omap2/clockdomain.c +++ b/arch/arm/mach-omap2/clockdomain.c | |||
@@ -26,17 +26,8 @@ | |||
26 | 26 | ||
27 | #include <linux/bitops.h> | 27 | #include <linux/bitops.h> |
28 | 28 | ||
29 | #include "prm2xxx_3xxx.h" | ||
30 | #include "prm-regbits-24xx.h" | ||
31 | #include "cm2xxx_3xxx.h" | ||
32 | #include "cm-regbits-24xx.h" | ||
33 | #include "cminst44xx.h" | ||
34 | #include "prcm44xx.h" | ||
35 | |||
36 | #include <plat/clock.h> | 29 | #include <plat/clock.h> |
37 | #include "powerdomain.h" | ||
38 | #include "clockdomain.h" | 30 | #include "clockdomain.h" |
39 | #include <plat/prcm.h> | ||
40 | 31 | ||
41 | /* clkdm_list contains all registered struct clockdomains */ | 32 | /* clkdm_list contains all registered struct clockdomains */ |
42 | static LIST_HEAD(clkdm_list); | 33 | static LIST_HEAD(clkdm_list); |
@@ -236,58 +227,6 @@ void _clkdm_del_autodeps(struct clockdomain *clkdm) | |||
236 | } | 227 | } |
237 | 228 | ||
238 | /** | 229 | /** |
239 | * _enable_hwsup - place a clockdomain into hardware-supervised idle | ||
240 | * @clkdm: struct clockdomain * | ||
241 | * | ||
242 | * Place the clockdomain into hardware-supervised idle mode. No return | ||
243 | * value. | ||
244 | * | ||
245 | * XXX Should this return an error if the clockdomain does not support | ||
246 | * hardware-supervised idle mode? | ||
247 | */ | ||
248 | static void _enable_hwsup(struct clockdomain *clkdm) | ||
249 | { | ||
250 | if (cpu_is_omap24xx()) | ||
251 | omap2xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
252 | clkdm->clktrctrl_mask); | ||
253 | else if (cpu_is_omap34xx()) | ||
254 | omap3xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
255 | clkdm->clktrctrl_mask); | ||
256 | else if (cpu_is_omap44xx()) | ||
257 | return omap4_cminst_clkdm_enable_hwsup(clkdm->prcm_partition, | ||
258 | clkdm->cm_inst, | ||
259 | clkdm->clkdm_offs); | ||
260 | else | ||
261 | BUG(); | ||
262 | } | ||
263 | |||
264 | /** | ||
265 | * _disable_hwsup - place a clockdomain into software-supervised idle | ||
266 | * @clkdm: struct clockdomain * | ||
267 | * | ||
268 | * Place the clockdomain @clkdm into software-supervised idle mode. | ||
269 | * No return value. | ||
270 | * | ||
271 | * XXX Should this return an error if the clockdomain does not support | ||
272 | * software-supervised idle mode? | ||
273 | */ | ||
274 | static void _disable_hwsup(struct clockdomain *clkdm) | ||
275 | { | ||
276 | if (cpu_is_omap24xx()) | ||
277 | omap2xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
278 | clkdm->clktrctrl_mask); | ||
279 | else if (cpu_is_omap34xx()) | ||
280 | omap3xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
281 | clkdm->clktrctrl_mask); | ||
282 | else if (cpu_is_omap44xx()) | ||
283 | return omap4_cminst_clkdm_disable_hwsup(clkdm->prcm_partition, | ||
284 | clkdm->cm_inst, | ||
285 | clkdm->clkdm_offs); | ||
286 | else | ||
287 | BUG(); | ||
288 | } | ||
289 | |||
290 | /** | ||
291 | * _resolve_clkdm_deps() - resolve clkdm_names in @clkdm_deps to clkdms | 230 | * _resolve_clkdm_deps() - resolve clkdm_names in @clkdm_deps to clkdms |
292 | * @clkdm: clockdomain that we are resolving dependencies for | 231 | * @clkdm: clockdomain that we are resolving dependencies for |
293 | * @clkdm_deps: ptr to array of struct clkdm_deps to resolve | 232 | * @clkdm_deps: ptr to array of struct clkdm_deps to resolve |
@@ -884,7 +823,7 @@ void clkdm_deny_idle(struct clockdomain *clkdm) | |||
884 | /* Clockdomain-to-clock framework interface code */ | 823 | /* Clockdomain-to-clock framework interface code */ |
885 | 824 | ||
886 | /** | 825 | /** |
887 | * omap2_clkdm_clk_enable - add an enabled downstream clock to this clkdm | 826 | * clkdm_clk_enable - add an enabled downstream clock to this clkdm |
888 | * @clkdm: struct clockdomain * | 827 | * @clkdm: struct clockdomain * |
889 | * @clk: struct clk * of the enabled downstream clock | 828 | * @clk: struct clk * of the enabled downstream clock |
890 | * | 829 | * |
@@ -897,10 +836,8 @@ void clkdm_deny_idle(struct clockdomain *clkdm) | |||
897 | * by on-chip processors. Returns -EINVAL if passed null pointers; | 836 | * by on-chip processors. Returns -EINVAL if passed null pointers; |
898 | * returns 0 upon success or if the clockdomain is in hwsup idle mode. | 837 | * returns 0 upon success or if the clockdomain is in hwsup idle mode. |
899 | */ | 838 | */ |
900 | int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) | 839 | int clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) |
901 | { | 840 | { |
902 | bool hwsup = false; | ||
903 | |||
904 | /* | 841 | /* |
905 | * XXX Rewrite this code to maintain a list of enabled | 842 | * XXX Rewrite this code to maintain a list of enabled |
906 | * downstream clocks for debugging purposes? | 843 | * downstream clocks for debugging purposes? |
@@ -909,6 +846,9 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) | |||
909 | if (!clkdm || !clk) | 846 | if (!clkdm || !clk) |
910 | return -EINVAL; | 847 | return -EINVAL; |
911 | 848 | ||
849 | if (!arch_clkdm || !arch_clkdm->clkdm_clk_enable) | ||
850 | return -EINVAL; | ||
851 | |||
912 | if (atomic_inc_return(&clkdm->usecount) > 1) | 852 | if (atomic_inc_return(&clkdm->usecount) > 1) |
913 | return 0; | 853 | return 0; |
914 | 854 | ||
@@ -917,31 +857,7 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) | |||
917 | pr_debug("clockdomain: clkdm %s: clk %s now enabled\n", clkdm->name, | 857 | pr_debug("clockdomain: clkdm %s: clk %s now enabled\n", clkdm->name, |
918 | clk->name); | 858 | clk->name); |
919 | 859 | ||
920 | if (cpu_is_omap24xx() || cpu_is_omap34xx()) { | 860 | arch_clkdm->clkdm_clk_enable(clkdm); |
921 | |||
922 | if (!clkdm->clktrctrl_mask) | ||
923 | return 0; | ||
924 | |||
925 | hwsup = omap2_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
926 | clkdm->clktrctrl_mask); | ||
927 | |||
928 | } else if (cpu_is_omap44xx()) { | ||
929 | |||
930 | hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition, | ||
931 | clkdm->cm_inst, | ||
932 | clkdm->clkdm_offs); | ||
933 | |||
934 | } | ||
935 | |||
936 | if (hwsup) { | ||
937 | /* Disable HW transitions when we are changing deps */ | ||
938 | _disable_hwsup(clkdm); | ||
939 | _clkdm_add_autodeps(clkdm); | ||
940 | _enable_hwsup(clkdm); | ||
941 | } else { | ||
942 | clkdm_wakeup(clkdm); | ||
943 | } | ||
944 | |||
945 | pwrdm_wait_transition(clkdm->pwrdm.ptr); | 861 | pwrdm_wait_transition(clkdm->pwrdm.ptr); |
946 | pwrdm_clkdm_state_switch(clkdm); | 862 | pwrdm_clkdm_state_switch(clkdm); |
947 | 863 | ||
@@ -949,7 +865,7 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) | |||
949 | } | 865 | } |
950 | 866 | ||
951 | /** | 867 | /** |
952 | * omap2_clkdm_clk_disable - remove an enabled downstream clock from this clkdm | 868 | * clkdm_clk_disable - remove an enabled downstream clock from this clkdm |
953 | * @clkdm: struct clockdomain * | 869 | * @clkdm: struct clockdomain * |
954 | * @clk: struct clk * of the disabled downstream clock | 870 | * @clk: struct clk * of the disabled downstream clock |
955 | * | 871 | * |
@@ -962,10 +878,8 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) | |||
962 | * is enabled; or returns 0 upon success or if the clockdomain is in | 878 | * is enabled; or returns 0 upon success or if the clockdomain is in |
963 | * hwsup idle mode. | 879 | * hwsup idle mode. |
964 | */ | 880 | */ |
965 | int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk) | 881 | int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk) |
966 | { | 882 | { |
967 | bool hwsup = false; | ||
968 | |||
969 | /* | 883 | /* |
970 | * XXX Rewrite this code to maintain a list of enabled | 884 | * XXX Rewrite this code to maintain a list of enabled |
971 | * downstream clocks for debugging purposes? | 885 | * downstream clocks for debugging purposes? |
@@ -974,6 +888,9 @@ int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk) | |||
974 | if (!clkdm || !clk) | 888 | if (!clkdm || !clk) |
975 | return -EINVAL; | 889 | return -EINVAL; |
976 | 890 | ||
891 | if (!arch_clkdm || !arch_clkdm->clkdm_clk_disable) | ||
892 | return -EINVAL; | ||
893 | |||
977 | #ifdef DEBUG | 894 | #ifdef DEBUG |
978 | if (atomic_read(&clkdm->usecount) == 0) { | 895 | if (atomic_read(&clkdm->usecount) == 0) { |
979 | WARN_ON(1); /* underflow */ | 896 | WARN_ON(1); /* underflow */ |
@@ -989,31 +906,7 @@ int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk) | |||
989 | pr_debug("clockdomain: clkdm %s: clk %s now disabled\n", clkdm->name, | 906 | pr_debug("clockdomain: clkdm %s: clk %s now disabled\n", clkdm->name, |
990 | clk->name); | 907 | clk->name); |
991 | 908 | ||
992 | if (cpu_is_omap24xx() || cpu_is_omap34xx()) { | 909 | arch_clkdm->clkdm_clk_disable(clkdm); |
993 | |||
994 | if (!clkdm->clktrctrl_mask) | ||
995 | return 0; | ||
996 | |||
997 | hwsup = omap2_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
998 | clkdm->clktrctrl_mask); | ||
999 | |||
1000 | } else if (cpu_is_omap44xx()) { | ||
1001 | |||
1002 | hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition, | ||
1003 | clkdm->cm_inst, | ||
1004 | clkdm->clkdm_offs); | ||
1005 | |||
1006 | } | ||
1007 | |||
1008 | if (hwsup) { | ||
1009 | /* Disable HW transitions when we are changing deps */ | ||
1010 | _disable_hwsup(clkdm); | ||
1011 | _clkdm_del_autodeps(clkdm); | ||
1012 | _enable_hwsup(clkdm); | ||
1013 | } else { | ||
1014 | clkdm_sleep(clkdm); | ||
1015 | } | ||
1016 | |||
1017 | pwrdm_clkdm_state_switch(clkdm); | 910 | pwrdm_clkdm_state_switch(clkdm); |
1018 | 911 | ||
1019 | return 0; | 912 | return 0; |
diff --git a/arch/arm/mach-omap2/clockdomain.h b/arch/arm/mach-omap2/clockdomain.h index 7126658d9ae1..de52f059f9e2 100644 --- a/arch/arm/mach-omap2/clockdomain.h +++ b/arch/arm/mach-omap2/clockdomain.h | |||
@@ -173,8 +173,8 @@ void clkdm_deny_idle(struct clockdomain *clkdm); | |||
173 | int clkdm_wakeup(struct clockdomain *clkdm); | 173 | int clkdm_wakeup(struct clockdomain *clkdm); |
174 | int clkdm_sleep(struct clockdomain *clkdm); | 174 | int clkdm_sleep(struct clockdomain *clkdm); |
175 | 175 | ||
176 | int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk); | 176 | int clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk); |
177 | int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk); | 177 | int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk); |
178 | 178 | ||
179 | extern void __init omap2xxx_clockdomains_init(void); | 179 | extern void __init omap2xxx_clockdomains_init(void); |
180 | extern void __init omap3xxx_clockdomains_init(void); | 180 | extern void __init omap3xxx_clockdomains_init(void); |
diff --git a/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c b/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c index 25c27a5c722f..48d0db7e6069 100644 --- a/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c +++ b/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c | |||
@@ -146,6 +146,71 @@ static void omap2_clkdm_deny_idle(struct clockdomain *clkdm) | |||
146 | _clkdm_del_autodeps(clkdm); | 146 | _clkdm_del_autodeps(clkdm); |
147 | } | 147 | } |
148 | 148 | ||
149 | static void _enable_hwsup(struct clockdomain *clkdm) | ||
150 | { | ||
151 | if (cpu_is_omap24xx()) | ||
152 | omap2xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
153 | clkdm->clktrctrl_mask); | ||
154 | else if (cpu_is_omap34xx()) | ||
155 | omap3xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
156 | clkdm->clktrctrl_mask); | ||
157 | } | ||
158 | |||
159 | static void _disable_hwsup(struct clockdomain *clkdm) | ||
160 | { | ||
161 | if (cpu_is_omap24xx()) | ||
162 | omap2xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
163 | clkdm->clktrctrl_mask); | ||
164 | else if (cpu_is_omap34xx()) | ||
165 | omap3xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
166 | clkdm->clktrctrl_mask); | ||
167 | } | ||
168 | |||
169 | |||
170 | static int omap2_clkdm_clk_enable(struct clockdomain *clkdm) | ||
171 | { | ||
172 | bool hwsup = false; | ||
173 | |||
174 | if (!clkdm->clktrctrl_mask) | ||
175 | return 0; | ||
176 | |||
177 | hwsup = omap2_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
178 | clkdm->clktrctrl_mask); | ||
179 | |||
180 | if (hwsup) { | ||
181 | /* Disable HW transitions when we are changing deps */ | ||
182 | _disable_hwsup(clkdm); | ||
183 | _clkdm_add_autodeps(clkdm); | ||
184 | _enable_hwsup(clkdm); | ||
185 | } else { | ||
186 | clkdm_wakeup(clkdm); | ||
187 | } | ||
188 | |||
189 | return 0; | ||
190 | } | ||
191 | |||
192 | static int omap2_clkdm_clk_disable(struct clockdomain *clkdm) | ||
193 | { | ||
194 | bool hwsup = false; | ||
195 | |||
196 | if (!clkdm->clktrctrl_mask) | ||
197 | return 0; | ||
198 | |||
199 | hwsup = omap2_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs, | ||
200 | clkdm->clktrctrl_mask); | ||
201 | |||
202 | if (hwsup) { | ||
203 | /* Disable HW transitions when we are changing deps */ | ||
204 | _disable_hwsup(clkdm); | ||
205 | _clkdm_del_autodeps(clkdm); | ||
206 | _enable_hwsup(clkdm); | ||
207 | } else { | ||
208 | clkdm_sleep(clkdm); | ||
209 | } | ||
210 | |||
211 | return 0; | ||
212 | } | ||
213 | |||
149 | static int omap3_clkdm_sleep(struct clockdomain *clkdm) | 214 | static int omap3_clkdm_sleep(struct clockdomain *clkdm) |
150 | { | 215 | { |
151 | omap3xxx_cm_clkdm_force_sleep(clkdm->pwrdm.ptr->prcm_offs, | 216 | omap3xxx_cm_clkdm_force_sleep(clkdm->pwrdm.ptr->prcm_offs, |
@@ -187,6 +252,8 @@ struct clkdm_ops omap2_clkdm_operations = { | |||
187 | .clkdm_wakeup = omap2_clkdm_wakeup, | 252 | .clkdm_wakeup = omap2_clkdm_wakeup, |
188 | .clkdm_allow_idle = omap2_clkdm_allow_idle, | 253 | .clkdm_allow_idle = omap2_clkdm_allow_idle, |
189 | .clkdm_deny_idle = omap2_clkdm_deny_idle, | 254 | .clkdm_deny_idle = omap2_clkdm_deny_idle, |
255 | .clkdm_clk_enable = omap2_clkdm_clk_enable, | ||
256 | .clkdm_clk_disable = omap2_clkdm_clk_disable, | ||
190 | }; | 257 | }; |
191 | 258 | ||
192 | struct clkdm_ops omap3_clkdm_operations = { | 259 | struct clkdm_ops omap3_clkdm_operations = { |
@@ -202,4 +269,6 @@ struct clkdm_ops omap3_clkdm_operations = { | |||
202 | .clkdm_wakeup = omap3_clkdm_wakeup, | 269 | .clkdm_wakeup = omap3_clkdm_wakeup, |
203 | .clkdm_allow_idle = omap3_clkdm_allow_idle, | 270 | .clkdm_allow_idle = omap3_clkdm_allow_idle, |
204 | .clkdm_deny_idle = omap3_clkdm_deny_idle, | 271 | .clkdm_deny_idle = omap3_clkdm_deny_idle, |
272 | .clkdm_clk_enable = omap2_clkdm_clk_enable, | ||
273 | .clkdm_clk_disable = omap2_clkdm_clk_disable, | ||
205 | }; | 274 | }; |
diff --git a/arch/arm/mach-omap2/clockdomain44xx.c b/arch/arm/mach-omap2/clockdomain44xx.c index a46125f15454..c0ccc4701646 100644 --- a/arch/arm/mach-omap2/clockdomain44xx.c +++ b/arch/arm/mach-omap2/clockdomain44xx.c | |||
@@ -41,9 +41,37 @@ static void omap4_clkdm_deny_idle(struct clockdomain *clkdm) | |||
41 | clkdm->cm_inst, clkdm->clkdm_offs); | 41 | clkdm->cm_inst, clkdm->clkdm_offs); |
42 | } | 42 | } |
43 | 43 | ||
44 | static int omap4_clkdm_clk_enable(struct clockdomain *clkdm) | ||
45 | { | ||
46 | bool hwsup = false; | ||
47 | |||
48 | hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition, | ||
49 | clkdm->cm_inst, clkdm->clkdm_offs); | ||
50 | |||
51 | if (!hwsup) | ||
52 | clkdm_wakeup(clkdm); | ||
53 | |||
54 | return 0; | ||
55 | } | ||
56 | |||
57 | static int omap4_clkdm_clk_disable(struct clockdomain *clkdm) | ||
58 | { | ||
59 | bool hwsup = false; | ||
60 | |||
61 | hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition, | ||
62 | clkdm->cm_inst, clkdm->clkdm_offs); | ||
63 | |||
64 | if (!hwsup) | ||
65 | clkdm_sleep(clkdm); | ||
66 | |||
67 | return 0; | ||
68 | } | ||
69 | |||
44 | struct clkdm_ops omap4_clkdm_operations = { | 70 | struct clkdm_ops omap4_clkdm_operations = { |
45 | .clkdm_sleep = omap4_clkdm_sleep, | 71 | .clkdm_sleep = omap4_clkdm_sleep, |
46 | .clkdm_wakeup = omap4_clkdm_wakeup, | 72 | .clkdm_wakeup = omap4_clkdm_wakeup, |
47 | .clkdm_allow_idle = omap4_clkdm_allow_idle, | 73 | .clkdm_allow_idle = omap4_clkdm_allow_idle, |
48 | .clkdm_deny_idle = omap4_clkdm_deny_idle, | 74 | .clkdm_deny_idle = omap4_clkdm_deny_idle, |
75 | .clkdm_clk_enable = omap4_clkdm_clk_enable, | ||
76 | .clkdm_clk_disable = omap4_clkdm_clk_disable, | ||
49 | }; | 77 | }; |