• Home
  • Raw
  • Download

Lines Matching +full:composite +full:- +full:in

8  * This program is distributed in the hope it will be useful, but WITHOUT
18 #include <linux/clk-provider.h>
24 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_get_parent() local
25 const struct clk_ops *mux_ops = composite->mux_ops; in clk_composite_get_parent()
26 struct clk_hw *mux_hw = composite->mux_hw; in clk_composite_get_parent()
30 return mux_ops->get_parent(mux_hw); in clk_composite_get_parent()
35 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_set_parent() local
36 const struct clk_ops *mux_ops = composite->mux_ops; in clk_composite_set_parent()
37 struct clk_hw *mux_hw = composite->mux_hw; in clk_composite_set_parent()
41 return mux_ops->set_parent(mux_hw, index); in clk_composite_set_parent()
47 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_recalc_rate() local
48 const struct clk_ops *rate_ops = composite->rate_ops; in clk_composite_recalc_rate()
49 struct clk_hw *rate_hw = composite->rate_hw; in clk_composite_recalc_rate()
53 return rate_ops->recalc_rate(rate_hw, parent_rate); in clk_composite_recalc_rate()
59 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_determine_rate() local
60 const struct clk_ops *rate_ops = composite->rate_ops; in clk_composite_determine_rate()
61 const struct clk_ops *mux_ops = composite->mux_ops; in clk_composite_determine_rate()
62 struct clk_hw *rate_hw = composite->rate_hw; in clk_composite_determine_rate()
63 struct clk_hw *mux_hw = composite->mux_hw; in clk_composite_determine_rate()
72 if (rate_hw && rate_ops && rate_ops->determine_rate) { in clk_composite_determine_rate()
74 return rate_ops->determine_rate(rate_hw, req); in clk_composite_determine_rate()
75 } else if (rate_hw && rate_ops && rate_ops->round_rate && in clk_composite_determine_rate()
76 mux_hw && mux_ops && mux_ops->set_parent) { in clk_composite_determine_rate()
77 req->best_parent_hw = NULL; in clk_composite_determine_rate()
81 req->best_parent_hw = parent; in clk_composite_determine_rate()
82 req->best_parent_rate = clk_hw_get_rate(parent); in clk_composite_determine_rate()
84 rate = rate_ops->round_rate(rate_hw, req->rate, in clk_composite_determine_rate()
85 &req->best_parent_rate); in clk_composite_determine_rate()
89 req->rate = rate; in clk_composite_determine_rate()
100 tmp_rate = rate_ops->round_rate(rate_hw, req->rate, in clk_composite_determine_rate()
105 rate_diff = abs(req->rate - tmp_rate); in clk_composite_determine_rate()
107 if (!rate_diff || !req->best_parent_hw in clk_composite_determine_rate()
109 req->best_parent_hw = parent; in clk_composite_determine_rate()
110 req->best_parent_rate = parent_rate; in clk_composite_determine_rate()
119 req->rate = best_rate; in clk_composite_determine_rate()
121 } else if (mux_hw && mux_ops && mux_ops->determine_rate) { in clk_composite_determine_rate()
123 return mux_ops->determine_rate(mux_hw, req); in clk_composite_determine_rate()
126 return -EINVAL; in clk_composite_determine_rate()
133 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_round_rate() local
134 const struct clk_ops *rate_ops = composite->rate_ops; in clk_composite_round_rate()
135 struct clk_hw *rate_hw = composite->rate_hw; in clk_composite_round_rate()
139 return rate_ops->round_rate(rate_hw, rate, prate); in clk_composite_round_rate()
145 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_set_rate() local
146 const struct clk_ops *rate_ops = composite->rate_ops; in clk_composite_set_rate()
147 struct clk_hw *rate_hw = composite->rate_hw; in clk_composite_set_rate()
151 return rate_ops->set_rate(rate_hw, rate, parent_rate); in clk_composite_set_rate()
159 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_set_rate_and_parent() local
160 const struct clk_ops *rate_ops = composite->rate_ops; in clk_composite_set_rate_and_parent()
161 const struct clk_ops *mux_ops = composite->mux_ops; in clk_composite_set_rate_and_parent()
162 struct clk_hw *rate_hw = composite->rate_hw; in clk_composite_set_rate_and_parent()
163 struct clk_hw *mux_hw = composite->mux_hw; in clk_composite_set_rate_and_parent()
169 temp_rate = rate_ops->recalc_rate(rate_hw, parent_rate); in clk_composite_set_rate_and_parent()
171 rate_ops->set_rate(rate_hw, rate, parent_rate); in clk_composite_set_rate_and_parent()
172 mux_ops->set_parent(mux_hw, index); in clk_composite_set_rate_and_parent()
174 mux_ops->set_parent(mux_hw, index); in clk_composite_set_rate_and_parent()
175 rate_ops->set_rate(rate_hw, rate, parent_rate); in clk_composite_set_rate_and_parent()
183 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_is_enabled() local
184 const struct clk_ops *gate_ops = composite->gate_ops; in clk_composite_is_enabled()
185 struct clk_hw *gate_hw = composite->gate_hw; in clk_composite_is_enabled()
189 return gate_ops->is_enabled(gate_hw); in clk_composite_is_enabled()
194 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_enable() local
195 const struct clk_ops *gate_ops = composite->gate_ops; in clk_composite_enable()
196 struct clk_hw *gate_hw = composite->gate_hw; in clk_composite_enable()
200 return gate_ops->enable(gate_hw); in clk_composite_enable()
205 struct clk_composite *composite = to_clk_composite(hw); in clk_composite_disable() local
206 const struct clk_ops *gate_ops = composite->gate_ops; in clk_composite_disable()
207 struct clk_hw *gate_hw = composite->gate_hw; in clk_composite_disable()
211 gate_ops->disable(gate_hw); in clk_composite_disable()
223 struct clk_composite *composite; in clk_hw_register_composite() local
227 composite = kzalloc(sizeof(*composite), GFP_KERNEL); in clk_hw_register_composite()
228 if (!composite) in clk_hw_register_composite()
229 return ERR_PTR(-ENOMEM); in clk_hw_register_composite()
235 hw = &composite->hw; in clk_hw_register_composite()
237 clk_composite_ops = &composite->ops; in clk_hw_register_composite()
240 if (!mux_ops->get_parent) { in clk_hw_register_composite()
241 hw = ERR_PTR(-EINVAL); in clk_hw_register_composite()
245 composite->mux_hw = mux_hw; in clk_hw_register_composite()
246 composite->mux_ops = mux_ops; in clk_hw_register_composite()
247 clk_composite_ops->get_parent = clk_composite_get_parent; in clk_hw_register_composite()
248 if (mux_ops->set_parent) in clk_hw_register_composite()
249 clk_composite_ops->set_parent = clk_composite_set_parent; in clk_hw_register_composite()
250 if (mux_ops->determine_rate) in clk_hw_register_composite()
251 clk_composite_ops->determine_rate = clk_composite_determine_rate; in clk_hw_register_composite()
255 if (!rate_ops->recalc_rate) { in clk_hw_register_composite()
256 hw = ERR_PTR(-EINVAL); in clk_hw_register_composite()
259 clk_composite_ops->recalc_rate = clk_composite_recalc_rate; in clk_hw_register_composite()
261 if (rate_ops->determine_rate) in clk_hw_register_composite()
262 clk_composite_ops->determine_rate = in clk_hw_register_composite()
264 else if (rate_ops->round_rate) in clk_hw_register_composite()
265 clk_composite_ops->round_rate = in clk_hw_register_composite()
269 if (rate_ops->set_rate) { in clk_hw_register_composite()
270 if (rate_ops->determine_rate || rate_ops->round_rate) in clk_hw_register_composite()
271 clk_composite_ops->set_rate = in clk_hw_register_composite()
278 composite->rate_hw = rate_hw; in clk_hw_register_composite()
279 composite->rate_ops = rate_ops; in clk_hw_register_composite()
283 if (mux_ops->set_parent && rate_ops->set_rate) in clk_hw_register_composite()
284 clk_composite_ops->set_rate_and_parent = in clk_hw_register_composite()
289 if (!gate_ops->is_enabled || !gate_ops->enable || in clk_hw_register_composite()
290 !gate_ops->disable) { in clk_hw_register_composite()
291 hw = ERR_PTR(-EINVAL); in clk_hw_register_composite()
295 composite->gate_hw = gate_hw; in clk_hw_register_composite()
296 composite->gate_ops = gate_ops; in clk_hw_register_composite()
297 clk_composite_ops->is_enabled = clk_composite_is_enabled; in clk_hw_register_composite()
298 clk_composite_ops->enable = clk_composite_enable; in clk_hw_register_composite()
299 clk_composite_ops->disable = clk_composite_disable; in clk_hw_register_composite()
303 composite->hw.init = &init; in clk_hw_register_composite()
311 if (composite->mux_hw) in clk_hw_register_composite()
312 composite->mux_hw->clk = hw->clk; in clk_hw_register_composite()
314 if (composite->rate_hw) in clk_hw_register_composite()
315 composite->rate_hw->clk = hw->clk; in clk_hw_register_composite()
317 if (composite->gate_hw) in clk_hw_register_composite()
318 composite->gate_hw->clk = hw->clk; in clk_hw_register_composite()
323 kfree(composite); in clk_hw_register_composite()
341 return hw->clk; in clk_register_composite()
346 struct clk_composite *composite; in clk_unregister_composite() local
353 composite = to_clk_composite(hw); in clk_unregister_composite()
356 kfree(composite); in clk_unregister_composite()