Lines Matching +full:hardware +full:- +full:voter
1 // SPDX-License-Identifier: GPL-2.0-only
7 #include <linux/clk-provider.h>
16 #include "clk-mtk.h"
17 #include "clk-gate.h"
36 regmap_read(cg->regmap, cg->gate->regs->sta_ofs, &val); in mtk_get_clockgating()
38 return val & BIT(cg->gate->shift); in mtk_get_clockgating()
55 regmap_write(cg->regmap, cg->gate->regs->set_ofs, BIT(cg->gate->shift)); in mtk_cg_set_bit()
62 regmap_write(cg->regmap, cg->gate->regs->clr_ofs, BIT(cg->gate->shift)); in mtk_cg_clr_bit()
69 regmap_set_bits(cg->regmap, cg->gate->regs->sta_ofs, in mtk_cg_set_bit_no_setclr()
70 BIT(cg->gate->shift)); in mtk_cg_set_bit_no_setclr()
77 regmap_clear_bits(cg->regmap, cg->gate->regs->sta_ofs, in mtk_cg_clr_bit_no_setclr()
78 BIT(cg->gate->shift)); in mtk_cg_clr_bit_no_setclr()
110 regmap_write(cg->regmap_hwv, in mtk_cg_hwv_set_en()
111 enable ? cg->gate->hwv_regs->set_ofs : in mtk_cg_hwv_set_en()
112 cg->gate->hwv_regs->clr_ofs, in mtk_cg_hwv_set_en()
113 BIT(cg->gate->shift)); in mtk_cg_hwv_set_en()
115 return regmap_read_poll_timeout_atomic(cg->regmap_hwv, in mtk_cg_hwv_set_en()
116 cg->gate->hwv_regs->sta_ofs, val, in mtk_cg_hwv_set_en()
117 val & BIT(cg->gate->shift), 0, in mtk_cg_hwv_set_en()
217 return ERR_PTR(-ENOMEM); in mtk_clk_register_gate()
219 init.name = gate->name; in mtk_clk_register_gate()
220 init.flags = gate->flags | CLK_SET_RATE_PARENT; in mtk_clk_register_gate()
221 init.parent_names = gate->parent_name ? &gate->parent_name : NULL; in mtk_clk_register_gate()
222 init.num_parents = gate->parent_name ? 1 : 0; in mtk_clk_register_gate()
223 init.ops = gate->ops; in mtk_clk_register_gate()
226 dev, -ENXIO, in mtk_clk_register_gate()
227 "regmap not found for hardware voter clocks\n"); in mtk_clk_register_gate()
229 cg->regmap = regmap; in mtk_clk_register_gate()
230 cg->regmap_hwv = regmap_hwv; in mtk_clk_register_gate()
231 cg->gate = gate; in mtk_clk_register_gate()
232 cg->hw.init = &init; in mtk_clk_register_gate()
234 ret = clk_hw_register(dev, &cg->hw); in mtk_clk_register_gate()
240 return &cg->hw; in mtk_clk_register_gate()
265 return -ENOMEM; in mtk_clk_register_gates()
277 "Cannot find hardware voter regmap for %pOF\n", node); in mtk_clk_register_gates()
282 if (!IS_ERR_OR_NULL(clk_data->hws[gate->id])) { in mtk_clk_register_gates()
284 node, gate->id); in mtk_clk_register_gates()
291 pr_err("Failed to register clk %s: %pe\n", gate->name, in mtk_clk_register_gates()
296 clk_data->hws[gate->id] = hw; in mtk_clk_register_gates()
302 while (--i >= 0) { in mtk_clk_register_gates()
305 if (IS_ERR_OR_NULL(clk_data->hws[gate->id])) in mtk_clk_register_gates()
308 mtk_clk_unregister_gate(clk_data->hws[gate->id]); in mtk_clk_register_gates()
309 clk_data->hws[gate->id] = ERR_PTR(-ENOENT); in mtk_clk_register_gates()
324 for (i = num; i > 0; i--) { in mtk_clk_unregister_gates()
325 const struct mtk_gate *gate = &clks[i - 1]; in mtk_clk_unregister_gates()
327 if (IS_ERR_OR_NULL(clk_data->hws[gate->id])) in mtk_clk_unregister_gates()
330 mtk_clk_unregister_gate(clk_data->hws[gate->id]); in mtk_clk_unregister_gates()
331 clk_data->hws[gate->id] = ERR_PTR(-ENOENT); in mtk_clk_unregister_gates()