Lines Matching refs:micfil

136 static int micfil_set_quality(struct fsl_micfil *micfil)  in micfil_set_quality()  argument
140 switch (micfil->quality) { in micfil_set_quality()
163 return regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL2, in micfil_set_quality()
172 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(cmpnt); in micfil_quality_get() local
174 ucontrol->value.integer.value[0] = micfil->quality; in micfil_quality_get()
183 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(cmpnt); in micfil_quality_set() local
185 micfil->quality = ucontrol->value.integer.value[0]; in micfil_quality_set()
187 return micfil_set_quality(micfil); in micfil_quality_set()
237 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in micfil_put_dc_remover_state() local
246 micfil->dc_remover = val; in micfil_put_dc_remover_state()
265 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in micfil_get_dc_remover_state() local
267 ucontrol->value.enumerated.item[0] = micfil->dc_remover; in micfil_get_dc_remover_state()
278 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_put_enable() local
281 micfil->vad_enabled = val; in hwvad_put_enable()
290 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_get_enable() local
292 ucontrol->value.enumerated.item[0] = micfil->vad_enabled; in hwvad_get_enable()
303 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_put_init_mode() local
309 micfil->vad_init_mode = val; in hwvad_put_init_mode()
318 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_get_init_mode() local
320 ucontrol->value.enumerated.item[0] = micfil->vad_init_mode; in hwvad_get_init_mode()
329 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp); in hwvad_detected() local
331 ucontrol->value.enumerated.item[0] = micfil->vad_detected; in hwvad_detected()
403 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_use_verid() local
407 if (!micfil->soc->use_verid) in fsl_micfil_use_verid()
410 ret = regmap_read(micfil->regmap, REG_MICFIL_VERID, &val); in fsl_micfil_use_verid()
416 micfil->verid.version = val & in fsl_micfil_use_verid()
418 micfil->verid.version >>= MICFIL_VERID_MINOR_SHIFT; in fsl_micfil_use_verid()
419 micfil->verid.feature = val & MICFIL_VERID_FEATURE_MASK; in fsl_micfil_use_verid()
421 ret = regmap_read(micfil->regmap, REG_MICFIL_PARAM, &val); in fsl_micfil_use_verid()
427 micfil->param.hwvad_num = (val & MICFIL_PARAM_NUM_HWVAD_MASK) >> in fsl_micfil_use_verid()
429 micfil->param.hwvad_zcd = val & MICFIL_PARAM_HWVAD_ZCD; in fsl_micfil_use_verid()
430 micfil->param.hwvad_energy_mode = val & MICFIL_PARAM_HWVAD_ENERGY_MODE; in fsl_micfil_use_verid()
431 micfil->param.hwvad = val & MICFIL_PARAM_HWVAD; in fsl_micfil_use_verid()
432 micfil->param.dc_out_bypass = val & MICFIL_PARAM_DC_OUT_BYPASS; in fsl_micfil_use_verid()
433 micfil->param.dc_in_bypass = val & MICFIL_PARAM_DC_IN_BYPASS; in fsl_micfil_use_verid()
434 micfil->param.low_power = val & MICFIL_PARAM_LOW_POWER; in fsl_micfil_use_verid()
435 micfil->param.fil_out_width = val & MICFIL_PARAM_FIL_OUT_WIDTH; in fsl_micfil_use_verid()
436 micfil->param.fifo_ptrwid = (val & MICFIL_PARAM_FIFO_PTRWID_MASK) >> in fsl_micfil_use_verid()
438 micfil->param.npair = (val & MICFIL_PARAM_NPAIR_MASK) >> in fsl_micfil_use_verid()
451 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_reset() local
454 ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_reset()
459 ret = regmap_set_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_reset()
470 ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_reset()
479 ret = regmap_write_bits(micfil->regmap, REG_MICFIL_STAT, 0xFF, 0xFF); in fsl_micfil_reset()
489 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai); in fsl_micfil_startup() local
494 if (!micfil) { in fsl_micfil_startup()
499 micfil->constraint_rates.list = micfil->constraint_rates_list; in fsl_micfil_startup()
500 micfil->constraint_rates.count = 0; in fsl_micfil_startup()
504 clk_rate = clk_get_rate(micfil->clk_src[i]); in fsl_micfil_startup()
506 micfil->constraint_rates_list[k++] = rates[j]; in fsl_micfil_startup()
507 micfil->constraint_rates.count++; in fsl_micfil_startup()
513 if (micfil->constraint_rates.count > 0) in fsl_micfil_startup()
516 &micfil->constraint_rates); in fsl_micfil_startup()
522 static int fsl_micfil_configure_hwvad_interrupts(struct fsl_micfil *micfil, int enable) in fsl_micfil_configure_hwvad_interrupts() argument
528 regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_configure_hwvad_interrupts()
532 regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_configure_hwvad_interrupts()
539 static int fsl_micfil_init_hwvad_energy_mode(struct fsl_micfil *micfil) in fsl_micfil_init_hwvad_energy_mode() argument
542 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL2, in fsl_micfil_init_hwvad_energy_mode()
546 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL2, in fsl_micfil_init_hwvad_energy_mode()
550 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_SCONFIG, in fsl_micfil_init_hwvad_energy_mode()
554 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_SCONFIG, in fsl_micfil_init_hwvad_energy_mode()
558 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_energy_mode()
562 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_energy_mode()
566 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_energy_mode()
570 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_energy_mode()
577 static int fsl_micfil_init_hwvad_envelope_mode(struct fsl_micfil *micfil) in fsl_micfil_init_hwvad_envelope_mode() argument
580 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL2, in fsl_micfil_init_hwvad_envelope_mode()
584 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL2, in fsl_micfil_init_hwvad_envelope_mode()
588 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_SCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
592 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_SCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
596 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
600 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
604 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
608 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_NCONFIG, in fsl_micfil_init_hwvad_envelope_mode()
627 static int fsl_micfil_hwvad_enable(struct fsl_micfil *micfil) in fsl_micfil_hwvad_enable() argument
631 micfil->vad_detected = 0; in fsl_micfil_hwvad_enable()
634 if (micfil->vad_init_mode == MICFIL_HWVAD_ENVELOPE_MODE) in fsl_micfil_hwvad_enable()
635 ret = fsl_micfil_init_hwvad_envelope_mode(micfil); in fsl_micfil_hwvad_enable()
637 ret = fsl_micfil_init_hwvad_energy_mode(micfil); in fsl_micfil_hwvad_enable()
642 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_enable()
646 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_enable()
650 ret = fsl_micfil_configure_hwvad_interrupts(micfil, 1); in fsl_micfil_hwvad_enable()
655 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_enable()
659 regmap_set_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_enable()
665 static int fsl_micfil_hwvad_disable(struct fsl_micfil *micfil) in fsl_micfil_hwvad_disable() argument
667 struct device *dev = &micfil->pdev->dev; in fsl_micfil_hwvad_disable()
671 regmap_clear_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hwvad_disable()
675 ret = fsl_micfil_configure_hwvad_interrupts(micfil, 0); in fsl_micfil_hwvad_disable()
685 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai); in fsl_micfil_trigger() local
686 struct device *dev = &micfil->pdev->dev; in fsl_micfil_trigger()
705 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_trigger()
712 ret = regmap_set_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_trigger()
717 if (micfil->vad_enabled) in fsl_micfil_trigger()
718 fsl_micfil_hwvad_enable(micfil); in fsl_micfil_trigger()
724 if (micfil->vad_enabled) in fsl_micfil_trigger()
725 fsl_micfil_hwvad_disable(micfil); in fsl_micfil_trigger()
728 ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_trigger()
733 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_trigger()
745 static int fsl_micfil_reparent_rootclk(struct fsl_micfil *micfil, unsigned int sample_rate) in fsl_micfil_reparent_rootclk() argument
747 struct device *dev = &micfil->pdev->dev; in fsl_micfil_reparent_rootclk()
753 clk = micfil->mclk; in fsl_micfil_reparent_rootclk()
757 fsl_asoc_reparent_pll_clocks(dev, clk, micfil->pll8k_clk, in fsl_micfil_reparent_rootclk()
758 micfil->pll11k_clk, ratio); in fsl_micfil_reparent_rootclk()
770 struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai); in fsl_micfil_hw_params() local
778 ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_hw_params()
784 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL1, in fsl_micfil_hw_params()
789 ret = fsl_micfil_reparent_rootclk(micfil, rate); in fsl_micfil_hw_params()
793 ret = clk_set_rate(micfil->mclk, rate * clk_div * osr * 8); in fsl_micfil_hw_params()
797 ret = micfil_set_quality(micfil); in fsl_micfil_hw_params()
801 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_CTRL2, in fsl_micfil_hw_params()
807 regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hw_params()
812 regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1, in fsl_micfil_hw_params()
816 micfil->dma_params_rx.peripheral_config = &micfil->sdmacfg; in fsl_micfil_hw_params()
817 micfil->dma_params_rx.peripheral_size = sizeof(micfil->sdmacfg); in fsl_micfil_hw_params()
818 micfil->sdmacfg.n_fifos_src = channels; in fsl_micfil_hw_params()
819 micfil->sdmacfg.sw_done = true; in fsl_micfil_hw_params()
820 micfil->dma_params_rx.maxburst = channels * MICFIL_DMA_MAXBURST_RX; in fsl_micfil_hw_params()
821 if (micfil->soc->use_edma) in fsl_micfil_hw_params()
822 micfil->dma_params_rx.maxburst = channels; in fsl_micfil_hw_params()
829 struct fsl_micfil *micfil = dev_get_drvdata(cpu_dai->dev); in fsl_micfil_dai_probe() local
834 micfil->quality = QUALITY_VLOW0; in fsl_micfil_dai_probe()
835 micfil->card = cpu_dai->component->card; in fsl_micfil_dai_probe()
838 regmap_write(micfil->regmap, REG_MICFIL_OUT_CTRL, 0x22222222); in fsl_micfil_dai_probe()
843 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_DC_CTRL, in fsl_micfil_dai_probe()
849 micfil->dc_remover = MICFIL_DC_BYPASS; in fsl_micfil_dai_probe()
852 &micfil->dma_params_rx); in fsl_micfil_dai_probe()
855 ret = regmap_update_bits(micfil->regmap, REG_MICFIL_FIFO_CTRL, in fsl_micfil_dai_probe()
857 FIELD_PREP(MICFIL_FIFO_CTRL_FIFOWMK, micfil->soc->fifo_depth - 1)); in fsl_micfil_dai_probe()
866 struct fsl_micfil *micfil = snd_soc_component_get_drvdata(component); in fsl_micfil_component_probe() local
868 if (micfil->soc->volume_sx) in fsl_micfil_component_probe()
1030 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in micfil_isr() local
1031 struct platform_device *pdev = micfil->pdev; in micfil_isr()
1038 regmap_read(micfil->regmap, REG_MICFIL_STAT, &stat_reg); in micfil_isr()
1039 regmap_read(micfil->regmap, REG_MICFIL_CTRL1, &ctrl1_reg); in micfil_isr()
1040 regmap_read(micfil->regmap, REG_MICFIL_FIFO_STAT, &fifo_stat_reg); in micfil_isr()
1053 regmap_write_bits(micfil->regmap, in micfil_isr()
1076 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in micfil_err_isr() local
1077 struct platform_device *pdev = micfil->pdev; in micfil_err_isr()
1080 regmap_read(micfil->regmap, REG_MICFIL_STAT, &stat_reg); in micfil_err_isr()
1090 regmap_write_bits(micfil->regmap, REG_MICFIL_STAT, in micfil_err_isr()
1099 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in voice_detected_fn() local
1102 if (!micfil->card) in voice_detected_fn()
1105 kctl = snd_soc_card_get_kcontrol(micfil->card, "VAD Detected"); in voice_detected_fn()
1109 if (micfil->vad_detected) in voice_detected_fn()
1110 snd_ctl_notify(micfil->card->snd_card, in voice_detected_fn()
1119 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in hwvad_isr() local
1120 struct device *dev = &micfil->pdev->dev; in hwvad_isr()
1124 regmap_read(micfil->regmap, REG_MICFIL_VAD0_STAT, &vad0_reg); in hwvad_isr()
1134 regmap_write_bits(micfil->regmap, REG_MICFIL_VAD0_STAT, in hwvad_isr()
1138 micfil->vad_detected = 1; in hwvad_isr()
1141 ret = fsl_micfil_hwvad_disable(micfil); in hwvad_isr()
1150 struct fsl_micfil *micfil = (struct fsl_micfil *)devid; in hwvad_err_isr() local
1151 struct device *dev = &micfil->pdev->dev; in hwvad_err_isr()
1154 regmap_read(micfil->regmap, REG_MICFIL_VAD0_STAT, &vad0_reg); in hwvad_err_isr()
1168 struct fsl_micfil *micfil; in fsl_micfil_probe() local
1173 micfil = devm_kzalloc(&pdev->dev, sizeof(*micfil), GFP_KERNEL); in fsl_micfil_probe()
1174 if (!micfil) in fsl_micfil_probe()
1177 micfil->pdev = pdev; in fsl_micfil_probe()
1178 strscpy(micfil->name, np->name, sizeof(micfil->name)); in fsl_micfil_probe()
1180 micfil->soc = of_device_get_match_data(&pdev->dev); in fsl_micfil_probe()
1185 micfil->mclk = devm_clk_get(&pdev->dev, "ipg_clk_app"); in fsl_micfil_probe()
1186 if (IS_ERR(micfil->mclk)) { in fsl_micfil_probe()
1188 PTR_ERR(micfil->mclk)); in fsl_micfil_probe()
1189 return PTR_ERR(micfil->mclk); in fsl_micfil_probe()
1192 micfil->busclk = devm_clk_get(&pdev->dev, "ipg_clk"); in fsl_micfil_probe()
1193 if (IS_ERR(micfil->busclk)) { in fsl_micfil_probe()
1195 PTR_ERR(micfil->busclk)); in fsl_micfil_probe()
1196 return PTR_ERR(micfil->busclk); in fsl_micfil_probe()
1199 fsl_asoc_get_pll_clocks(&pdev->dev, &micfil->pll8k_clk, in fsl_micfil_probe()
1200 &micfil->pll11k_clk); in fsl_micfil_probe()
1202 micfil->clk_src[MICFIL_AUDIO_PLL1] = micfil->pll8k_clk; in fsl_micfil_probe()
1203 micfil->clk_src[MICFIL_AUDIO_PLL2] = micfil->pll11k_clk; in fsl_micfil_probe()
1204 micfil->clk_src[MICFIL_CLK_EXT3] = devm_clk_get(&pdev->dev, "clkext3"); in fsl_micfil_probe()
1205 if (IS_ERR(micfil->clk_src[MICFIL_CLK_EXT3])) in fsl_micfil_probe()
1206 micfil->clk_src[MICFIL_CLK_EXT3] = NULL; in fsl_micfil_probe()
1213 micfil->regmap = devm_regmap_init_mmio(&pdev->dev, in fsl_micfil_probe()
1216 if (IS_ERR(micfil->regmap)) { in fsl_micfil_probe()
1218 PTR_ERR(micfil->regmap)); in fsl_micfil_probe()
1219 return PTR_ERR(micfil->regmap); in fsl_micfil_probe()
1226 &micfil->dataline); in fsl_micfil_probe()
1228 micfil->dataline = 1; in fsl_micfil_probe()
1230 if (micfil->dataline & ~micfil->soc->dataline) { in fsl_micfil_probe()
1232 micfil->soc->dataline); in fsl_micfil_probe()
1238 micfil->irq[i] = platform_get_irq(pdev, i); in fsl_micfil_probe()
1239 if (micfil->irq[i] < 0) in fsl_micfil_probe()
1240 return micfil->irq[i]; in fsl_micfil_probe()
1244 ret = devm_request_irq(&pdev->dev, micfil->irq[0], in fsl_micfil_probe()
1246 micfil->name, micfil); in fsl_micfil_probe()
1249 micfil->irq[0]); in fsl_micfil_probe()
1254 ret = devm_request_irq(&pdev->dev, micfil->irq[1], in fsl_micfil_probe()
1256 micfil->name, micfil); in fsl_micfil_probe()
1259 micfil->irq[1]); in fsl_micfil_probe()
1264 ret = devm_request_threaded_irq(&pdev->dev, micfil->irq[2], in fsl_micfil_probe()
1266 IRQF_SHARED, micfil->name, micfil); in fsl_micfil_probe()
1269 micfil->irq[0]); in fsl_micfil_probe()
1274 ret = devm_request_irq(&pdev->dev, micfil->irq[3], in fsl_micfil_probe()
1276 micfil->name, micfil); in fsl_micfil_probe()
1279 micfil->irq[1]); in fsl_micfil_probe()
1283 micfil->dma_params_rx.chan_name = "rx"; in fsl_micfil_probe()
1284 micfil->dma_params_rx.addr = res->start + REG_MICFIL_DATACH0; in fsl_micfil_probe()
1285 micfil->dma_params_rx.maxburst = MICFIL_DMA_MAXBURST_RX; in fsl_micfil_probe()
1287 platform_set_drvdata(pdev, micfil); in fsl_micfil_probe()
1309 regcache_cache_only(micfil->regmap, true); in fsl_micfil_probe()
1321 fsl_micfil_dai.capture.formats = micfil->soc->formats; in fsl_micfil_probe()
1349 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_runtime_suspend() local
1351 regcache_cache_only(micfil->regmap, true); in fsl_micfil_runtime_suspend()
1353 clk_disable_unprepare(micfil->mclk); in fsl_micfil_runtime_suspend()
1354 clk_disable_unprepare(micfil->busclk); in fsl_micfil_runtime_suspend()
1361 struct fsl_micfil *micfil = dev_get_drvdata(dev); in fsl_micfil_runtime_resume() local
1364 ret = clk_prepare_enable(micfil->busclk); in fsl_micfil_runtime_resume()
1368 ret = clk_prepare_enable(micfil->mclk); in fsl_micfil_runtime_resume()
1370 clk_disable_unprepare(micfil->busclk); in fsl_micfil_runtime_resume()
1374 regcache_cache_only(micfil->regmap, false); in fsl_micfil_runtime_resume()
1375 regcache_mark_dirty(micfil->regmap); in fsl_micfil_runtime_resume()
1376 regcache_sync(micfil->regmap); in fsl_micfil_runtime_resume()