Lines Matching +full:prcmu +full:- +full:clock
1 // SPDX-License-Identifier: GPL-2.0-only
3 * PRCMU clock implementation for ux500 platform.
5 * Copyright (C) 2012 ST-Ericsson SA
9 #include <linux/clk-provider.h>
10 #include <linux/mfd/dbx500-prcmu.h>
26 /* PRCMU clock operations. */
33 ret = prcmu_request_clock(clk->cg_sel, true); in clk_prcmu_prepare()
35 clk->is_prepared = 1; in clk_prcmu_prepare()
43 if (prcmu_request_clock(clk->cg_sel, false)) in clk_prcmu_unprepare()
47 clk->is_prepared = 0; in clk_prcmu_unprepare()
53 return clk->is_prepared; in clk_prcmu_is_prepared()
59 clk->is_enabled = 1; in clk_prcmu_enable()
66 clk->is_enabled = 0; in clk_prcmu_disable()
72 return clk->is_enabled; in clk_prcmu_is_enabled()
79 return prcmu_clock_rate(clk->cg_sel); in clk_prcmu_recalc_rate()
86 return prcmu_round_clock_rate(clk->cg_sel, rate); in clk_prcmu_round_rate()
93 return prcmu_set_clock_rate(clk->cg_sel, rate); in clk_prcmu_set_rate()
101 if (!clk->opp_requested) { in clk_prcmu_opp_prepare()
110 clk->opp_requested = 1; in clk_prcmu_opp_prepare()
113 err = prcmu_request_clock(clk->cg_sel, true); in clk_prcmu_opp_prepare()
117 clk->opp_requested = 0; in clk_prcmu_opp_prepare()
121 clk->is_prepared = 1; in clk_prcmu_opp_prepare()
129 if (prcmu_request_clock(clk->cg_sel, false)) { in clk_prcmu_opp_unprepare()
135 if (clk->opp_requested) { in clk_prcmu_opp_unprepare()
138 clk->opp_requested = 0; in clk_prcmu_opp_unprepare()
141 clk->is_prepared = 0; in clk_prcmu_opp_unprepare()
149 if (!clk->opp_requested) { in clk_prcmu_opp_volt_prepare()
156 clk->opp_requested = 1; in clk_prcmu_opp_volt_prepare()
159 err = prcmu_request_clock(clk->cg_sel, true); in clk_prcmu_opp_volt_prepare()
162 clk->opp_requested = 0; in clk_prcmu_opp_volt_prepare()
166 clk->is_prepared = 1; in clk_prcmu_opp_volt_prepare()
174 if (prcmu_request_clock(clk->cg_sel, false)) { in clk_prcmu_opp_volt_unprepare()
180 if (clk->opp_requested) { in clk_prcmu_opp_volt_unprepare()
182 clk->opp_requested = 0; in clk_prcmu_opp_volt_unprepare()
185 clk->is_prepared = 0; in clk_prcmu_opp_volt_unprepare()
257 return ERR_PTR(-EINVAL); in clk_reg_prcmu()
262 return ERR_PTR(-ENOMEM); in clk_reg_prcmu()
264 clk->cg_sel = cg_sel; in clk_reg_prcmu()
265 clk->is_prepared = 1; in clk_reg_prcmu()
266 clk->is_enabled = 1; in clk_reg_prcmu()
267 clk->opp_requested = 0; in clk_reg_prcmu()
277 clk->hw.init = &clk_prcmu_init; in clk_reg_prcmu()
279 clk_reg = clk_register(NULL, &clk->hw); in clk_reg_prcmu()
288 return ERR_PTR(-ENOMEM); in clk_reg_prcmu()