Lines Matching full:micfil
140 { .compatible = "fsl,imx8mm-micfil", .data = &fsl_micfil_imx8mm },
141 { .compatible = "fsl,imx8mp-micfil", .data = &fsl_micfil_imx8mp },
142 { .compatible = "fsl,imx93-micfil", .data = &fsl_micfil_imx93 },
143 { .compatible = "fsl,imx943-micfil", .data = &fsl_micfil_imx943 },
163 static int micfil_set_quality(struct fsl_micfil *micfil) in micfil_set_quality() argument
167 switch (micfil->quality) { in micfil_set_quality()
190 return regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL2, in micfil_set_quality()
199 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(cmpnt); in micfil_quality_get() local
201 ucontrol->value.integer.value[0] = micfil->quality; in micfil_quality_get()
210 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(cmpnt); in micfil_quality_set() local
212 micfil->quality = ucontrol->value.integer.value[0]; in micfil_quality_set()
214 return micfil_set_quality(micfil); in micfil_quality_set()
264 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in micfil_put_dc_remover_state() local
273 micfil->dc_remover = val; in micfil_put_dc_remover_state()
292 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in micfil_get_dc_remover_state() local
294 ucontrol->value.enumerated.item[0] = micfil->dc_remover; in micfil_get_dc_remover_state()
305 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_put_enable() local
308 micfil->vad_enabled = val; in hwvad_put_enable()
317 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_get_enable() local
319 ucontrol->value.enumerated.item[0] = micfil->vad_enabled; in hwvad_get_enable()
330 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_put_init_mode() local
336 micfil->vad_init_mode = val; in hwvad_put_init_mode()
345 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_get_init_mode() local
347 ucontrol->value.enumerated.item[0] = micfil->vad_init_mode; in hwvad_get_init_mode()
356 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_detected() local
358 ucontrol->value.enumerated.item[0] = micfil->vad_detected; in hwvad_detected()
402 SOC_ENUM_EXT("MICFIL Quality Select",
413 SOC_ENUM_EXT("MICFIL DC Remover Control", fsl_micfil_dc_remover_enum,
430 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_use_verid() local
434 if (!micfil->soc->use_verid) in fsl_micfil_use_verid()
437 ret = regmap_read(micfil->regmap, REG_MICFIL_VERID, &val); in fsl_micfil_use_verid()
443 micfil->verid.version = val & in fsl_micfil_use_verid()
445 micfil->verid.version >>= MICFIL_VERID_MINOR_SHIFT; in fsl_micfil_use_verid()
446 micfil->verid.feature = val & MICFIL_VERID_FEATURE_MASK; in fsl_micfil_use_verid()
448 ret = regmap_read(micfil->regmap, REG_MICFIL_PARAM, &val); in fsl_micfil_use_verid()
454 micfil->param.hwvad_num = (val & MICFIL_PARAM_NUM_HWVAD_MASK) >> in fsl_micfil_use_verid()
456 micfil->param.hwvad_zcd = val & MICFIL_PARAM_HWVAD_ZCD; in fsl_micfil_use_verid()
457 micfil->param.hwvad_energy_mode = val & MICFIL_PARAM_HWVAD_ENERGY_MODE; in fsl_micfil_use_verid()
458 micfil->param.hwvad = val & MICFIL_PARAM_HWVAD; in fsl_micfil_use_verid()
459 micfil->param.dc_out_bypass = val & MICFIL_PARAM_DC_OUT_BYPASS; in fsl_micfil_use_verid()
460 micfil->param.dc_in_bypass = val & MICFIL_PARAM_DC_IN_BYPASS; in fsl_micfil_use_verid()
461 micfil->param.low_power = val & MICFIL_PARAM_LOW_POWER; in fsl_micfil_use_verid()
462 micfil->param.fil_out_width = val & MICFIL_PARAM_FIL_OUT_WIDTH; in fsl_micfil_use_verid()
463 micfil->param.fifo_ptrwid = (val & MICFIL_PARAM_FIFO_PTRWID_MASK) >> in fsl_micfil_use_verid()
465 micfil->param.npair = (val & MICFIL_PARAM_NPAIR_MASK) >> in fsl_micfil_use_verid()
478 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_reset() local
481 ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_reset()
486 ret = regmap_set_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_reset()
497 ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_reset()
506 ret = regmap_write_bits(micfil->regmap, REG_MICFIL_STAT, 0xFF, 0xFF); in fsl_micfil_reset()
516 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai); in fsl_micfil_startup() local
518 if (!micfil) { in fsl_micfil_startup()
519 dev_err(dai->dev, "micfil dai priv_data not set\n"); in fsl_micfil_startup()
523 if (micfil->constraint_rates.count > 0) in fsl_micfil_startup()
526 &micfil->constraint_rates); in fsl_micfil_startup()
532 static int fsl_micfil_configure_hwvad_interrupts(struct fsl_micfil *micfil, int enable) in fsl_micfil_configure_hwvad_interrupts() argument
538 regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_configure_hwvad_interrupts()
542 regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_configure_hwvad_interrupts()
549 static int fsl_micfil_init_hwvad_energy_mode(struct fsl_micfil *micfil) in fsl_micfil_init_hwvad_energy_mode() argument
552 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL2, in fsl_micfil_init_hwvad_energy_mode()
556 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL2, in fsl_micfil_init_hwvad_energy_mode()
560 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_SCONFIG, in fsl_micfil_init_hwvad_energy_mode()
564 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_SCONFIG, in fsl_micfil_init_hwvad_energy_mode()
568 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_energy_mode()
572 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_energy_mode()
576 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_energy_mode()
580 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_energy_mode()
587 static int fsl_micfil_init_hwvad_envelope_mode(struct fsl_micfil *micfil) in fsl_micfil_init_hwvad_envelope_mode() argument
590 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL2, in fsl_micfil_init_hwvad_envelope_mode()
594 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL2, in fsl_micfil_init_hwvad_envelope_mode()
598 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_SCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
602 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_SCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
606 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
610 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
614 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
618 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
634 * or reset only when the MICFIL isn't running i.e. when the BSY_FIL
637 static int fsl_micfil_hwvad_enable(struct fsl_micfil *micfil) in fsl_micfil_hwvad_enable() argument
641 micfil->vad_detected = 0; in fsl_micfil_hwvad_enable()
644 if (micfil->vad_init_mode == MICFIL_HWVAD_ENVELOPE_MODE) in fsl_micfil_hwvad_enable()
645 ret = fsl_micfil_init_hwvad_envelope_mode(micfil); in fsl_micfil_hwvad_enable()
647 ret = fsl_micfil_init_hwvad_energy_mode(micfil); in fsl_micfil_hwvad_enable()
652 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_enable()
656 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_enable()
660 ret = fsl_micfil_configure_hwvad_interrupts(micfil, 1); in fsl_micfil_hwvad_enable()
665 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_enable()
669 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_enable()
675 static int fsl_micfil_hwvad_disable(struct fsl_micfil *micfil) in fsl_micfil_hwvad_disable() argument
677 struct device *dev = &micfil->pdev->dev; in fsl_micfil_hwvad_disable()
681 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_disable()
685 ret = fsl_micfil_configure_hwvad_interrupts(micfil, 0); in fsl_micfil_hwvad_disable()
695 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai); in fsl_micfil_trigger() local
696 struct device *dev = &micfil->pdev->dev; in fsl_micfil_trigger()
715 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_trigger()
722 ret = regmap_set_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_trigger()
727 if (micfil->vad_enabled) in fsl_micfil_trigger()
728 fsl_micfil_hwvad_enable(micfil); in fsl_micfil_trigger()
734 if (micfil->vad_enabled) in fsl_micfil_trigger()
735 fsl_micfil_hwvad_disable(micfil); in fsl_micfil_trigger()
738 ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_trigger()
743 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_trigger()
755 static int fsl_micfil_reparent_rootclk(struct fsl_micfil *micfil, unsigned int sample_rate) in fsl_micfil_reparent_rootclk() argument
757 struct device *dev = &micfil->pdev->dev; in fsl_micfil_reparent_rootclk()
763 clk = micfil->mclk; in fsl_micfil_reparent_rootclk()
766 fsl_asoc_reparent_pll_clocks(dev, clk, micfil->pll8k_clk, in fsl_micfil_reparent_rootclk()
767 micfil->pll11k_clk, ratio); in fsl_micfil_reparent_rootclk()
779 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai); in fsl_micfil_hw_params() local
787 ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_hw_params()
793 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_hw_params()
798 ret = fsl_micfil_reparent_rootclk(micfil, rate); in fsl_micfil_hw_params()
802 micfil->mclk_flag = true; in fsl_micfil_hw_params()
804 ret = clk_set_rate(micfil->mclk, rate * clk_div * osr * 8); in fsl_micfil_hw_params()
808 ret = micfil_set_quality(micfil); in fsl_micfil_hw_params()
812 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL2, in fsl_micfil_hw_params()
818 regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hw_params()
823 regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hw_params()
827 micfil->dma_params_rx.peripheral_config = &micfil->sdmacfg; in fsl_micfil_hw_params()
828 micfil->dma_params_rx.peripheral_size = sizeof(micfil->sdmacfg); in fsl_micfil_hw_params()
829 micfil->sdmacfg.n_fifos_src = channels; in fsl_micfil_hw_params()
830 micfil->sdmacfg.sw_done = true; in fsl_micfil_hw_params()
831 micfil->dma_params_rx.maxburst = channels * MICFIL_DMA_MAXBURST_RX; in fsl_micfil_hw_params()
832 if (micfil->soc->use_edma) in fsl_micfil_hw_params()
833 micfil->dma_params_rx.maxburst = channels; in fsl_micfil_hw_params()
841 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai); in fsl_micfil_hw_free() local
843 clk_disable_unprepare(micfil->mclk); in fsl_micfil_hw_free()
844 micfil->mclk_flag = false; in fsl_micfil_hw_free()
851 struct fsl_micfil *micfil = dev_get_drvdata(cpu_dai->dev); in fsl_micfil_dai_probe() local
856 micfil->quality = QUALITY_VLOW0; in fsl_micfil_dai_probe()
857 micfil->card = cpu_dai->component->card; in fsl_micfil_dai_probe()
860 regmap_write(micfil->regmap, REG_MICFIL_OUT_CTRL, 0x22222222); in fsl_micfil_dai_probe()
865 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_DC_CTRL, in fsl_micfil_dai_probe()
871 micfil->dc_remover = MICFIL_DC_BYPASS; in fsl_micfil_dai_probe()
874 &micfil->dma_params_rx); in fsl_micfil_dai_probe()
877 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_FIFO_CTRL, in fsl_micfil_dai_probe()
879 FIELD_PREP(MICFIL_FIFO_CTRL_FIFOWMK, micfil->soc->fifo_depth - 1)); in fsl_micfil_dai_probe()
888 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(component); in fsl_micfil_component_probe() local
890 if (micfil->soc->volume_sx) in fsl_micfil_component_probe()
920 .name = "fsl-micfil-dai",
982 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_readable_reg() local
983 int ofs = micfil->soc->fifo_offset; in fsl_micfil_readable_reg()
1008 if (micfil->soc->use_verid) in fsl_micfil_readable_reg()
1018 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_writeable_reg() local
1037 if (micfil->soc->use_verid) in fsl_micfil_writeable_reg()
1047 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_volatile_reg() local
1048 int ofs = micfil->soc->fifo_offset; in fsl_micfil_volatile_reg()
1099 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in micfil_isr() local
1100 struct platform_device *pdev = micfil->pdev; in micfil_isr()
1107 regmap_read(micfil->regmap, REG_MICFIL_STAT, &stat_reg); in micfil_isr()
1108 regmap_read(micfil->regmap, REG_MICFIL_CTRL1, &ctrl1_reg); in micfil_isr()
1109 regmap_read(micfil->regmap, REG_MICFIL_FIFO_STAT, &fifo_stat_reg); in micfil_isr()
1122 regmap_write_bits(micfil->regmap, in micfil_isr()
1145 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in micfil_err_isr() local
1146 struct platform_device *pdev = micfil->pdev; in micfil_err_isr()
1151 regmap_read(micfil->regmap, REG_MICFIL_STAT, &stat_reg); in micfil_err_isr()
1161 regmap_write_bits(micfil->regmap, REG_MICFIL_STAT, in micfil_err_isr()
1165 regmap_read(micfil->regmap, REG_MICFIL_FIFO_STAT, &fifo_stat_reg); in micfil_err_isr()
1166 regmap_write_bits(micfil->regmap, REG_MICFIL_FIFO_STAT, in micfil_err_isr()
1169 regmap_read(micfil->regmap, REG_MICFIL_OUT_STAT, &out_stat_reg); in micfil_err_isr()
1170 regmap_write_bits(micfil->regmap, REG_MICFIL_OUT_STAT, in micfil_err_isr()
1178 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in voice_detected_fn() local
1181 if (!micfil->card) in voice_detected_fn()
1184 kctl = snd_soc_card_get_kcontrol(micfil->card, "VAD Detected"); in voice_detected_fn()
1188 if (micfil->vad_detected) in voice_detected_fn()
1189 snd_ctl_notify(micfil->card->snd_card, in voice_detected_fn()
1198 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in hwvad_isr() local
1199 struct device *dev = &micfil->pdev->dev; in hwvad_isr()
1203 regmap_read(micfil->regmap, REG_MICFIL_VAD0_STAT, &vad0_reg); in hwvad_isr()
1213 regmap_write_bits(micfil->regmap, REG_MICFIL_VAD0_STAT, in hwvad_isr()
1217 micfil->vad_detected = 1; in hwvad_isr()
1220 ret = fsl_micfil_hwvad_disable(micfil); in hwvad_isr()
1229 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in hwvad_err_isr() local
1230 struct device *dev = &micfil->pdev->dev; in hwvad_err_isr()
1233 regmap_read(micfil->regmap, REG_MICFIL_VAD0_STAT, &vad0_reg); in hwvad_err_isr()
1247 struct fsl_micfil *micfil; in fsl_micfil_probe() local
1252 micfil = devm_kzalloc(&pdev->dev, sizeof(*micfil), GFP_KERNEL); in fsl_micfil_probe()
1253 if (!micfil) in fsl_micfil_probe()
1256 micfil->pdev = pdev; in fsl_micfil_probe()
1257 strscpy(micfil->name, np->name, sizeof(micfil->name)); in fsl_micfil_probe()
1259 micfil->soc = of_device_get_match_data(&pdev->dev); in fsl_micfil_probe()
1264 micfil->mclk = devm_clk_get(&pdev->dev, "ipg_clk_app"); in fsl_micfil_probe()
1265 if (IS_ERR(micfil->mclk)) { in fsl_micfil_probe()
1267 PTR_ERR(micfil->mclk)); in fsl_micfil_probe()
1268 return PTR_ERR(micfil->mclk); in fsl_micfil_probe()
1271 micfil->busclk = devm_clk_get(&pdev->dev, "ipg_clk"); in fsl_micfil_probe()
1272 if (IS_ERR(micfil->busclk)) { in fsl_micfil_probe()
1274 PTR_ERR(micfil->busclk)); in fsl_micfil_probe()
1275 return PTR_ERR(micfil->busclk); in fsl_micfil_probe()
1278 fsl_asoc_get_pll_clocks(&pdev->dev, &micfil->pll8k_clk, in fsl_micfil_probe()
1279 &micfil->pll11k_clk); in fsl_micfil_probe()
1281 micfil->clk_src[MICFIL_AUDIO_PLL1] = micfil->pll8k_clk; in fsl_micfil_probe()
1282 micfil->clk_src[MICFIL_AUDIO_PLL2] = micfil->pll11k_clk; in fsl_micfil_probe()
1283 micfil->clk_src[MICFIL_CLK_EXT3] = devm_clk_get(&pdev->dev, "clkext3"); in fsl_micfil_probe()
1284 if (IS_ERR(micfil->clk_src[MICFIL_CLK_EXT3])) in fsl_micfil_probe()
1285 micfil->clk_src[MICFIL_CLK_EXT3] = NULL; in fsl_micfil_probe()
1287 fsl_asoc_constrain_rates(&micfil->constraint_rates, in fsl_micfil_probe()
1289 micfil->clk_src[MICFIL_AUDIO_PLL1], in fsl_micfil_probe()
1290 micfil->clk_src[MICFIL_AUDIO_PLL2], in fsl_micfil_probe()
1291 micfil->clk_src[MICFIL_CLK_EXT3], in fsl_micfil_probe()
1292 micfil->constraint_rates_list); in fsl_micfil_probe()
1299 if (of_device_is_compatible(np, "fsl,imx943-micfil")) in fsl_micfil_probe()
1300 micfil->regmap = devm_regmap_init_mmio(&pdev->dev, in fsl_micfil_probe()
1304 micfil->regmap = devm_regmap_init_mmio(&pdev->dev, in fsl_micfil_probe()
1307 if (IS_ERR(micfil->regmap)) { in fsl_micfil_probe()
1308 dev_err(&pdev->dev, "failed to init MICFIL regmap: %ld\n", in fsl_micfil_probe()
1309 PTR_ERR(micfil->regmap)); in fsl_micfil_probe()
1310 return PTR_ERR(micfil->regmap); in fsl_micfil_probe()
1317 &micfil->dataline); in fsl_micfil_probe()
1319 micfil->dataline = 1; in fsl_micfil_probe()
1321 if (micfil->dataline & ~micfil->soc->dataline) { in fsl_micfil_probe()
1323 micfil->soc->dataline); in fsl_micfil_probe()
1329 micfil->irq[i] = platform_get_irq(pdev, i); in fsl_micfil_probe()
1330 if (micfil->irq[i] < 0) in fsl_micfil_probe()
1331 return micfil->irq[i]; in fsl_micfil_probe()
1335 ret = devm_request_irq(&pdev->dev, micfil->irq[0], in fsl_micfil_probe()
1337 micfil->name, micfil); in fsl_micfil_probe()
1340 micfil->irq[0]); in fsl_micfil_probe()
1345 ret = devm_request_irq(&pdev->dev, micfil->irq[1], in fsl_micfil_probe()
1347 micfil->name, micfil); in fsl_micfil_probe()
1350 micfil->irq[1]); in fsl_micfil_probe()
1355 ret = devm_request_threaded_irq(&pdev->dev, micfil->irq[2], in fsl_micfil_probe()
1357 IRQF_SHARED, micfil->name, micfil); in fsl_micfil_probe()
1360 micfil->irq[0]); in fsl_micfil_probe()
1365 ret = devm_request_irq(&pdev->dev, micfil->irq[3], in fsl_micfil_probe()
1367 micfil->name, micfil); in fsl_micfil_probe()
1370 micfil->irq[1]); in fsl_micfil_probe()
1374 micfil->dma_params_rx.chan_name = "rx"; in fsl_micfil_probe()
1375 micfil->dma_params_rx.addr = res->start + REG_MICFIL_DATACH0 + micfil->soc->fifo_offset; in fsl_micfil_probe()
1376 micfil->dma_params_rx.maxburst = MICFIL_DMA_MAXBURST_RX; in fsl_micfil_probe()
1378 platform_set_drvdata(pdev, micfil); in fsl_micfil_probe()
1391 /* Get micfil version */ in fsl_micfil_probe()
1394 dev_warn(&pdev->dev, "Error reading MICFIL version: %d\n", ret); in fsl_micfil_probe()
1400 regcache_cache_only(micfil->regmap, true); in fsl_micfil_probe()
1412 fsl_micfil_dai.capture.formats = micfil->soc->formats; in fsl_micfil_probe()
1440 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_runtime_suspend() local
1442 regcache_cache_only(micfil->regmap, true); in fsl_micfil_runtime_suspend()
1444 if (micfil->mclk_flag) in fsl_micfil_runtime_suspend()
1445 clk_disable_unprepare(micfil->mclk); in fsl_micfil_runtime_suspend()
1446 clk_disable_unprepare(micfil->busclk); in fsl_micfil_runtime_suspend()
1453 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_runtime_resume() local
1456 ret = clk_prepare_enable(micfil->busclk); in fsl_micfil_runtime_resume()
1460 if (micfil->mclk_flag) { in fsl_micfil_runtime_resume()
1461 ret = clk_prepare_enable(micfil->mclk); in fsl_micfil_runtime_resume()
1463 clk_disable_unprepare(micfil->busclk); in fsl_micfil_runtime_resume()
1468 regcache_cache_only(micfil->regmap, false); in fsl_micfil_runtime_resume()
1469 regcache_mark_dirty(micfil->regmap); in fsl_micfil_runtime_resume()
1470 regcache_sync(micfil->regmap); in fsl_micfil_runtime_resume()
1487 .name = "fsl-micfil-dai",
1495 MODULE_DESCRIPTION("NXP PDM Microphone Interface (MICFIL) driver");