Lines Matching refs:pdm
78 static unsigned int get_pdm_clk(struct rk_pdm_dev *pdm, unsigned int sr,
94 rate = clk_round_rate(pdm->clk, clkref[i].clk);
104 clk = clk_round_rate(pdm->clk, PDM_SIGNOFF_CLK_RATE);
180 static void rockchip_pdm_rxctrl(struct rk_pdm_dev *pdm, int on)
183 regmap_update_bits(pdm->regmap, PDM_DMA_CTRL,
185 regmap_update_bits(pdm->regmap, PDM_SYSCONFIG,
188 regmap_update_bits(pdm->regmap, PDM_DMA_CTRL,
190 regmap_update_bits(pdm->regmap, PDM_SYSCONFIG,
200 struct rk_pdm_dev *pdm = to_info(dai);
212 clk_rate = get_pdm_clk(pdm, samplerate, &clk_src, &clk_out);
216 ret = clk_set_rate(pdm->clk, clk_src);
220 if (pdm->version == RK_PDM_RK3308 ||
221 pdm->version == RK_PDM_RV1126) {
229 regmap_update_bits_check(pdm->regmap, PDM_CTRL1,
234 reset_control_assert(pdm->reset);
235 reset_control_deassert(pdm->reset);
236 rockchip_pdm_rxctrl(pdm, 0);
245 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL,
250 if (pdm->version == RK_PDM_RV1126) {
252 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_CIC_RATIO_MSK, val);
254 regmap_update_bits(pdm->regmap, PDM_CTRL0,
258 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_DS_RATIO_MSK, val);
261 regmap_update_bits(pdm->regmap, PDM_HPF_CTRL,
263 regmap_update_bits(pdm->regmap, PDM_HPF_CTRL,
265 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_CLK_EN, PDM_CLK_EN);
266 if (pdm->version != RK_PDM_RK3229)
267 regmap_update_bits(pdm->regmap, PDM_CTRL0,
305 dev_err(pdm->dev, "invalid channel: %d\n",
310 regmap_update_bits(pdm->regmap, PDM_CTRL0,
314 regmap_update_bits(pdm->regmap, PDM_DMA_CTRL, PDM_DMA_RDL_MSK,
323 struct rk_pdm_dev *pdm = to_info(cpu_dai);
339 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, mask, val);
348 struct rk_pdm_dev *pdm = to_info(dai);
356 rockchip_pdm_rxctrl(pdm, 1);
362 rockchip_pdm_rxctrl(pdm, 0);
374 struct rk_pdm_dev *pdm = to_info(dai);
376 snd_soc_dai_dma_data_set_capture(dai, &pdm->capture_dma_data);
407 .name = "rockchip-pdm",
413 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
415 clk_disable_unprepare(pdm->clk);
416 clk_disable_unprepare(pdm->hclk);
423 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
426 ret = clk_prepare_enable(pdm->clk);
428 dev_err(pdm->dev, "clock enable failed %d\n", ret);
432 ret = clk_prepare_enable(pdm->hclk);
434 clk_disable_unprepare(pdm->clk);
435 dev_err(pdm->dev, "hclock enable failed %d\n", ret);
529 { .compatible = "rockchip,pdm",
531 { .compatible = "rockchip,px30-pdm",
533 { .compatible = "rockchip,rk1808-pdm",
535 { .compatible = "rockchip,rk3308-pdm",
537 { .compatible = "rockchip,rk3568-pdm",
539 { .compatible = "rockchip,rv1126-pdm",
545 static int rockchip_pdm_path_parse(struct rk_pdm_dev *pdm, struct device_node *node)
567 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, msk, val);
576 struct rk_pdm_dev *pdm;
581 pdm = devm_kzalloc(&pdev->dev, sizeof(*pdm), GFP_KERNEL);
582 if (!pdm)
587 pdm->version = (uintptr_t)match->data;
589 if (pdm->version == RK_PDM_RK3308) {
590 pdm->reset = devm_reset_control_get(&pdev->dev, "pdm-m");
591 if (IS_ERR(pdm->reset))
592 return PTR_ERR(pdm->reset);
599 pdm->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
601 if (IS_ERR(pdm->regmap))
602 return PTR_ERR(pdm->regmap);
604 pdm->capture_dma_data.addr = res->start + PDM_RXFIFO_DATA;
605 pdm->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
606 pdm->capture_dma_data.maxburst = PDM_DMA_BURST_SIZE;
608 pdm->dev = &pdev->dev;
609 dev_set_drvdata(&pdev->dev, pdm);
611 pdm->clk = devm_clk_get(&pdev->dev, "pdm_clk");
612 if (IS_ERR(pdm->clk))
613 return PTR_ERR(pdm->clk);
615 pdm->hclk = devm_clk_get(&pdev->dev, "pdm_hclk");
616 if (IS_ERR(pdm->hclk))
617 return PTR_ERR(pdm->hclk);
619 ret = clk_prepare_enable(pdm->hclk);
639 rockchip_pdm_rxctrl(pdm, 0);
641 ret = rockchip_pdm_path_parse(pdm, node);
659 clk_disable_unprepare(pdm->hclk);
666 struct rk_pdm_dev *pdm = dev_get_drvdata(&pdev->dev);
672 clk_disable_unprepare(pdm->clk);
673 clk_disable_unprepare(pdm->hclk);
679 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
681 regcache_mark_dirty(pdm->regmap);
688 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
695 ret = regcache_sync(pdm->regmap);
713 .name = "rockchip-pdm",