Lines Matching refs:sai

43 	struct fsl_sai *sai = (struct fsl_sai *)devid;  in fsl_sai_isr()  local
44 struct device *dev = &sai->pdev->dev; in fsl_sai_isr()
56 regmap_read(sai->regmap, FSL_SAI_TCSR, &xcsr); in fsl_sai_isr()
86 regmap_write(sai->regmap, FSL_SAI_TCSR, flags | xcsr); in fsl_sai_isr()
90 regmap_read(sai->regmap, FSL_SAI_RCSR, &xcsr); in fsl_sai_isr()
120 regmap_write(sai->regmap, FSL_SAI_RCSR, flags | xcsr); in fsl_sai_isr()
132 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_set_dai_sysclk_tr() local
153 regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx), in fsl_sai_set_dai_sysclk_tr()
185 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_set_dai_fmt_tr() local
189 if (!sai->is_lsb_first) in fsl_sai_set_dai_fmt_tr()
220 sai->is_dsp_mode = true; in fsl_sai_set_dai_fmt_tr()
228 sai->is_dsp_mode = true; in fsl_sai_set_dai_fmt_tr()
265 sai->is_slave_mode = true; in fsl_sai_set_dai_fmt_tr()
272 sai->is_slave_mode = true; in fsl_sai_set_dai_fmt_tr()
278 regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx), in fsl_sai_set_dai_fmt_tr()
280 regmap_update_bits(sai->regmap, FSL_SAI_xCR4(tx), in fsl_sai_set_dai_fmt_tr()
306 struct fsl_sai *sai = snd_soc_dai_get_drvdata(dai); in fsl_sai_set_bclk() local
313 if (sai->is_slave_mode) in fsl_sai_set_bclk()
317 clk_rate = clk_get_rate(sai->mclk_clk[id]); in fsl_sai_set_bclk()
343 sai->mclk_id[tx] = id; in fsl_sai_set_bclk()
357 if ((tx && sai->synchronous[TX]) || (!tx && !sai->synchronous[RX])) { in fsl_sai_set_bclk()
358 regmap_update_bits(sai->regmap, FSL_SAI_RCR2, in fsl_sai_set_bclk()
360 FSL_SAI_CR2_MSEL(sai->mclk_id[tx])); in fsl_sai_set_bclk()
361 regmap_update_bits(sai->regmap, FSL_SAI_RCR2, in fsl_sai_set_bclk()
364 regmap_update_bits(sai->regmap, FSL_SAI_TCR2, in fsl_sai_set_bclk()
366 FSL_SAI_CR2_MSEL(sai->mclk_id[tx])); in fsl_sai_set_bclk()
367 regmap_update_bits(sai->regmap, FSL_SAI_TCR2, in fsl_sai_set_bclk()
372 sai->mclk_id[tx], savediv, savesub); in fsl_sai_set_bclk()
381 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_hw_params() local
388 if (!sai->is_slave_mode) { in fsl_sai_hw_params()
395 if (!(sai->mclk_streams & BIT(substream->stream))) { in fsl_sai_hw_params()
396 ret = clk_prepare_enable(sai->mclk_clk[sai->mclk_id[tx]]); in fsl_sai_hw_params()
400 sai->mclk_streams |= BIT(substream->stream); in fsl_sai_hw_params()
405 if (!sai->is_dsp_mode) in fsl_sai_hw_params()
411 if (sai->is_lsb_first) in fsl_sai_hw_params()
418 regmap_update_bits(sai->regmap, FSL_SAI_xCR4(tx), in fsl_sai_hw_params()
421 regmap_update_bits(sai->regmap, FSL_SAI_xCR5(tx), in fsl_sai_hw_params()
424 regmap_write(sai->regmap, FSL_SAI_xMR(tx), ~0UL - ((1 << channels) - 1)); in fsl_sai_hw_params()
432 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_hw_free() local
435 if (!sai->is_slave_mode && in fsl_sai_hw_free()
436 sai->mclk_streams & BIT(substream->stream)) { in fsl_sai_hw_free()
437 clk_disable_unprepare(sai->mclk_clk[sai->mclk_id[tx]]); in fsl_sai_hw_free()
438 sai->mclk_streams &= ~BIT(substream->stream); in fsl_sai_hw_free()
448 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_trigger() local
457 regmap_update_bits(sai->regmap, FSL_SAI_TCR2, FSL_SAI_CR2_SYNC, in fsl_sai_trigger()
458 sai->synchronous[TX] ? FSL_SAI_CR2_SYNC : 0); in fsl_sai_trigger()
459 regmap_update_bits(sai->regmap, FSL_SAI_RCR2, FSL_SAI_CR2_SYNC, in fsl_sai_trigger()
460 sai->synchronous[RX] ? FSL_SAI_CR2_SYNC : 0); in fsl_sai_trigger()
470 regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), in fsl_sai_trigger()
473 regmap_update_bits(sai->regmap, FSL_SAI_RCSR, in fsl_sai_trigger()
475 regmap_update_bits(sai->regmap, FSL_SAI_TCSR, in fsl_sai_trigger()
478 regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), in fsl_sai_trigger()
484 regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), in fsl_sai_trigger()
486 regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), in fsl_sai_trigger()
490 regmap_read(sai->regmap, FSL_SAI_xCSR(!tx), &xcsr); in fsl_sai_trigger()
493 regmap_update_bits(sai->regmap, FSL_SAI_TCSR, in fsl_sai_trigger()
495 regmap_update_bits(sai->regmap, FSL_SAI_RCSR, in fsl_sai_trigger()
501 regmap_read(sai->regmap, FSL_SAI_xCSR(tx), &xcsr); in fsl_sai_trigger()
504 regmap_update_bits(sai->regmap, FSL_SAI_TCSR, in fsl_sai_trigger()
506 regmap_update_bits(sai->regmap, FSL_SAI_RCSR, in fsl_sai_trigger()
516 if (!sai->is_slave_mode) { in fsl_sai_trigger()
518 regmap_write(sai->regmap, in fsl_sai_trigger()
520 regmap_write(sai->regmap, in fsl_sai_trigger()
523 regmap_write(sai->regmap, FSL_SAI_TCSR, 0); in fsl_sai_trigger()
524 regmap_write(sai->regmap, FSL_SAI_RCSR, 0); in fsl_sai_trigger()
538 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_startup() local
540 struct device *dev = &sai->pdev->dev; in fsl_sai_startup()
543 ret = clk_prepare_enable(sai->bus_clk); in fsl_sai_startup()
549 regmap_update_bits(sai->regmap, FSL_SAI_xCR3(tx), FSL_SAI_CR3_TRCE, in fsl_sai_startup()
561 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_shutdown() local
564 regmap_update_bits(sai->regmap, FSL_SAI_xCR3(tx), FSL_SAI_CR3_TRCE, 0); in fsl_sai_shutdown()
566 clk_disable_unprepare(sai->bus_clk); in fsl_sai_shutdown()
581 struct fsl_sai *sai = dev_get_drvdata(cpu_dai->dev); in fsl_sai_dai_probe() local
584 regmap_write(sai->regmap, FSL_SAI_TCSR, FSL_SAI_CSR_SR); in fsl_sai_dai_probe()
585 regmap_write(sai->regmap, FSL_SAI_RCSR, FSL_SAI_CSR_SR); in fsl_sai_dai_probe()
587 regmap_write(sai->regmap, FSL_SAI_TCSR, 0); in fsl_sai_dai_probe()
588 regmap_write(sai->regmap, FSL_SAI_RCSR, 0); in fsl_sai_dai_probe()
590 regmap_update_bits(sai->regmap, FSL_SAI_TCR1, FSL_SAI_CR1_RFW_MASK, in fsl_sai_dai_probe()
592 regmap_update_bits(sai->regmap, FSL_SAI_RCR1, FSL_SAI_CR1_RFW_MASK, in fsl_sai_dai_probe()
595 snd_soc_dai_init_dma_data(cpu_dai, &sai->dma_params_tx, in fsl_sai_dai_probe()
596 &sai->dma_params_rx); in fsl_sai_dai_probe()
598 snd_soc_dai_set_drvdata(cpu_dai, sai); in fsl_sai_dai_probe()
711 struct fsl_sai *sai; in fsl_sai_probe() local
717 sai = devm_kzalloc(&pdev->dev, sizeof(*sai), GFP_KERNEL); in fsl_sai_probe()
718 if (!sai) in fsl_sai_probe()
721 sai->pdev = pdev; in fsl_sai_probe()
724 sai->sai_on_imx = true; in fsl_sai_probe()
726 sai->is_lsb_first = of_property_read_bool(np, "lsb-first"); in fsl_sai_probe()
733 sai->regmap = devm_regmap_init_mmio_clk(&pdev->dev, in fsl_sai_probe()
737 if (IS_ERR(sai->regmap)) in fsl_sai_probe()
738 sai->regmap = devm_regmap_init_mmio_clk(&pdev->dev, in fsl_sai_probe()
740 if (IS_ERR(sai->regmap)) { in fsl_sai_probe()
742 return PTR_ERR(sai->regmap); in fsl_sai_probe()
746 sai->bus_clk = devm_clk_get(&pdev->dev, "bus"); in fsl_sai_probe()
747 if (IS_ERR(sai->bus_clk)) { in fsl_sai_probe()
749 PTR_ERR(sai->bus_clk)); in fsl_sai_probe()
750 sai->bus_clk = NULL; in fsl_sai_probe()
753 sai->mclk_clk[0] = sai->bus_clk; in fsl_sai_probe()
756 sai->mclk_clk[i] = devm_clk_get(&pdev->dev, tmp); in fsl_sai_probe()
757 if (IS_ERR(sai->mclk_clk[i])) { in fsl_sai_probe()
759 i + 1, PTR_ERR(sai->mclk_clk[i])); in fsl_sai_probe()
760 sai->mclk_clk[i] = NULL; in fsl_sai_probe()
770 ret = devm_request_irq(&pdev->dev, irq, fsl_sai_isr, 0, np->name, sai); in fsl_sai_probe()
777 sai->synchronous[RX] = true; in fsl_sai_probe()
778 sai->synchronous[TX] = false; in fsl_sai_probe()
792 sai->synchronous[RX] = false; in fsl_sai_probe()
793 sai->synchronous[TX] = true; in fsl_sai_probe()
796 sai->synchronous[RX] = false; in fsl_sai_probe()
797 sai->synchronous[TX] = false; in fsl_sai_probe()
803 sai->dma_params_rx.addr = res->start + FSL_SAI_RDR; in fsl_sai_probe()
804 sai->dma_params_tx.addr = res->start + FSL_SAI_TDR; in fsl_sai_probe()
805 sai->dma_params_rx.maxburst = FSL_SAI_MAXBURST_RX; in fsl_sai_probe()
806 sai->dma_params_tx.maxburst = FSL_SAI_MAXBURST_TX; in fsl_sai_probe()
808 platform_set_drvdata(pdev, sai); in fsl_sai_probe()
815 if (sai->sai_on_imx) in fsl_sai_probe()
831 struct fsl_sai *sai = dev_get_drvdata(dev); in fsl_sai_suspend() local
833 regcache_cache_only(sai->regmap, true); in fsl_sai_suspend()
834 regcache_mark_dirty(sai->regmap); in fsl_sai_suspend()
841 struct fsl_sai *sai = dev_get_drvdata(dev); in fsl_sai_resume() local
843 regcache_cache_only(sai->regmap, false); in fsl_sai_resume()
844 regmap_write(sai->regmap, FSL_SAI_TCSR, FSL_SAI_CSR_SR); in fsl_sai_resume()
845 regmap_write(sai->regmap, FSL_SAI_RCSR, FSL_SAI_CSR_SR); in fsl_sai_resume()
847 regmap_write(sai->regmap, FSL_SAI_TCSR, 0); in fsl_sai_resume()
848 regmap_write(sai->regmap, FSL_SAI_RCSR, 0); in fsl_sai_resume()
849 return regcache_sync(sai->regmap); in fsl_sai_resume()