Lines Matching +full:clk +full:- +full:gate

1 // SPDX-License-Identifier: GPL-2.0-or-later
11 #include <linux/clk.h>
12 #include <linux/clk-provider.h>
15 #include "clk.h"
29 struct rockchip_gate_grf *gate = to_gate_grf(hw); in rockchip_gate_grf_enable() local
30 u32 val = !(gate->flags & CLK_GATE_SET_TO_DISABLE) ? BIT(gate->shift) : 0; in rockchip_gate_grf_enable()
31 u32 hiword = ((gate->flags & CLK_GATE_HIWORD_MASK) ? 1 : 0) << (gate->shift + 16); in rockchip_gate_grf_enable()
34 ret = regmap_update_bits(gate->regmap, gate->reg, in rockchip_gate_grf_enable()
35 hiword | BIT(gate->shift), hiword | val); in rockchip_gate_grf_enable()
42 struct rockchip_gate_grf *gate = to_gate_grf(hw); in rockchip_gate_grf_disable() local
43 u32 val = !(gate->flags & CLK_GATE_SET_TO_DISABLE) ? 0 : BIT(gate->shift); in rockchip_gate_grf_disable()
44 u32 hiword = ((gate->flags & CLK_GATE_HIWORD_MASK) ? 1 : 0) << (gate->shift + 16); in rockchip_gate_grf_disable()
46 regmap_update_bits(gate->regmap, gate->reg, in rockchip_gate_grf_disable()
47 hiword | BIT(gate->shift), hiword | val); in rockchip_gate_grf_disable()
52 struct rockchip_gate_grf *gate = to_gate_grf(hw); in rockchip_gate_grf_is_enabled() local
53 bool invert = !!(gate->flags & CLK_GATE_SET_TO_DISABLE); in rockchip_gate_grf_is_enabled()
56 ret = regmap_test_bits(gate->regmap, gate->reg, BIT(gate->shift)); in rockchip_gate_grf_is_enabled()
60 return invert ? 1 - ret : ret; in rockchip_gate_grf_is_enabled()
70 struct clk *rockchip_clk_register_gate_grf(const char *name, in rockchip_clk_register_gate_grf()
75 struct rockchip_gate_grf *gate; in rockchip_clk_register_gate_grf() local
77 struct clk *clk; in rockchip_clk_register_gate_grf() local
81 return ERR_PTR(-EOPNOTSUPP); in rockchip_clk_register_gate_grf()
84 gate = kzalloc(sizeof(*gate), GFP_KERNEL); in rockchip_clk_register_gate_grf()
85 if (!gate) in rockchip_clk_register_gate_grf()
86 return ERR_PTR(-ENOMEM); in rockchip_clk_register_gate_grf()
94 gate->hw.init = &init; in rockchip_clk_register_gate_grf()
95 gate->regmap = regmap; in rockchip_clk_register_gate_grf()
96 gate->reg = reg; in rockchip_clk_register_gate_grf()
97 gate->shift = shift; in rockchip_clk_register_gate_grf()
98 gate->flags = gate_flags; in rockchip_clk_register_gate_grf()
100 clk = clk_register(NULL, &gate->hw); in rockchip_clk_register_gate_grf()
101 if (IS_ERR(clk)) in rockchip_clk_register_gate_grf()
102 kfree(gate); in rockchip_clk_register_gate_grf()
104 return clk; in rockchip_clk_register_gate_grf()