Lines Matching full:mux

13 #include "clk-mux.h"
22 struct mtk_clk_mux *mux = to_mtk_clk_mux(hw); in mtk_clk_mux_enable_setclr() local
25 if (mux->lock) in mtk_clk_mux_enable_setclr()
26 spin_lock_irqsave(mux->lock, flags); in mtk_clk_mux_enable_setclr()
28 __acquire(mux->lock); in mtk_clk_mux_enable_setclr()
30 regmap_write(mux->regmap, mux->data->clr_ofs, in mtk_clk_mux_enable_setclr()
31 BIT(mux->data->gate_shift)); in mtk_clk_mux_enable_setclr()
35 * not be effective yet. Set the update bit to ensure the mux gets in mtk_clk_mux_enable_setclr()
38 if (mux->reparent && mux->data->upd_shift >= 0) { in mtk_clk_mux_enable_setclr()
39 regmap_write(mux->regmap, mux->data->upd_ofs, in mtk_clk_mux_enable_setclr()
40 BIT(mux->data->upd_shift)); in mtk_clk_mux_enable_setclr()
41 mux->reparent = false; in mtk_clk_mux_enable_setclr()
44 if (mux->lock) in mtk_clk_mux_enable_setclr()
45 spin_unlock_irqrestore(mux->lock, flags); in mtk_clk_mux_enable_setclr()
47 __release(mux->lock); in mtk_clk_mux_enable_setclr()
54 struct mtk_clk_mux *mux = to_mtk_clk_mux(hw); in mtk_clk_mux_disable_setclr() local
56 regmap_write(mux->regmap, mux->data->set_ofs, in mtk_clk_mux_disable_setclr()
57 BIT(mux->data->gate_shift)); in mtk_clk_mux_disable_setclr()
62 struct mtk_clk_mux *mux = to_mtk_clk_mux(hw); in mtk_clk_mux_is_enabled() local
65 regmap_read(mux->regmap, mux->data->mux_ofs, &val); in mtk_clk_mux_is_enabled()
67 return (val & BIT(mux->data->gate_shift)) == 0; in mtk_clk_mux_is_enabled()
72 struct mtk_clk_mux *mux = to_mtk_clk_mux(hw); in mtk_clk_mux_get_parent() local
73 u32 mask = GENMASK(mux->data->mux_width - 1, 0); in mtk_clk_mux_get_parent()
76 regmap_read(mux->regmap, mux->data->mux_ofs, &val); in mtk_clk_mux_get_parent()
77 val = (val >> mux->data->mux_shift) & mask; in mtk_clk_mux_get_parent()
84 struct mtk_clk_mux *mux = to_mtk_clk_mux(hw); in mtk_clk_mux_set_parent_setclr_lock() local
85 u32 mask = GENMASK(mux->data->mux_width - 1, 0); in mtk_clk_mux_set_parent_setclr_lock()
89 if (mux->lock) in mtk_clk_mux_set_parent_setclr_lock()
90 spin_lock_irqsave(mux->lock, flags); in mtk_clk_mux_set_parent_setclr_lock()
92 __acquire(mux->lock); in mtk_clk_mux_set_parent_setclr_lock()
94 regmap_read(mux->regmap, mux->data->mux_ofs, &orig); in mtk_clk_mux_set_parent_setclr_lock()
95 val = (orig & ~(mask << mux->data->mux_shift)) in mtk_clk_mux_set_parent_setclr_lock()
96 | (index << mux->data->mux_shift); in mtk_clk_mux_set_parent_setclr_lock()
99 regmap_write(mux->regmap, mux->data->clr_ofs, in mtk_clk_mux_set_parent_setclr_lock()
100 mask << mux->data->mux_shift); in mtk_clk_mux_set_parent_setclr_lock()
101 regmap_write(mux->regmap, mux->data->set_ofs, in mtk_clk_mux_set_parent_setclr_lock()
102 index << mux->data->mux_shift); in mtk_clk_mux_set_parent_setclr_lock()
104 if (mux->data->upd_shift >= 0) { in mtk_clk_mux_set_parent_setclr_lock()
105 regmap_write(mux->regmap, mux->data->upd_ofs, in mtk_clk_mux_set_parent_setclr_lock()
106 BIT(mux->data->upd_shift)); in mtk_clk_mux_set_parent_setclr_lock()
107 mux->reparent = true; in mtk_clk_mux_set_parent_setclr_lock()
111 if (mux->lock) in mtk_clk_mux_set_parent_setclr_lock()
112 spin_unlock_irqrestore(mux->lock, flags); in mtk_clk_mux_set_parent_setclr_lock()
114 __release(mux->lock); in mtk_clk_mux_set_parent_setclr_lock()
132 static struct clk *mtk_clk_register_mux(const struct mtk_mux *mux, in mtk_clk_register_mux() argument
144 init.name = mux->name; in mtk_clk_register_mux()
145 init.flags = mux->flags | CLK_SET_RATE_PARENT; in mtk_clk_register_mux()
146 init.parent_names = mux->parent_names; in mtk_clk_register_mux()
147 init.num_parents = mux->num_parents; in mtk_clk_register_mux()
148 init.ops = mux->ops; in mtk_clk_register_mux()
151 clk_mux->data = mux; in mtk_clk_register_mux()
181 const struct mtk_mux *mux = &muxes[i]; in mtk_clk_register_muxes() local
183 if (IS_ERR_OR_NULL(clk_data->clks[mux->id])) { in mtk_clk_register_muxes()
184 clk = mtk_clk_register_mux(mux, regmap, lock); in mtk_clk_register_muxes()
188 mux->name, PTR_ERR(clk)); in mtk_clk_register_muxes()
192 clk_data->clks[mux->id] = clk; in mtk_clk_register_muxes()