Lines Matching +full:clkout +full:- +full:disable
1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (C) 2012 ST-Ericsson SA
9 #include <linux/clk-provider.h>
10 #include <linux/mfd/dbx500-prcmu.h>
38 return prcmu_request_clock(clk->cg_sel, true); in clk_prcmu_prepare()
44 if (prcmu_request_clock(clk->cg_sel, false)) in clk_prcmu_unprepare()
45 pr_err("clk_prcmu: %s failed to disable %s.\n", __func__, in clk_prcmu_unprepare()
53 return prcmu_clock_rate(clk->cg_sel); in clk_prcmu_recalc_rate()
60 return prcmu_round_clock_rate(clk->cg_sel, rate); in clk_prcmu_round_rate()
67 return prcmu_set_clock_rate(clk->cg_sel, rate); in clk_prcmu_set_rate()
75 if (!clk->opp_requested) { in clk_prcmu_opp_prepare()
84 clk->opp_requested = 1; in clk_prcmu_opp_prepare()
87 err = prcmu_request_clock(clk->cg_sel, true); in clk_prcmu_opp_prepare()
91 clk->opp_requested = 0; in clk_prcmu_opp_prepare()
102 if (prcmu_request_clock(clk->cg_sel, false)) { in clk_prcmu_opp_unprepare()
103 pr_err("clk_prcmu: %s failed to disable %s.\n", __func__, in clk_prcmu_opp_unprepare()
108 if (clk->opp_requested) { in clk_prcmu_opp_unprepare()
111 clk->opp_requested = 0; in clk_prcmu_opp_unprepare()
120 if (!clk->opp_requested) { in clk_prcmu_opp_volt_prepare()
127 clk->opp_requested = 1; in clk_prcmu_opp_volt_prepare()
130 err = prcmu_request_clock(clk->cg_sel, true); in clk_prcmu_opp_volt_prepare()
133 clk->opp_requested = 0; in clk_prcmu_opp_volt_prepare()
144 if (prcmu_request_clock(clk->cg_sel, false)) { in clk_prcmu_opp_volt_unprepare()
145 pr_err("clk_prcmu: %s failed to disable %s.\n", __func__, in clk_prcmu_opp_volt_unprepare()
150 if (clk->opp_requested) { in clk_prcmu_opp_volt_unprepare()
152 clk->opp_requested = 0; in clk_prcmu_opp_volt_unprepare()
207 return ERR_PTR(-EINVAL); in clk_reg_prcmu()
212 return ERR_PTR(-ENOMEM); in clk_reg_prcmu()
214 clk->cg_sel = cg_sel; in clk_reg_prcmu()
215 clk->opp_requested = 0; in clk_reg_prcmu()
225 clk->hw.init = &clk_prcmu_init; in clk_reg_prcmu()
227 ret = clk_hw_register(NULL, &clk->hw); in clk_reg_prcmu()
231 return &clk->hw; in clk_reg_prcmu()
236 return ERR_PTR(-ENOMEM); in clk_reg_prcmu()
296 /* The clkout (external) clock is special and need special ops */
302 return prcmu_config_clkout(clk->clkout_id, clk->source, clk->divider); in clk_prcmu_clkout_prepare()
310 /* The clkout clock is disabled by dividing by 0 */ in clk_prcmu_clkout_unprepare()
311 ret = prcmu_config_clkout(clk->clkout_id, clk->source, 0); in clk_prcmu_clkout_unprepare()
313 pr_err("clk_prcmu: %s failed to disable %s\n", __func__, in clk_prcmu_clkout_unprepare()
322 return (parent_rate / clk->divider); in clk_prcmu_clkout_recalc_rate()
329 return clk->source; in clk_prcmu_clkout_get_parent()
336 clk->source = index; in clk_prcmu_clkout_set_parent()
364 return ERR_PTR(-EINVAL); in clk_reg_prcmu_clkout()
373 return ERR_PTR(-EINVAL); in clk_reg_prcmu_clkout()
378 return ERR_PTR(-ENOMEM); in clk_reg_prcmu_clkout()
380 clk->clkout_id = clkout_id; in clk_reg_prcmu_clkout()
381 clk->source = source; in clk_reg_prcmu_clkout()
382 clk->divider = divider; in clk_reg_prcmu_clkout()
389 clk->hw.init = &clk_prcmu_clkout_init; in clk_reg_prcmu_clkout()
391 ret = clk_hw_register(NULL, &clk->hw); in clk_reg_prcmu_clkout()
395 return &clk->hw; in clk_reg_prcmu_clkout()
399 return ERR_PTR(-ENOMEM); in clk_reg_prcmu_clkout()