Lines Matching refs:axi_clkgen

54 struct axi_clkgen;
57 void (*enable)(struct axi_clkgen *axi_clkgen, bool enable);
58 int (*write)(struct axi_clkgen *axi_clkgen, unsigned int reg,
60 int (*read)(struct axi_clkgen *axi_clkgen, unsigned int reg,
64 struct axi_clkgen { struct
70 static void axi_clkgen_mmcm_enable(struct axi_clkgen *axi_clkgen, in axi_clkgen_mmcm_enable() argument
73 axi_clkgen->mmcm_ops->enable(axi_clkgen, enable); in axi_clkgen_mmcm_enable()
76 static int axi_clkgen_mmcm_write(struct axi_clkgen *axi_clkgen, in axi_clkgen_mmcm_write() argument
79 return axi_clkgen->mmcm_ops->write(axi_clkgen, reg, val, mask); in axi_clkgen_mmcm_write()
82 static int axi_clkgen_mmcm_read(struct axi_clkgen *axi_clkgen, in axi_clkgen_mmcm_read() argument
85 return axi_clkgen->mmcm_ops->read(axi_clkgen, reg, val); in axi_clkgen_mmcm_read()
198 static void axi_clkgen_write(struct axi_clkgen *axi_clkgen, in axi_clkgen_write() argument
201 writel(val, axi_clkgen->base + reg); in axi_clkgen_write()
204 static void axi_clkgen_read(struct axi_clkgen *axi_clkgen, in axi_clkgen_read() argument
207 *val = readl(axi_clkgen->base + reg); in axi_clkgen_read()
238 static int axi_clkgen_v1_mmcm_write(struct axi_clkgen *axi_clkgen, in axi_clkgen_v1_mmcm_write() argument
245 axi_clkgen_write(axi_clkgen, reg, val); in axi_clkgen_v1_mmcm_write()
250 static int axi_clkgen_v1_mmcm_read(struct axi_clkgen *axi_clkgen, in axi_clkgen_v1_mmcm_read() argument
257 axi_clkgen_read(axi_clkgen, reg, val); in axi_clkgen_v1_mmcm_read()
262 static void axi_clkgen_v1_mmcm_enable(struct axi_clkgen *axi_clkgen, in axi_clkgen_v1_mmcm_enable() argument
265 axi_clkgen_write(axi_clkgen, AXI_CLKGEN_V1_REG_UPDATE_ENABLE, enable); in axi_clkgen_v1_mmcm_enable()
274 static int axi_clkgen_wait_non_busy(struct axi_clkgen *axi_clkgen) in axi_clkgen_wait_non_busy() argument
280 axi_clkgen_read(axi_clkgen, AXI_CLKGEN_V2_REG_DRP_STATUS, &val); in axi_clkgen_wait_non_busy()
289 static int axi_clkgen_v2_mmcm_read(struct axi_clkgen *axi_clkgen, in axi_clkgen_v2_mmcm_read() argument
295 ret = axi_clkgen_wait_non_busy(axi_clkgen); in axi_clkgen_v2_mmcm_read()
302 axi_clkgen_write(axi_clkgen, AXI_CLKGEN_V2_REG_DRP_CNTRL, reg_val); in axi_clkgen_v2_mmcm_read()
304 ret = axi_clkgen_wait_non_busy(axi_clkgen); in axi_clkgen_v2_mmcm_read()
313 static int axi_clkgen_v2_mmcm_write(struct axi_clkgen *axi_clkgen, in axi_clkgen_v2_mmcm_write() argument
319 ret = axi_clkgen_wait_non_busy(axi_clkgen); in axi_clkgen_v2_mmcm_write()
324 axi_clkgen_v2_mmcm_read(axi_clkgen, reg, &reg_val); in axi_clkgen_v2_mmcm_write()
330 axi_clkgen_write(axi_clkgen, AXI_CLKGEN_V2_REG_DRP_CNTRL, reg_val); in axi_clkgen_v2_mmcm_write()
335 static void axi_clkgen_v2_mmcm_enable(struct axi_clkgen *axi_clkgen, in axi_clkgen_v2_mmcm_enable() argument
343 axi_clkgen_write(axi_clkgen, AXI_CLKGEN_V2_REG_RESET, val); in axi_clkgen_v2_mmcm_enable()
352 static struct axi_clkgen *clk_hw_to_axi_clkgen(struct clk_hw *clk_hw) in clk_hw_to_axi_clkgen()
354 return container_of(clk_hw, struct axi_clkgen, clk_hw); in clk_hw_to_axi_clkgen()
360 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw); in axi_clkgen_set_rate() local
381 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_CLKOUT0_1, in axi_clkgen_set_rate()
383 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_CLKOUT0_2, in axi_clkgen_set_rate()
387 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_CLK_DIV, in axi_clkgen_set_rate()
391 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_CLK_FB1, in axi_clkgen_set_rate()
393 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_CLK_FB2, in axi_clkgen_set_rate()
396 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_LOCK1, lock & 0x3ff, 0x3ff); in axi_clkgen_set_rate()
397 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_LOCK2, in axi_clkgen_set_rate()
399 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_LOCK3, in axi_clkgen_set_rate()
401 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_FILTER1, filter >> 16, 0x9900); in axi_clkgen_set_rate()
402 axi_clkgen_mmcm_write(axi_clkgen, MMCM_REG_FILTER2, filter, 0x9900); in axi_clkgen_set_rate()
423 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw); in axi_clkgen_recalc_rate() local
428 axi_clkgen_mmcm_read(axi_clkgen, MMCM_REG_CLKOUT0_1, &reg); in axi_clkgen_recalc_rate()
430 axi_clkgen_mmcm_read(axi_clkgen, MMCM_REG_CLK_DIV, &reg); in axi_clkgen_recalc_rate()
432 axi_clkgen_mmcm_read(axi_clkgen, MMCM_REG_CLK_FB1, &reg); in axi_clkgen_recalc_rate()
449 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw); in axi_clkgen_enable() local
451 axi_clkgen_mmcm_enable(axi_clkgen, true); in axi_clkgen_enable()
458 struct axi_clkgen *axi_clkgen = clk_hw_to_axi_clkgen(clk_hw); in axi_clkgen_disable() local
460 axi_clkgen_mmcm_enable(axi_clkgen, false); in axi_clkgen_disable()
486 struct axi_clkgen *axi_clkgen; in axi_clkgen_probe() local
500 axi_clkgen = devm_kzalloc(&pdev->dev, sizeof(*axi_clkgen), GFP_KERNEL); in axi_clkgen_probe()
501 if (!axi_clkgen) in axi_clkgen_probe()
504 axi_clkgen->mmcm_ops = id->data; in axi_clkgen_probe()
507 axi_clkgen->base = devm_ioremap_resource(&pdev->dev, mem); in axi_clkgen_probe()
508 if (IS_ERR(axi_clkgen->base)) in axi_clkgen_probe()
509 return PTR_ERR(axi_clkgen->base); in axi_clkgen_probe()
525 axi_clkgen_mmcm_enable(axi_clkgen, false); in axi_clkgen_probe()
527 axi_clkgen->clk_hw.init = &init; in axi_clkgen_probe()
528 clk = devm_clk_register(&pdev->dev, &axi_clkgen->clk_hw); in axi_clkgen_probe()