Lines Matching +full:- +full:- +full:init
1 // SPDX-License-Identifier: GPL-2.0-or-later
6 #include <linux/clk-provider.h>
50 regmap_read(usb->regmap, AT91_PMC_USB, &usbr); in at91sam9x5_clk_usb_recalc_rate()
60 long best_rate = -EINVAL; in at91sam9x5_clk_usb_determine_rate()
62 int best_diff = -1; in at91sam9x5_clk_usb_determine_rate()
76 tmp_parent_rate = req->rate * div; in at91sam9x5_clk_usb_determine_rate()
83 if (tmp_rate < req->rate) in at91sam9x5_clk_usb_determine_rate()
84 tmp_diff = req->rate - tmp_rate; in at91sam9x5_clk_usb_determine_rate()
86 tmp_diff = tmp_rate - req->rate; in at91sam9x5_clk_usb_determine_rate()
91 req->best_parent_rate = tmp_parent_rate; in at91sam9x5_clk_usb_determine_rate()
92 req->best_parent_hw = parent; in at91sam9x5_clk_usb_determine_rate()
95 if (!best_diff || tmp_rate < req->rate) in at91sam9x5_clk_usb_determine_rate()
106 req->rate = best_rate; in at91sam9x5_clk_usb_determine_rate()
114 if (index >= usb->num_parents) in at91sam9x5_clk_usb_set_parent()
115 return -EINVAL; in at91sam9x5_clk_usb_set_parent()
117 regmap_update_bits(usb->regmap, AT91_PMC_USB, usb->usbs_mask, index); in at91sam9x5_clk_usb_set_parent()
127 regmap_read(usb->regmap, AT91_PMC_USB, &usbr); in at91sam9x5_clk_usb_get_parent()
129 return usbr & usb->usbs_mask; in at91sam9x5_clk_usb_get_parent()
139 return -EINVAL; in at91sam9x5_clk_usb_set_rate()
143 return -EINVAL; in at91sam9x5_clk_usb_set_rate()
145 regmap_update_bits(usb->regmap, AT91_PMC_USB, AT91_PMC_OHCIUSBDIV, in at91sam9x5_clk_usb_set_rate()
146 (div - 1) << SAM9X5_USB_DIV_SHIFT); in at91sam9x5_clk_usb_set_rate()
163 regmap_update_bits(usb->regmap, AT91_PMC_USB, AT91_PMC_USBS, in at91sam9n12_clk_usb_enable()
173 regmap_update_bits(usb->regmap, AT91_PMC_USB, AT91_PMC_USBS, 0); in at91sam9n12_clk_usb_disable()
181 regmap_read(usb->regmap, AT91_PMC_USB, &usbr); in at91sam9n12_clk_usb_is_enabled()
202 struct clk_init_data init; in _at91sam9x5_clk_register_usb() local
207 return ERR_PTR(-ENOMEM); in _at91sam9x5_clk_register_usb()
209 init.name = name; in _at91sam9x5_clk_register_usb()
210 init.ops = &at91sam9x5_usb_ops; in _at91sam9x5_clk_register_usb()
211 init.parent_names = parent_names; in _at91sam9x5_clk_register_usb()
212 init.num_parents = num_parents; in _at91sam9x5_clk_register_usb()
213 init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE | in _at91sam9x5_clk_register_usb()
216 usb->hw.init = &init; in _at91sam9x5_clk_register_usb()
217 usb->regmap = regmap; in _at91sam9x5_clk_register_usb()
218 usb->usbs_mask = usbs_mask; in _at91sam9x5_clk_register_usb()
219 usb->num_parents = num_parents; in _at91sam9x5_clk_register_usb()
221 hw = &usb->hw; in _at91sam9x5_clk_register_usb()
222 ret = clk_hw_register(NULL, &usb->hw); in _at91sam9x5_clk_register_usb()
253 struct clk_init_data init; in at91sam9n12_clk_register_usb() local
258 return ERR_PTR(-ENOMEM); in at91sam9n12_clk_register_usb()
260 init.name = name; in at91sam9n12_clk_register_usb()
261 init.ops = &at91sam9n12_usb_ops; in at91sam9n12_clk_register_usb()
262 init.parent_names = &parent_name; in at91sam9n12_clk_register_usb()
263 init.num_parents = 1; in at91sam9n12_clk_register_usb()
264 init.flags = CLK_SET_RATE_GATE | CLK_SET_RATE_PARENT; in at91sam9n12_clk_register_usb()
266 usb->hw.init = &init; in at91sam9n12_clk_register_usb()
267 usb->regmap = regmap; in at91sam9n12_clk_register_usb()
269 hw = &usb->hw; in at91sam9n12_clk_register_usb()
270 ret = clk_hw_register(NULL, &usb->hw); in at91sam9n12_clk_register_usb()
286 regmap_read(usb->regmap, AT91_CKGR_PLLBR, &pllbr); in at91rm9200_clk_usb_recalc_rate()
289 if (usb->divisors[usbdiv]) in at91rm9200_clk_usb_recalc_rate()
290 return parent_rate / usb->divisors[usbdiv]; in at91rm9200_clk_usb_recalc_rate()
301 int bestdiff = -1; in at91rm9200_clk_usb_round_rate()
309 if (!usb->divisors[i]) in at91rm9200_clk_usb_round_rate()
312 tmp_parent_rate = rate * usb->divisors[i]; in at91rm9200_clk_usb_round_rate()
314 tmprate = DIV_ROUND_CLOSEST(tmp_parent_rate, usb->divisors[i]); in at91rm9200_clk_usb_round_rate()
316 tmpdiff = rate - tmprate; in at91rm9200_clk_usb_round_rate()
318 tmpdiff = tmprate - rate; in at91rm9200_clk_usb_round_rate()
341 return -EINVAL; in at91rm9200_clk_usb_set_rate()
346 if (usb->divisors[i] == div) { in at91rm9200_clk_usb_set_rate()
347 regmap_update_bits(usb->regmap, AT91_CKGR_PLLBR, in at91rm9200_clk_usb_set_rate()
355 return -EINVAL; in at91rm9200_clk_usb_set_rate()
370 struct clk_init_data init; in at91rm9200_clk_register_usb() local
375 return ERR_PTR(-ENOMEM); in at91rm9200_clk_register_usb()
377 init.name = name; in at91rm9200_clk_register_usb()
378 init.ops = &at91rm9200_usb_ops; in at91rm9200_clk_register_usb()
379 init.parent_names = &parent_name; in at91rm9200_clk_register_usb()
380 init.num_parents = 1; in at91rm9200_clk_register_usb()
381 init.flags = CLK_SET_RATE_PARENT; in at91rm9200_clk_register_usb()
383 usb->hw.init = &init; in at91rm9200_clk_register_usb()
384 usb->regmap = regmap; in at91rm9200_clk_register_usb()
385 memcpy(usb->divisors, divisors, sizeof(usb->divisors)); in at91rm9200_clk_register_usb()
387 hw = &usb->hw; in at91rm9200_clk_register_usb()
388 ret = clk_hw_register(NULL, &usb->hw); in at91rm9200_clk_register_usb()