Lines Matching refs:micfil

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