Lines Matching refs:clkdm

48 	struct clockdomain *clkdm, *temp_clkdm;  in _clkdm_lookup()  local
53 clkdm = NULL; in _clkdm_lookup()
57 clkdm = temp_clkdm; in _clkdm_lookup()
62 return clkdm; in _clkdm_lookup()
73 static int _clkdm_register(struct clockdomain *clkdm) in _clkdm_register() argument
77 if (!clkdm || !clkdm->name) in _clkdm_register()
80 pwrdm = pwrdm_lookup(clkdm->pwrdm.name); in _clkdm_register()
83 clkdm->name, clkdm->pwrdm.name); in _clkdm_register()
86 clkdm->pwrdm.ptr = pwrdm; in _clkdm_register()
89 if (_clkdm_lookup(clkdm->name)) in _clkdm_register()
92 list_add(&clkdm->node, &clkdm_list); in _clkdm_register()
94 pwrdm_add_clkdm(pwrdm, clkdm); in _clkdm_register()
96 pr_debug("clockdomain: registered %s\n", clkdm->name); in _clkdm_register()
102 static struct clkdm_dep *_clkdm_deps_lookup(struct clockdomain *clkdm, in _clkdm_deps_lookup() argument
107 if (!clkdm || !deps) in _clkdm_deps_lookup()
111 if (!cd->clkdm && cd->clkdm_name) in _clkdm_deps_lookup()
112 cd->clkdm = _clkdm_lookup(cd->clkdm_name); in _clkdm_deps_lookup()
114 if (cd->clkdm == clkdm) in _clkdm_deps_lookup()
142 struct clockdomain *clkdm; in _autodep_lookup() local
147 clkdm = clkdm_lookup(autodep->clkdm.name); in _autodep_lookup()
148 if (!clkdm) { in _autodep_lookup()
150 autodep->clkdm.name); in _autodep_lookup()
151 clkdm = ERR_PTR(-ENOENT); in _autodep_lookup()
153 autodep->clkdm.ptr = clkdm; in _autodep_lookup()
165 static void _resolve_clkdm_deps(struct clockdomain *clkdm, in _resolve_clkdm_deps() argument
171 if (cd->clkdm) in _resolve_clkdm_deps()
173 cd->clkdm = _clkdm_lookup(cd->clkdm_name); in _resolve_clkdm_deps()
175 …WARN(!cd->clkdm, "clockdomain: %s: could not find clkdm %s while resolving dependencies - should n… in _resolve_clkdm_deps()
176 clkdm->name, cd->clkdm_name); in _resolve_clkdm_deps()
447 for (a = autodeps; a->clkdm.ptr; a++) in clkdm_register_autodeps()
479 struct clockdomain *clkdm; in clkdm_complete_init() local
485 list_for_each_entry(clkdm, &clkdm_list, node) { in clkdm_complete_init()
486 clkdm_deny_idle(clkdm); in clkdm_complete_init()
488 _resolve_clkdm_deps(clkdm, clkdm->wkdep_srcs); in clkdm_complete_init()
489 clkdm_clear_all_wkdeps(clkdm); in clkdm_complete_init()
491 _resolve_clkdm_deps(clkdm, clkdm->sleepdep_srcs); in clkdm_complete_init()
492 clkdm_clear_all_sleepdeps(clkdm); in clkdm_complete_init()
513 struct clockdomain *clkdm, *temp_clkdm; in clkdm_lookup() local
518 clkdm = NULL; in clkdm_lookup()
522 clkdm = temp_clkdm; in clkdm_lookup()
527 return clkdm; in clkdm_lookup()
544 int clkdm_for_each(int (*fn)(struct clockdomain *clkdm, void *user), in clkdm_for_each() argument
547 struct clockdomain *clkdm; in clkdm_for_each() local
553 list_for_each_entry(clkdm, &clkdm_list, node) { in clkdm_for_each()
554 ret = (*fn)(clkdm, user); in clkdm_for_each()
570 struct powerdomain *clkdm_get_pwrdm(struct clockdomain *clkdm) in clkdm_get_pwrdm() argument
572 if (!clkdm) in clkdm_get_pwrdm()
575 return clkdm->pwrdm.ptr; in clkdm_get_pwrdm()
605 pwrdm_lock(cd->clkdm->pwrdm.ptr); in clkdm_add_wkdep()
607 pwrdm_unlock(cd->clkdm->pwrdm.ptr); in clkdm_add_wkdep()
634 pwrdm_lock(cd->clkdm->pwrdm.ptr); in clkdm_del_wkdep()
636 pwrdm_unlock(cd->clkdm->pwrdm.ptr); in clkdm_del_wkdep()
690 int clkdm_clear_all_wkdeps(struct clockdomain *clkdm) in clkdm_clear_all_wkdeps() argument
692 if (!clkdm) in clkdm_clear_all_wkdeps()
698 return arch_clkdm->clkdm_clear_all_wkdeps(clkdm); in clkdm_clear_all_wkdeps()
725 pwrdm_lock(cd->clkdm->pwrdm.ptr); in clkdm_add_sleepdep()
727 pwrdm_unlock(cd->clkdm->pwrdm.ptr); in clkdm_add_sleepdep()
756 pwrdm_lock(cd->clkdm->pwrdm.ptr); in clkdm_del_sleepdep()
758 pwrdm_unlock(cd->clkdm->pwrdm.ptr); in clkdm_del_sleepdep()
814 int clkdm_clear_all_sleepdeps(struct clockdomain *clkdm) in clkdm_clear_all_sleepdeps() argument
816 if (!clkdm) in clkdm_clear_all_sleepdeps()
822 return arch_clkdm->clkdm_clear_all_sleepdeps(clkdm); in clkdm_clear_all_sleepdeps()
834 static int clkdm_sleep_nolock(struct clockdomain *clkdm) in clkdm_sleep_nolock() argument
838 if (!clkdm) in clkdm_sleep_nolock()
841 if (!(clkdm->flags & CLKDM_CAN_FORCE_SLEEP)) { in clkdm_sleep_nolock()
843 clkdm->name); in clkdm_sleep_nolock()
850 pr_debug("clockdomain: forcing sleep on %s\n", clkdm->name); in clkdm_sleep_nolock()
852 clkdm->_flags &= ~_CLKDM_FLAG_HWSUP_ENABLED; in clkdm_sleep_nolock()
853 ret = arch_clkdm->clkdm_sleep(clkdm); in clkdm_sleep_nolock()
854 ret |= pwrdm_state_switch_nolock(clkdm->pwrdm.ptr); in clkdm_sleep_nolock()
868 int clkdm_sleep(struct clockdomain *clkdm) in clkdm_sleep() argument
872 pwrdm_lock(clkdm->pwrdm.ptr); in clkdm_sleep()
873 ret = clkdm_sleep_nolock(clkdm); in clkdm_sleep()
874 pwrdm_unlock(clkdm->pwrdm.ptr); in clkdm_sleep()
888 static int clkdm_wakeup_nolock(struct clockdomain *clkdm) in clkdm_wakeup_nolock() argument
892 if (!clkdm) in clkdm_wakeup_nolock()
895 if (!(clkdm->flags & CLKDM_CAN_FORCE_WAKEUP)) { in clkdm_wakeup_nolock()
897 clkdm->name); in clkdm_wakeup_nolock()
904 pr_debug("clockdomain: forcing wakeup on %s\n", clkdm->name); in clkdm_wakeup_nolock()
906 clkdm->_flags &= ~_CLKDM_FLAG_HWSUP_ENABLED; in clkdm_wakeup_nolock()
907 ret = arch_clkdm->clkdm_wakeup(clkdm); in clkdm_wakeup_nolock()
908 ret |= pwrdm_state_switch_nolock(clkdm->pwrdm.ptr); in clkdm_wakeup_nolock()
922 int clkdm_wakeup(struct clockdomain *clkdm) in clkdm_wakeup() argument
926 pwrdm_lock(clkdm->pwrdm.ptr); in clkdm_wakeup()
927 ret = clkdm_wakeup_nolock(clkdm); in clkdm_wakeup()
928 pwrdm_unlock(clkdm->pwrdm.ptr); in clkdm_wakeup()
944 void clkdm_allow_idle_nolock(struct clockdomain *clkdm) in clkdm_allow_idle_nolock() argument
946 if (!clkdm) in clkdm_allow_idle_nolock()
949 if (!WARN_ON(!clkdm->forcewake_count)) in clkdm_allow_idle_nolock()
950 clkdm->forcewake_count--; in clkdm_allow_idle_nolock()
952 if (clkdm->forcewake_count) in clkdm_allow_idle_nolock()
955 if (!clkdm->usecount && (clkdm->flags & CLKDM_CAN_FORCE_SLEEP)) in clkdm_allow_idle_nolock()
956 clkdm_sleep_nolock(clkdm); in clkdm_allow_idle_nolock()
958 if (!(clkdm->flags & CLKDM_CAN_ENABLE_AUTO)) in clkdm_allow_idle_nolock()
961 if (clkdm->flags & CLKDM_MISSING_IDLE_REPORTING) in clkdm_allow_idle_nolock()
968 clkdm->name); in clkdm_allow_idle_nolock()
970 clkdm->_flags |= _CLKDM_FLAG_HWSUP_ENABLED; in clkdm_allow_idle_nolock()
971 arch_clkdm->clkdm_allow_idle(clkdm); in clkdm_allow_idle_nolock()
972 pwrdm_state_switch_nolock(clkdm->pwrdm.ptr); in clkdm_allow_idle_nolock()
985 void clkdm_allow_idle(struct clockdomain *clkdm) in clkdm_allow_idle() argument
987 pwrdm_lock(clkdm->pwrdm.ptr); in clkdm_allow_idle()
988 clkdm_allow_idle_nolock(clkdm); in clkdm_allow_idle()
989 pwrdm_unlock(clkdm->pwrdm.ptr); in clkdm_allow_idle()
1002 void clkdm_deny_idle_nolock(struct clockdomain *clkdm) in clkdm_deny_idle_nolock() argument
1004 if (!clkdm) in clkdm_deny_idle_nolock()
1007 if (clkdm->forcewake_count++) in clkdm_deny_idle_nolock()
1010 if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP) in clkdm_deny_idle_nolock()
1011 clkdm_wakeup_nolock(clkdm); in clkdm_deny_idle_nolock()
1013 if (!(clkdm->flags & CLKDM_CAN_DISABLE_AUTO)) in clkdm_deny_idle_nolock()
1016 if (clkdm->flags & CLKDM_MISSING_IDLE_REPORTING) in clkdm_deny_idle_nolock()
1023 clkdm->name); in clkdm_deny_idle_nolock()
1025 clkdm->_flags &= ~_CLKDM_FLAG_HWSUP_ENABLED; in clkdm_deny_idle_nolock()
1026 arch_clkdm->clkdm_deny_idle(clkdm); in clkdm_deny_idle_nolock()
1027 pwrdm_state_switch_nolock(clkdm->pwrdm.ptr); in clkdm_deny_idle_nolock()
1039 void clkdm_deny_idle(struct clockdomain *clkdm) in clkdm_deny_idle() argument
1041 pwrdm_lock(clkdm->pwrdm.ptr); in clkdm_deny_idle()
1042 clkdm_deny_idle_nolock(clkdm); in clkdm_deny_idle()
1043 pwrdm_unlock(clkdm->pwrdm.ptr); in clkdm_deny_idle()
1059 void clkdm_add_autodeps(struct clockdomain *clkdm) in clkdm_add_autodeps() argument
1063 if (!autodeps || clkdm->flags & CLKDM_NO_AUTODEPS) in clkdm_add_autodeps()
1066 for (autodep = autodeps; autodep->clkdm.ptr; autodep++) { in clkdm_add_autodeps()
1067 if (IS_ERR(autodep->clkdm.ptr)) in clkdm_add_autodeps()
1071 clkdm->name, autodep->clkdm.ptr->name); in clkdm_add_autodeps()
1073 _clkdm_add_sleepdep(clkdm, autodep->clkdm.ptr); in clkdm_add_autodeps()
1074 _clkdm_add_wkdep(clkdm, autodep->clkdm.ptr); in clkdm_add_autodeps()
1089 void clkdm_del_autodeps(struct clockdomain *clkdm) in clkdm_del_autodeps() argument
1093 if (!autodeps || clkdm->flags & CLKDM_NO_AUTODEPS) in clkdm_del_autodeps()
1096 for (autodep = autodeps; autodep->clkdm.ptr; autodep++) { in clkdm_del_autodeps()
1097 if (IS_ERR(autodep->clkdm.ptr)) in clkdm_del_autodeps()
1101 clkdm->name, autodep->clkdm.ptr->name); in clkdm_del_autodeps()
1103 _clkdm_del_sleepdep(clkdm, autodep->clkdm.ptr); in clkdm_del_autodeps()
1104 _clkdm_del_wkdep(clkdm, autodep->clkdm.ptr); in clkdm_del_autodeps()
1124 int clkdm_clk_enable(struct clockdomain *clkdm, struct clk *unused) in clkdm_clk_enable() argument
1126 if (!clkdm || !arch_clkdm || !arch_clkdm->clkdm_clk_enable) in clkdm_clk_enable()
1129 pwrdm_lock(clkdm->pwrdm.ptr); in clkdm_clk_enable()
1136 clkdm->usecount++; in clkdm_clk_enable()
1137 if (clkdm->usecount > 1 && autodeps) { in clkdm_clk_enable()
1138 pwrdm_unlock(clkdm->pwrdm.ptr); in clkdm_clk_enable()
1142 arch_clkdm->clkdm_clk_enable(clkdm); in clkdm_clk_enable()
1143 pwrdm_state_switch_nolock(clkdm->pwrdm.ptr); in clkdm_clk_enable()
1144 pwrdm_unlock(clkdm->pwrdm.ptr); in clkdm_clk_enable()
1146 pr_debug("clockdomain: %s: enabled\n", clkdm->name); in clkdm_clk_enable()
1164 int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk) in clkdm_clk_disable() argument
1166 if (!clkdm || !arch_clkdm || !arch_clkdm->clkdm_clk_disable) in clkdm_clk_disable()
1169 pwrdm_lock(clkdm->pwrdm.ptr); in clkdm_clk_disable()
1172 if (clk && (__clk_get_enable_count(clk) == 0) && clkdm->usecount == 0) in clkdm_clk_disable()
1175 if (clkdm->usecount == 0) { in clkdm_clk_disable()
1176 pwrdm_unlock(clkdm->pwrdm.ptr); in clkdm_clk_disable()
1181 clkdm->usecount--; in clkdm_clk_disable()
1182 if (clkdm->usecount > 0) { in clkdm_clk_disable()
1183 pwrdm_unlock(clkdm->pwrdm.ptr); in clkdm_clk_disable()
1187 arch_clkdm->clkdm_clk_disable(clkdm); in clkdm_clk_disable()
1188 pwrdm_state_switch_nolock(clkdm->pwrdm.ptr); in clkdm_clk_disable()
1190 pr_debug("clockdomain: %s: disabled\n", clkdm->name); in clkdm_clk_disable()
1193 pwrdm_unlock(clkdm->pwrdm.ptr); in clkdm_clk_disable()
1213 int clkdm_hwmod_enable(struct clockdomain *clkdm, struct omap_hwmod *oh) in clkdm_hwmod_enable() argument
1227 return clkdm_clk_enable(clkdm, NULL); in clkdm_hwmod_enable()
1244 int clkdm_hwmod_disable(struct clockdomain *clkdm, struct omap_hwmod *oh) in clkdm_hwmod_disable() argument
1253 return clkdm_clk_disable(clkdm, NULL); in clkdm_hwmod_disable()
1262 static int _clkdm_save_context(struct clockdomain *clkdm, void *unused) in _clkdm_save_context() argument
1267 return arch_clkdm->clkdm_save_context(clkdm); in _clkdm_save_context()
1275 static int _clkdm_restore_context(struct clockdomain *clkdm, void *unused) in _clkdm_restore_context() argument
1280 return arch_clkdm->clkdm_restore_context(clkdm); in _clkdm_restore_context()