Lines Matching +full:mux +full:-

1 // SPDX-License-Identifier: GPL-2.0
13 #include <linux/clk-provider.h>
16 #include "clk-krait.h"
48 struct krait_mux_clk *mux = container_of(nb, struct krait_mux_clk, in krait_notifier_cb() local
52 mux->old_index = krait_mux_clk_ops.get_parent(&mux->hw); in krait_notifier_cb()
53 ret = krait_mux_clk_ops.set_parent(&mux->hw, mux->safe_sel); in krait_notifier_cb()
54 mux->reparent = false; in krait_notifier_cb()
61 if (!mux->reparent) in krait_notifier_cb()
62 ret = krait_mux_clk_ops.set_parent(&mux->hw, in krait_notifier_cb()
63 mux->old_index); in krait_notifier_cb()
70 struct krait_mux_clk *mux) in krait_notifier_register() argument
74 mux->clk_nb.notifier_call = krait_notifier_cb; in krait_notifier_register()
75 ret = devm_clk_notifier_register(dev, clk, &mux->clk_nb); in krait_notifier_register()
98 return ERR_PTR(-ENOMEM); in krait_add_div()
100 div->width = 2; in krait_add_div()
101 div->shift = 6; in krait_add_div()
102 div->lpl = id >= 0; in krait_add_div()
103 div->offset = offset; in krait_add_div()
104 div->hw.init = &init; in krait_add_div()
108 return ERR_PTR(-ENOMEM); in krait_add_div()
113 clk = ERR_PTR(-ENOMEM); in krait_add_div()
120 ret = devm_clk_hw_register(dev, &div->hw); in krait_add_div()
126 clk = &div->hw; in krait_add_div()
128 /* clk-krait ignore any rate change if mux is not flagged as enabled */ in krait_add_div()
131 clk_prepare_enable(div->hw.clk); in krait_add_div()
133 clk_prepare_enable(div->hw.clk); in krait_add_div()
148 struct krait_mux_clk *mux; in krait_add_sec_mux() local
162 mux = devm_kzalloc(dev, sizeof(*mux), GFP_KERNEL); in krait_add_sec_mux()
163 if (!mux) in krait_add_sec_mux()
164 return ERR_PTR(-ENOMEM); in krait_add_sec_mux()
166 mux->offset = offset; in krait_add_sec_mux()
167 mux->lpl = id >= 0; in krait_add_sec_mux()
168 mux->mask = 0x3; in krait_add_sec_mux()
169 mux->shift = 2; in krait_add_sec_mux()
170 mux->parent_map = sec_mux_map; in krait_add_sec_mux()
171 mux->hw.init = &init; in krait_add_sec_mux()
172 mux->safe_sel = 0; in krait_add_sec_mux()
174 /* Checking for qcom,krait-cc-v1 or qcom,krait-cc-v2 is not in krait_add_sec_mux()
180 mux->disable_sec_src_gating = true; in krait_add_sec_mux()
184 return ERR_PTR(-ENOMEM); in krait_add_sec_mux()
189 clk = ERR_PTR(-ENOMEM); in krait_add_sec_mux()
198 ret = devm_clk_hw_register(dev, &mux->hw); in krait_add_sec_mux()
204 clk = &mux->hw; in krait_add_sec_mux()
206 ret = krait_notifier_register(dev, mux->hw.clk, mux); in krait_add_sec_mux()
212 /* clk-krait ignore any rate change if mux is not flagged as enabled */ in krait_add_sec_mux()
215 clk_prepare_enable(mux->hw.clk); in krait_add_sec_mux()
217 clk_prepare_enable(mux->hw.clk); in krait_add_sec_mux()
232 struct krait_mux_clk *mux; in krait_add_pri_mux() local
243 mux = devm_kzalloc(dev, sizeof(*mux), GFP_KERNEL); in krait_add_pri_mux()
244 if (!mux) in krait_add_pri_mux()
245 return ERR_PTR(-ENOMEM); in krait_add_pri_mux()
247 mux->mask = 0x3; in krait_add_pri_mux()
248 mux->shift = 0; in krait_add_pri_mux()
249 mux->offset = offset; in krait_add_pri_mux()
250 mux->lpl = id >= 0; in krait_add_pri_mux()
251 mux->parent_map = pri_mux_map; in krait_add_pri_mux()
252 mux->hw.init = &init; in krait_add_pri_mux()
253 mux->safe_sel = 2; in krait_add_pri_mux()
257 return ERR_PTR(-ENOMEM); in krait_add_pri_mux()
261 clk = ERR_PTR(-ENOMEM); in krait_add_pri_mux()
271 ret = devm_clk_hw_register(dev, &mux->hw); in krait_add_pri_mux()
277 clk = &mux->hw; in krait_add_pri_mux()
279 ret = krait_notifier_register(dev, mux->hw.clk, mux); in krait_add_pri_mux()
302 return ERR_PTR(-ENOMEM); in krait_add_clks()
329 unsigned int idx = clkspec->args[0]; in krait_of_get()
334 return ERR_PTR(-EINVAL); in krait_of_get()
337 return clks[idx] ? : ERR_PTR(-ENODEV); in krait_of_get()
341 { .compatible = "qcom,krait-cc-v1", (void *)1UL },
342 { .compatible = "qcom,krait-cc-v2" },
349 struct device *dev = &pdev->dev; in krait_cc_probe()
352 struct clk_hw *mux, *l2_pri_mux; in krait_cc_probe() local
371 return -ENOMEM; in krait_cc_probe()
374 mux = krait_add_clks(dev, cpu, unique_aux); in krait_cc_probe()
375 if (IS_ERR(mux)) in krait_cc_probe()
376 return PTR_ERR(mux); in krait_cc_probe()
377 clks[cpu] = mux->clk; in krait_cc_probe()
380 l2_pri_mux = krait_add_clks(dev, -1, unique_aux); in krait_cc_probe()
383 clks[l2_mux] = l2_pri_mux->clk; in krait_cc_probe()
405 * secondary mux is not sourcing off of QSB. The rate is then set to in krait_cc_probe()
433 of_clk_add_provider(dev->of_node, krait_of_get, clks); in krait_cc_probe()
441 .name = "krait-cc",
449 MODULE_ALIAS("platform:krait-cc");