Searched refs:clk_wzrd (Results 1 - 1 of 1) sorted by relevance

/linux-4.4.14/drivers/staging/clocking-wizard/
H A Dclk-xlnx-clock-wizard.c52 * struct clk_wzrd:
63 struct clk_wzrd { struct
74 #define to_clk_wzrd(_nb) container_of(_nb, struct clk_wzrd, nb)
88 struct clk_wzrd *clk_wzrd = to_clk_wzrd(nb); clk_wzrd_clk_notifier() local
90 if (clk_wzrd->suspended) clk_wzrd_clk_notifier()
93 if (ndata->clk == clk_wzrd->clk_in1) clk_wzrd_clk_notifier()
94 max = clk_wzrd_max_freq[clk_wzrd->speed_grade - 1]; clk_wzrd_clk_notifier()
95 else if (ndata->clk == clk_wzrd->axi_clk) clk_wzrd_clk_notifier()
114 struct clk_wzrd *clk_wzrd = dev_get_drvdata(dev); clk_wzrd_suspend() local
116 clk_disable_unprepare(clk_wzrd->axi_clk); clk_wzrd_suspend()
117 clk_wzrd->suspended = true; clk_wzrd_suspend()
125 struct clk_wzrd *clk_wzrd = dev_get_drvdata(dev); clk_wzrd_resume() local
127 ret = clk_prepare_enable(clk_wzrd->axi_clk); clk_wzrd_resume()
133 clk_wzrd->suspended = false; clk_wzrd_resume()
147 struct clk_wzrd *clk_wzrd; clk_wzrd_probe() local
151 clk_wzrd = devm_kzalloc(&pdev->dev, sizeof(*clk_wzrd), GFP_KERNEL); clk_wzrd_probe()
152 if (!clk_wzrd) clk_wzrd_probe()
154 platform_set_drvdata(pdev, clk_wzrd); clk_wzrd_probe()
157 clk_wzrd->base = devm_ioremap_resource(&pdev->dev, mem); clk_wzrd_probe()
158 if (IS_ERR(clk_wzrd->base)) clk_wzrd_probe()
159 return PTR_ERR(clk_wzrd->base); clk_wzrd_probe()
161 ret = of_property_read_u32(np, "speed-grade", &clk_wzrd->speed_grade); clk_wzrd_probe()
163 if (clk_wzrd->speed_grade < 1 || clk_wzrd->speed_grade > 3) { clk_wzrd_probe()
165 clk_wzrd->speed_grade); clk_wzrd_probe()
166 clk_wzrd->speed_grade = 0; clk_wzrd_probe()
170 clk_wzrd->clk_in1 = devm_clk_get(&pdev->dev, "clk_in1"); clk_wzrd_probe()
171 if (IS_ERR(clk_wzrd->clk_in1)) { clk_wzrd_probe()
172 if (clk_wzrd->clk_in1 != ERR_PTR(-EPROBE_DEFER)) clk_wzrd_probe()
174 return PTR_ERR(clk_wzrd->clk_in1); clk_wzrd_probe()
177 clk_wzrd->axi_clk = devm_clk_get(&pdev->dev, "s_axi_aclk"); clk_wzrd_probe()
178 if (IS_ERR(clk_wzrd->axi_clk)) { clk_wzrd_probe()
179 if (clk_wzrd->axi_clk != ERR_PTR(-EPROBE_DEFER)) clk_wzrd_probe()
181 return PTR_ERR(clk_wzrd->axi_clk); clk_wzrd_probe()
183 ret = clk_prepare_enable(clk_wzrd->axi_clk); clk_wzrd_probe()
188 rate = clk_get_rate(clk_wzrd->axi_clk); clk_wzrd_probe()
197 reg = readl(clk_wzrd->base + WZRD_CLK_CFG_REG(0)) & clk_wzrd_probe()
199 reg |= readl(clk_wzrd->base + WZRD_CLK_CFG_REG(2)) & clk_wzrd_probe()
205 reg = (readl(clk_wzrd->base + WZRD_CLK_CFG_REG(0)) & clk_wzrd_probe()
212 clk_wzrd->clks_internal[wzrd_clk_mul] = clk_register_fixed_factor( clk_wzrd_probe()
214 __clk_get_name(clk_wzrd->clk_in1), clk_wzrd_probe()
217 if (IS_ERR(clk_wzrd->clks_internal[wzrd_clk_mul])) { clk_wzrd_probe()
219 ret = PTR_ERR(clk_wzrd->clks_internal[wzrd_clk_mul]); clk_wzrd_probe()
224 reg = (readl(clk_wzrd->base + WZRD_CLK_CFG_REG(0)) & clk_wzrd_probe()
232 clk_wzrd->clks_internal[wzrd_clk_mul_div] = clk_register_fixed_factor( clk_wzrd_probe()
234 __clk_get_name(clk_wzrd->clks_internal[wzrd_clk_mul]), clk_wzrd_probe()
236 if (IS_ERR(clk_wzrd->clks_internal[wzrd_clk_mul_div])) { clk_wzrd_probe()
238 ret = PTR_ERR(clk_wzrd->clks_internal[wzrd_clk_mul_div]); clk_wzrd_probe()
253 reg = readl(clk_wzrd->base + WZRD_CLK_CFG_REG(2) + i * 12); clk_wzrd_probe()
256 clk_wzrd->clkout[i] = clk_register_fixed_factor(&pdev->dev, clk_wzrd_probe()
258 if (IS_ERR(clk_wzrd->clkout[i])) { clk_wzrd_probe()
262 clk_unregister(clk_wzrd->clkout[j]); clk_wzrd_probe()
265 ret = PTR_ERR(clk_wzrd->clkout[i]); clk_wzrd_probe()
272 clk_wzrd->clk_data.clks = clk_wzrd->clkout; clk_wzrd_probe()
273 clk_wzrd->clk_data.clk_num = ARRAY_SIZE(clk_wzrd->clkout); clk_wzrd_probe()
274 of_clk_add_provider(np, of_clk_src_onecell_get, &clk_wzrd->clk_data); clk_wzrd_probe()
276 if (clk_wzrd->speed_grade) { clk_wzrd_probe()
277 clk_wzrd->nb.notifier_call = clk_wzrd_clk_notifier; clk_wzrd_probe()
279 ret = clk_notifier_register(clk_wzrd->clk_in1, clk_wzrd_probe()
280 &clk_wzrd->nb); clk_wzrd_probe()
285 ret = clk_notifier_register(clk_wzrd->axi_clk, &clk_wzrd->nb); clk_wzrd_probe()
294 clk_unregister(clk_wzrd->clks_internal[1]); clk_wzrd_probe()
297 clk_unregister(clk_wzrd->clks_internal[0]); clk_wzrd_probe()
299 clk_disable_unprepare(clk_wzrd->axi_clk); clk_wzrd_probe()
307 struct clk_wzrd *clk_wzrd = platform_get_drvdata(pdev); clk_wzrd_remove() local
312 clk_unregister(clk_wzrd->clkout[i]); clk_wzrd_remove()
314 clk_unregister(clk_wzrd->clks_internal[i]); clk_wzrd_remove()
316 if (clk_wzrd->speed_grade) { clk_wzrd_remove()
317 clk_notifier_unregister(clk_wzrd->axi_clk, &clk_wzrd->nb); clk_wzrd_remove()
318 clk_notifier_unregister(clk_wzrd->clk_in1, &clk_wzrd->nb); clk_wzrd_remove()
321 clk_disable_unprepare(clk_wzrd->axi_clk); clk_wzrd_remove()

Completed in 67 milliseconds