Lines Matching refs:pdm
76 static unsigned int get_pdm_clk(struct rk_pdm_dev *pdm, unsigned int sr,
92 rate = clk_round_rate(pdm->clk, clkref[i].clk);
102 clk = clk_round_rate(pdm->clk, PDM_SIGNOFF_CLK_RATE);
129 static void rockchip_pdm_rxctrl(struct rk_pdm_dev *pdm, int on)
132 regmap_update_bits(pdm->regmap, PDM_DMA_CTRL,
134 regmap_update_bits(pdm->regmap, PDM_SYSCONFIG,
137 regmap_update_bits(pdm->regmap, PDM_DMA_CTRL,
139 regmap_update_bits(pdm->regmap, PDM_SYSCONFIG,
149 struct rk_pdm_dev *pdm = to_info(dai);
161 clk_rate = get_pdm_clk(pdm, samplerate, &clk_src, &clk_out);
165 ret = clk_set_rate(pdm->clk, clk_src);
169 if (pdm->version == RK_PDM_RK3308) {
177 regmap_update_bits_check(pdm->regmap, PDM_CTRL1,
182 reset_control_assert(pdm->reset);
183 reset_control_deassert(pdm->reset);
184 rockchip_pdm_rxctrl(pdm, 0);
193 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL,
198 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_DS_RATIO_MSK, val);
199 regmap_update_bits(pdm->regmap, PDM_HPF_CTRL,
201 regmap_update_bits(pdm->regmap, PDM_HPF_CTRL,
203 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_CLK_EN, PDM_CLK_EN);
204 if (pdm->version != RK_PDM_RK3229)
205 regmap_update_bits(pdm->regmap, PDM_CTRL0,
243 dev_err(pdm->dev, "invalid channel: %d\n",
248 regmap_update_bits(pdm->regmap, PDM_CTRL0,
252 regmap_update_bits(pdm->regmap, PDM_DMA_CTRL, PDM_DMA_RDL_MSK,
261 struct rk_pdm_dev *pdm = to_info(cpu_dai);
277 regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, mask, val);
286 struct rk_pdm_dev *pdm = to_info(dai);
294 rockchip_pdm_rxctrl(pdm, 1);
300 rockchip_pdm_rxctrl(pdm, 0);
312 struct rk_pdm_dev *pdm = to_info(dai);
314 dai->capture_dma_data = &pdm->capture_dma_data;
345 .name = "rockchip-pdm",
350 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
352 clk_disable_unprepare(pdm->clk);
353 clk_disable_unprepare(pdm->hclk);
360 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
363 ret = clk_prepare_enable(pdm->clk);
365 dev_err(pdm->dev, "clock enable failed %d\n", ret);
369 ret = clk_prepare_enable(pdm->hclk);
371 clk_disable_unprepare(pdm->clk);
372 dev_err(pdm->dev, "hclock enable failed %d\n", ret);
465 { .compatible = "rockchip,pdm",
467 { .compatible = "rockchip,px30-pdm",
469 { .compatible = "rockchip,rk1808-pdm",
471 { .compatible = "rockchip,rk3308-pdm",
480 struct rk_pdm_dev *pdm;
485 pdm = devm_kzalloc(&pdev->dev, sizeof(*pdm), GFP_KERNEL);
486 if (!pdm)
491 pdm->version = (enum rk_pdm_version)match->data;
493 if (pdm->version == RK_PDM_RK3308) {
494 pdm->reset = devm_reset_control_get(&pdev->dev, "pdm-m");
495 if (IS_ERR(pdm->reset))
496 return PTR_ERR(pdm->reset);
504 pdm->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
506 if (IS_ERR(pdm->regmap))
507 return PTR_ERR(pdm->regmap);
509 pdm->capture_dma_data.addr = res->start + PDM_RXFIFO_DATA;
510 pdm->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
511 pdm->capture_dma_data.maxburst = PDM_DMA_BURST_SIZE;
513 pdm->dev = &pdev->dev;
514 dev_set_drvdata(&pdev->dev, pdm);
516 pdm->clk = devm_clk_get(&pdev->dev, "pdm_clk");
517 if (IS_ERR(pdm->clk))
518 return PTR_ERR(pdm->clk);
520 pdm->hclk = devm_clk_get(&pdev->dev, "pdm_hclk");
521 if (IS_ERR(pdm->hclk))
522 return PTR_ERR(pdm->hclk);
524 ret = clk_prepare_enable(pdm->hclk);
544 rockchip_pdm_rxctrl(pdm, 0);
559 clk_disable_unprepare(pdm->hclk);
566 struct rk_pdm_dev *pdm = dev_get_drvdata(&pdev->dev);
572 clk_disable_unprepare(pdm->clk);
573 clk_disable_unprepare(pdm->hclk);
581 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
583 regcache_mark_dirty(pdm->regmap);
590 struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
599 ret = regcache_sync(pdm->regmap);
617 .name = "rockchip-pdm",