Lines Matching defs:axi_clkgen
56 struct axi_clkgen {
231 static void axi_clkgen_write(struct axi_clkgen *axi_clkgen,
234 writel(val, axi_clkgen->base + reg);
237 static void axi_clkgen_read(struct axi_clkgen *axi_clkgen,
240 *val = readl(axi_clkgen->base + reg);
243 static int axi_clkgen_wait_non_busy(struct axi_clkgen *axi_clkgen)
249 axi_clkgen_read(axi_clkgen, AXI_CLKGEN_V2_REG_DRP_STATUS, &val);
258 static int axi_clkgen_mmcm_read(struct axi_clkgen *axi_clkgen,
264 ret = axi_clkgen_wait_non_busy(axi_clkgen);
271 axi_clkgen_write(axi_clkgen, AXI_CLKGEN_V2_REG_DRP_CNTRL, reg_val);
273 ret = axi_clkgen_wait_non_busy(axi_clkgen);
282 static int axi_clkgen_mmcm_write(struct axi_clkgen *axi_clkgen,
288 ret = axi_clkgen_wait_non_busy(axi_clkgen);
293 axi_clkgen_mmcm_read(axi_clkgen, reg, ®_val);
299 axi_clkgen_write(axi_clkgen, AXI_CLKGEN_V2_REG_DRP_CNTRL, reg_val);
304 static void axi_clkgen_mmcm_enable(struct axi_clkgen *axi_clkgen,
312 axi_clkgen_write(axi_clkgen, AXI_CLKGEN_V2_REG_RESET, val);
315 static struct axi_clkgen *clk_hw_to_axi_clkgen(struct clk_hw *clk_hw)
317 return container_of(clk_hw, struct axi_clkgen, clk_hw);
320 static void axi_clkgen_set_div(struct axi_clkgen *axi_clkgen,
324 axi_clkgen_mmcm_write(axi_clkgen, reg1,
326 axi_clkgen_mmcm_write(axi_clkgen, reg2,
331 axi_clkgen_mmcm_write(axi_clkgen, reg3,
339 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw);
340 const struct axi_clkgen_limits *limits = &axi_clkgen->limits;
358 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_POWER, power, 0x9800);
364 axi_clkgen_set_div(axi_clkgen, MMCM_REG_CLKOUT0_1, MMCM_REG_CLKOUT0_2,
368 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_CLK_DIV,
373 axi_clkgen_set_div(axi_clkgen, MMCM_REG_CLK_FB1, MMCM_REG_CLK_FB2,
376 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_LOCK1, lock & 0x3ff, 0x3ff);
377 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_LOCK2,
379 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_LOCK3,
381 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_FILTER1, filter >> 16, 0x9900);
382 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_FILTER2, filter, 0x9900);
390 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(hw);
391 const struct axi_clkgen_limits *limits = &axi_clkgen->limits;
408 static unsigned int axi_clkgen_get_div(struct axi_clkgen *axi_clkgen,
414 axi_clkgen_mmcm_read(axi_clkgen, reg2, &val2);
418 axi_clkgen_mmcm_read(axi_clkgen, reg1, &val1);
438 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw);
443 dout = axi_clkgen_get_div(axi_clkgen, MMCM_REG_CLKOUT0_1,
445 m = axi_clkgen_get_div(axi_clkgen, MMCM_REG_CLK_FB1,
448 axi_clkgen_mmcm_read(axi_clkgen, MMCM_REG_CLK_DIV, &val);
465 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw);
467 axi_clkgen_mmcm_enable(axi_clkgen, true);
474 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw);
476 axi_clkgen_mmcm_enable(axi_clkgen, false);
481 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw);
483 axi_clkgen_write(axi_clkgen, AXI_CLKGEN_V2_REG_CLKSEL, index);
490 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw);
493 axi_clkgen_read(axi_clkgen, AXI_CLKGEN_V2_REG_CLKSEL, &parent);
511 struct axi_clkgen *axi_clkgen;
522 axi_clkgen = devm_kzalloc(&pdev->dev, sizeof(*axi_clkgen), GFP_KERNEL);
523 if (!axi_clkgen)
526 axi_clkgen->base = devm_platform_ioremap_resource(pdev, 0);
527 if (IS_ERR(axi_clkgen->base))
528 return PTR_ERR(axi_clkgen->base);
540 memcpy(&axi_clkgen->limits, dflt_limits, sizeof(axi_clkgen->limits));
551 axi_clkgen_mmcm_enable(axi_clkgen, false);
553 axi_clkgen->clk_hw.init = &init;
554 ret = devm_clk_hw_register(&pdev->dev, &axi_clkgen->clk_hw);
559 &axi_clkgen->clk_hw);