Lines Matching +full:clk +full:- +full:source
1 // SPDX-License-Identifier: GPL-2.0+
8 #include <clk-uclass.h>
23 static ulong at91_usb_clk_get_rate(struct clk *clk) in at91_usb_clk_get_rate() argument
25 struct pmc_platdata *plat = dev_get_platdata(clk->dev); in at91_usb_clk_get_rate()
26 struct at91_pmc *pmc = plat->reg_base; in at91_usb_clk_get_rate()
27 struct clk source; in at91_usb_clk_get_rate() local
32 tmp = readl(&pmc->pcr); in at91_usb_clk_get_rate()
37 ret = clk_get_by_index(clk->dev, source_index, &source); in at91_usb_clk_get_rate()
41 return clk_get_rate(&source) / (usbdiv + 1); in at91_usb_clk_get_rate()
44 static ulong at91_usb_clk_set_rate(struct clk *clk, ulong rate) in at91_usb_clk_set_rate() argument
46 struct pmc_platdata *plat = dev_get_platdata(clk->dev); in at91_usb_clk_set_rate()
47 struct at91_pmc *pmc = plat->reg_base; in at91_usb_clk_set_rate()
48 struct at91_usb_clk_priv *priv = dev_get_priv(clk->dev); in at91_usb_clk_set_rate()
49 struct clk source, best_source; in at91_usb_clk_set_rate() local
51 int tmp_diff, best_diff = -1; in at91_usb_clk_set_rate()
58 for (i = 0; i < priv->num_clksource; i++) { in at91_usb_clk_set_rate()
59 ret = clk_get_by_index(clk->dev, i, &source); in at91_usb_clk_set_rate()
63 source_rate = clk_get_rate(&source); in at91_usb_clk_set_rate()
69 tmp_diff = abs(rate - tmp_rate); in at91_usb_clk_set_rate()
75 best_div = div - 1; in at91_usb_clk_set_rate()
76 best_source = source; in at91_usb_clk_set_rate()
89 best_source.dev->name, best_rate, best_div); in at91_usb_clk_set_rate()
97 writel(tmp, &pmc->usb); in at91_usb_clk_set_rate()
113 num_clksource = fdtdec_get_int_array_count(gd->fdt_blob, in at91_usb_clk_ofdata_to_platdata()
119 return -1; in at91_usb_clk_ofdata_to_platdata()
121 priv->num_clksource = num_clksource; in at91_usb_clk_ofdata_to_platdata()
132 { .compatible = "atmel,at91sam9x5-clk-usb" },
137 .name = "at91-usb-clk",