Lines Matching +full:clk +full:- +full:source

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>
14 #include "clk.h"
28 u8 source; member
36 struct clk_prcmu *clk = to_clk_prcmu(hw); in clk_prcmu_prepare() local
38 return prcmu_request_clock(clk->cg_sel, true); in clk_prcmu_prepare()
43 struct clk_prcmu *clk = to_clk_prcmu(hw); in clk_prcmu_unprepare() local
44 if (prcmu_request_clock(clk->cg_sel, false)) in clk_prcmu_unprepare()
52 struct clk_prcmu *clk = to_clk_prcmu(hw); in clk_prcmu_recalc_rate() local
53 return prcmu_clock_rate(clk->cg_sel); in clk_prcmu_recalc_rate()
59 struct clk_prcmu *clk = to_clk_prcmu(hw); in clk_prcmu_round_rate() local
60 return prcmu_round_clock_rate(clk->cg_sel, rate); in clk_prcmu_round_rate()
66 struct clk_prcmu *clk = to_clk_prcmu(hw); in clk_prcmu_set_rate() local
67 return prcmu_set_clock_rate(clk->cg_sel, rate); in clk_prcmu_set_rate()
73 struct clk_prcmu *clk = to_clk_prcmu(hw); in clk_prcmu_opp_prepare() local
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()
100 struct clk_prcmu *clk = to_clk_prcmu(hw); in clk_prcmu_opp_unprepare() local
102 if (prcmu_request_clock(clk->cg_sel, false)) { 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()
118 struct clk_prcmu *clk = to_clk_prcmu(hw); in clk_prcmu_opp_volt_prepare() local
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()
142 struct clk_prcmu *clk = to_clk_prcmu(hw); in clk_prcmu_opp_volt_unprepare() local
144 if (prcmu_request_clock(clk->cg_sel, false)) { 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()
201 struct clk_prcmu *clk; in clk_reg_prcmu() local
207 return ERR_PTR(-EINVAL); in clk_reg_prcmu()
210 clk = kzalloc(sizeof(*clk), GFP_KERNEL); in clk_reg_prcmu()
211 if (!clk) 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()
234 kfree(clk); in clk_reg_prcmu()
235 pr_err("clk_prcmu: %s failed to register clk\n", __func__); in clk_reg_prcmu()
236 return ERR_PTR(-ENOMEM); in clk_reg_prcmu()
300 struct clk_prcmu_clkout *clk = to_clk_prcmu_clkout(hw); in clk_prcmu_clkout_prepare() local
302 return prcmu_config_clkout(clk->clkout_id, clk->source, clk->divider); in clk_prcmu_clkout_prepare()
307 struct clk_prcmu_clkout *clk = to_clk_prcmu_clkout(hw); in clk_prcmu_clkout_unprepare() local
311 ret = prcmu_config_clkout(clk->clkout_id, clk->source, 0); in clk_prcmu_clkout_unprepare()
320 struct clk_prcmu_clkout *clk = to_clk_prcmu_clkout(hw); in clk_prcmu_clkout_recalc_rate() local
322 return (parent_rate / clk->divider); in clk_prcmu_clkout_recalc_rate()
327 struct clk_prcmu_clkout *clk = to_clk_prcmu_clkout(hw); in clk_prcmu_clkout_get_parent() local
329 return clk->source; in clk_prcmu_clkout_get_parent()
334 struct clk_prcmu_clkout *clk = to_clk_prcmu_clkout(hw); in clk_prcmu_clkout_set_parent() local
336 clk->source = index; in clk_prcmu_clkout_set_parent()
355 u8 source, u8 divider) in clk_reg_prcmu_clkout() argument
358 struct clk_prcmu_clkout *clk; in clk_reg_prcmu_clkout() local
365 return ERR_PTR(-EINVAL); in clk_reg_prcmu_clkout()
374 return ERR_PTR(-EINVAL); in clk_reg_prcmu_clkout()
377 clk = kzalloc(sizeof(*clk), GFP_KERNEL); in clk_reg_prcmu_clkout()
378 if (!clk) in clk_reg_prcmu_clkout()
379 return ERR_PTR(-ENOMEM); in clk_reg_prcmu_clkout()
381 clk->clkout_id = clkout_id; in clk_reg_prcmu_clkout()
382 clk->source = source; in clk_reg_prcmu_clkout()
383 clk->divider = divider; in clk_reg_prcmu_clkout()
390 clk->hw.init = &clk_prcmu_clkout_init; in clk_reg_prcmu_clkout()
392 ret = clk_hw_register(NULL, &clk->hw); in clk_reg_prcmu_clkout()
396 return &clk->hw; in clk_reg_prcmu_clkout()
398 kfree(clk); in clk_reg_prcmu_clkout()
399 pr_err("clk_prcmu_clkout: %s failed to register clk\n", __func__); in clk_reg_prcmu_clkout()
400 return ERR_PTR(-ENOMEM); in clk_reg_prcmu_clkout()