Lines Matching defs:micfil

60 	{ .compatible = "fsl,imx8mm-micfil", .data = &fsl_micfil_imx8mm },
110 static inline int get_pdm_clk(struct fsl_micfil *micfil,
117 regmap_read(micfil->regmap, REG_MICFIL_CTRL2, &ctrl2_reg);
121 regmap_read(micfil->regmap, REG_MICFIL_CTRL2, &ctrl2_reg);
140 dev_err(&micfil->pdev->dev,
149 static inline int get_clk_div(struct fsl_micfil *micfil,
156 regmap_read(micfil->regmap, REG_MICFIL_CTRL2, &ctrl2_reg);
158 mclk_rate = clk_get_rate(micfil->mclk);
160 clk_div = mclk_rate / (get_pdm_clk(micfil, rate) * 2);
172 struct fsl_micfil *micfil = dev_get_drvdata(dev);
175 ret = regmap_update_bits(micfil->regmap,
184 ret = regmap_update_bits(micfil->regmap,
199 ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1,
208 ret = regmap_write_bits(micfil->regmap, REG_MICFIL_STAT, 0xFF, 0xFF);
215 static int fsl_micfil_set_mclk_rate(struct fsl_micfil *micfil,
218 struct device *dev = &micfil->pdev->dev;
221 clk_disable_unprepare(micfil->mclk);
223 ret = clk_set_rate(micfil->mclk, freq * 1024);
228 clk_prepare_enable(micfil->mclk);
236 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai);
238 if (!micfil) {
239 dev_err(dai->dev, "micfil dai priv_data not set\n");
249 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai);
250 struct device *dev = &micfil->pdev->dev;
269 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1,
278 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1,
291 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1,
299 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1,
315 struct fsl_micfil *micfil = dev_get_drvdata(dev);
319 ret = fsl_micfil_set_mclk_rate(micfil, rate);
322 clk_get_rate(micfil->mclk), rate);
325 ret |= regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL2,
333 clk_div = get_clk_div(micfil, rate);
337 ret |= regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL2,
350 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai);
353 struct device *dev = &micfil->pdev->dev;
357 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1,
365 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1,
379 micfil->dma_params_rx.maxburst = channels * MICFIL_DMA_MAXBURST_RX;
387 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai);
388 struct device *dev = &micfil->pdev->dev;
395 ret = fsl_micfil_set_mclk_rate(micfil, freq);
398 clk_get_rate(micfil->mclk), freq);
412 struct fsl_micfil *micfil = dev_get_drvdata(cpu_dai->dev);
419 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL2,
428 regmap_write(micfil->regmap, REG_MICFIL_OUT_CTRL, 0x77777777);
430 micfil->channel_gain[i] = 0xF;
433 &micfil->dma_params_rx);
436 val = MICFIL_FIFO_CTRL_FIFOWMK(micfil->soc->fifo_depth) - 1;
437 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_FIFO_CTRL,
445 snd_soc_dai_set_drvdata(cpu_dai, micfil);
463 .name = "fsl-micfil-dai",
589 struct fsl_micfil *micfil = (struct fsl_micfil *)devid;
590 struct platform_device *pdev = micfil->pdev;
597 regmap_read(micfil->regmap, REG_MICFIL_STAT, &stat_reg);
598 regmap_read(micfil->regmap, REG_MICFIL_CTRL1, &ctrl1_reg);
599 regmap_read(micfil->regmap, REG_MICFIL_FIFO_STAT, &fifo_stat_reg);
612 regmap_write_bits(micfil->regmap,
635 struct fsl_micfil *micfil = (struct fsl_micfil *)devid;
636 struct platform_device *pdev = micfil->pdev;
639 regmap_read(micfil->regmap, REG_MICFIL_STAT, &stat_reg);
649 regmap_write_bits(micfil->regmap, REG_MICFIL_STAT,
660 struct fsl_micfil *micfil;
666 micfil = devm_kzalloc(&pdev->dev, sizeof(*micfil), GFP_KERNEL);
667 if (!micfil)
670 micfil->pdev = pdev;
671 strncpy(micfil->name, np->name, sizeof(micfil->name) - 1);
677 micfil->soc = of_id->data;
682 micfil->mclk = devm_clk_get(&pdev->dev, "ipg_clk_app");
683 if (IS_ERR(micfil->mclk)) {
685 PTR_ERR(micfil->mclk));
686 return PTR_ERR(micfil->mclk);
695 micfil->regmap = devm_regmap_init_mmio_clk(&pdev->dev,
699 if (IS_ERR(micfil->regmap)) {
701 PTR_ERR(micfil->regmap));
702 return PTR_ERR(micfil->regmap);
709 &micfil->dataline);
711 micfil->dataline = 1;
713 if (micfil->dataline & ~micfil->soc->dataline) {
715 micfil->soc->dataline);
721 micfil->irq[i] = platform_get_irq(pdev, i);
722 dev_err(&pdev->dev, "GET IRQ: %d\n", micfil->irq[i]);
723 if (micfil->irq[i] < 0)
724 return micfil->irq[i];
731 ret = devm_request_irq(&pdev->dev, micfil->irq[0],
733 micfil->name, micfil);
736 micfil->irq[0]);
741 ret = devm_request_irq(&pdev->dev, micfil->irq[1],
743 micfil->name, micfil);
746 micfil->irq[1]);
750 micfil->dma_params_rx.chan_name = "rx";
751 micfil->dma_params_rx.addr = res->start + REG_MICFIL_DATACH0;
752 micfil->dma_params_rx.maxburst = MICFIL_DMA_MAXBURST_RX;
755 platform_set_drvdata(pdev, micfil);
776 struct fsl_micfil *micfil = dev_get_drvdata(dev);
778 regcache_cache_only(micfil->regmap, true);
780 clk_disable_unprepare(micfil->mclk);
787 struct fsl_micfil *micfil = dev_get_drvdata(dev);
790 ret = clk_prepare_enable(micfil->mclk);
794 regcache_cache_only(micfil->regmap, false);
795 regcache_mark_dirty(micfil->regmap);
796 regcache_sync(micfil->regmap);
826 .name = "fsl-micfil-dai",