clk_wzrd
clk_wzrd->clk_data.hws[0] = clk_wzrd_ver_register_divider
__clk_get_name(clk_wzrd->clk_in1), 0,
clk_wzrd->base, WZRD_CLK_CFG_REG(is_versal, 3),
edge = !!(readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 0)) &
regl = (readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 1)) &
regh = (readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 1)) &
regl = readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 51)) &
regl = readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 48)) &
clk_wzrd->clk_data.hws[0] = clk_wzrd_register_divider
__clk_get_name(clk_wzrd->clk_in1), 0,
clk_wzrd->base, WZRD_CLK_CFG_REG(is_versal, 3),
reg = readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 0));
clk_wzrd->clks_internal[wzrd_clk_mul] = devm_clk_hw_register_fixed_factor
__clk_get_name(clk_wzrd->clk_in1),
if (IS_ERR(clk_wzrd->clks_internal[wzrd_clk_mul])) {
return PTR_ERR(clk_wzrd->clks_internal[wzrd_clk_mul]);
edged = !!(readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 20)) &
regld = (readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 21)) &
reghd = (readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 21)) &
clk_mul_name = clk_hw_get_name(clk_wzrd->clks_internal[wzrd_clk_mul]);
clk_wzrd->clks_internal[wzrd_clk_mul_div] =
ctrl_reg = clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 0);
clk_wzrd->clks_internal[wzrd_clk_mul_div] = devm_clk_hw_register_divider
clk_hw_get_name(clk_wzrd->clks_internal[wzrd_clk_mul]),
if (IS_ERR(clk_wzrd->clks_internal[wzrd_clk_mul_div])) {
return PTR_ERR(clk_wzrd->clks_internal[wzrd_clk_mul_div]);
clk_wzrd->clk_data.hws[i] = clk_wzrd_ver_register_divider
clk_wzrd->base,
clk_wzrd->clk_data.hws[i] = clk_wzrd_register_divf
(dev, clkout_name, clk_name, flags, clk_wzrd->base,
clk_wzrd->clk_data.hws[i] = clk_wzrd_register_divider
(dev, clkout_name, clk_name, 0, clk_wzrd->base,
if (IS_ERR(clk_wzrd->clk_data.hws[i])) {
return PTR_ERR(clk_wzrd->clk_data.hws[i]);
struct clk_wzrd *clk_wzrd;
clk_wzrd = devm_kzalloc(&pdev->dev, struct_size(clk_wzrd, clk_data.hws, nr_outputs),
if (!clk_wzrd)
platform_set_drvdata(pdev, clk_wzrd);
clk_wzrd->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(clk_wzrd->base))
return PTR_ERR(clk_wzrd->base);
clk_wzrd->axi_clk = devm_clk_get_enabled(&pdev->dev, "s_axi_aclk");
if (IS_ERR(clk_wzrd->axi_clk))
return dev_err_probe(&pdev->dev, PTR_ERR(clk_wzrd->axi_clk),
rate = clk_get_rate(clk_wzrd->axi_clk);
ret = of_property_read_u32(np, "xlnx,speed-grade", &clk_wzrd->speed_grade);
if (clk_wzrd->speed_grade < 1 || clk_wzrd->speed_grade > 3) {
clk_wzrd->speed_grade);
clk_wzrd->speed_grade = 0;
clk_wzrd->clk_in1 = devm_clk_get(&pdev->dev, "clk_in1");
if (IS_ERR(clk_wzrd->clk_in1))
return dev_err_probe(&pdev->dev, PTR_ERR(clk_wzrd->clk_in1),
clk_wzrd->clk_data.num = nr_outputs;
&clk_wzrd->clk_data);
if (clk_wzrd->speed_grade) {
clk_wzrd->nb.notifier_call = clk_wzrd_clk_notifier;
ret = devm_clk_notifier_register(&pdev->dev, clk_wzrd->clk_in1,
&clk_wzrd->nb);
ret = devm_clk_notifier_register(&pdev->dev, clk_wzrd->axi_clk,
&clk_wzrd->nb);
#define to_clk_wzrd(_nb) container_of(_nb, struct clk_wzrd, nb)
struct clk_wzrd *clk_wzrd = to_clk_wzrd(nb);
if (clk_wzrd->suspended)
if (ndata->clk == clk_wzrd->clk_in1)
max = clk_wzrd_max_freq[clk_wzrd->speed_grade - 1];
else if (ndata->clk == clk_wzrd->axi_clk)
struct clk_wzrd *clk_wzrd = dev_get_drvdata(dev);
clk_disable_unprepare(clk_wzrd->axi_clk);
clk_wzrd->suspended = true;
struct clk_wzrd *clk_wzrd = dev_get_drvdata(dev);
ret = clk_prepare_enable(clk_wzrd->axi_clk);
clk_wzrd->suspended = false;
struct clk_wzrd *clk_wzrd = dev_get_drvdata(dev);