Lines Matching refs:sai
40 struct fsl_sai *sai = (struct fsl_sai *)devid; in fsl_sai_isr() local
41 struct device *dev = &sai->pdev->dev; in fsl_sai_isr()
53 regmap_read(sai->regmap, FSL_SAI_TCSR, &xcsr); in fsl_sai_isr()
83 regmap_write(sai->regmap, FSL_SAI_TCSR, flags | xcsr); in fsl_sai_isr()
87 regmap_read(sai->regmap, FSL_SAI_RCSR, &xcsr); in fsl_sai_isr()
117 regmap_write(sai->regmap, FSL_SAI_RCSR, flags | xcsr); in fsl_sai_isr()
129 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_set_dai_tdm_slot() local
131 sai->slots = slots; in fsl_sai_set_dai_tdm_slot()
132 sai->slot_width = slot_width; in fsl_sai_set_dai_tdm_slot()
140 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_set_dai_sysclk_tr() local
161 regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx), in fsl_sai_set_dai_sysclk_tr()
193 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_set_dai_fmt_tr() local
197 if (!sai->is_lsb_first) in fsl_sai_set_dai_fmt_tr()
228 sai->is_dsp_mode = true; in fsl_sai_set_dai_fmt_tr()
236 sai->is_dsp_mode = true; in fsl_sai_set_dai_fmt_tr()
273 sai->is_slave_mode = true; in fsl_sai_set_dai_fmt_tr()
280 sai->is_slave_mode = true; in fsl_sai_set_dai_fmt_tr()
286 regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx), in fsl_sai_set_dai_fmt_tr()
288 regmap_update_bits(sai->regmap, FSL_SAI_xCR4(tx), in fsl_sai_set_dai_fmt_tr()
314 struct fsl_sai *sai = snd_soc_dai_get_drvdata(dai); in fsl_sai_set_bclk() local
321 if (sai->is_slave_mode) in fsl_sai_set_bclk()
325 clk_rate = clk_get_rate(sai->mclk_clk[id]); in fsl_sai_set_bclk()
351 sai->mclk_id[tx] = id; in fsl_sai_set_bclk()
375 if ((sai->synchronous[TX] && !sai->synchronous[RX]) || in fsl_sai_set_bclk()
376 (!tx && !sai->synchronous[RX])) { in fsl_sai_set_bclk()
377 regmap_update_bits(sai->regmap, FSL_SAI_RCR2, in fsl_sai_set_bclk()
379 FSL_SAI_CR2_MSEL(sai->mclk_id[tx])); in fsl_sai_set_bclk()
380 regmap_update_bits(sai->regmap, FSL_SAI_RCR2, in fsl_sai_set_bclk()
382 } else if ((sai->synchronous[RX] && !sai->synchronous[TX]) || in fsl_sai_set_bclk()
383 (tx && !sai->synchronous[TX])) { in fsl_sai_set_bclk()
384 regmap_update_bits(sai->regmap, FSL_SAI_TCR2, in fsl_sai_set_bclk()
386 FSL_SAI_CR2_MSEL(sai->mclk_id[tx])); in fsl_sai_set_bclk()
387 regmap_update_bits(sai->regmap, FSL_SAI_TCR2, in fsl_sai_set_bclk()
392 sai->mclk_id[tx], savediv, savesub); in fsl_sai_set_bclk()
401 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_hw_params() local
410 if (sai->slots) in fsl_sai_hw_params()
411 slots = sai->slots; in fsl_sai_hw_params()
413 if (sai->slot_width) in fsl_sai_hw_params()
414 slot_width = sai->slot_width; in fsl_sai_hw_params()
416 if (!sai->is_slave_mode) { in fsl_sai_hw_params()
423 if (!(sai->mclk_streams & BIT(substream->stream))) { in fsl_sai_hw_params()
424 ret = clk_prepare_enable(sai->mclk_clk[sai->mclk_id[tx]]); in fsl_sai_hw_params()
428 sai->mclk_streams |= BIT(substream->stream); in fsl_sai_hw_params()
432 if (!sai->is_dsp_mode) in fsl_sai_hw_params()
438 if (sai->is_lsb_first) in fsl_sai_hw_params()
452 if (!sai->is_slave_mode) { in fsl_sai_hw_params()
453 if (!sai->synchronous[TX] && sai->synchronous[RX] && !tx) { in fsl_sai_hw_params()
454 regmap_update_bits(sai->regmap, FSL_SAI_TCR4, in fsl_sai_hw_params()
457 regmap_update_bits(sai->regmap, FSL_SAI_TCR5, in fsl_sai_hw_params()
460 regmap_write(sai->regmap, FSL_SAI_TMR, in fsl_sai_hw_params()
462 } else if (!sai->synchronous[RX] && sai->synchronous[TX] && tx) { in fsl_sai_hw_params()
463 regmap_update_bits(sai->regmap, FSL_SAI_RCR4, in fsl_sai_hw_params()
466 regmap_update_bits(sai->regmap, FSL_SAI_RCR5, in fsl_sai_hw_params()
469 regmap_write(sai->regmap, FSL_SAI_RMR, in fsl_sai_hw_params()
474 regmap_update_bits(sai->regmap, FSL_SAI_xCR4(tx), in fsl_sai_hw_params()
477 regmap_update_bits(sai->regmap, FSL_SAI_xCR5(tx), in fsl_sai_hw_params()
480 regmap_write(sai->regmap, FSL_SAI_xMR(tx), ~0UL - ((1 << channels) - 1)); in fsl_sai_hw_params()
488 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_hw_free() local
491 if (!sai->is_slave_mode && in fsl_sai_hw_free()
492 sai->mclk_streams & BIT(substream->stream)) { in fsl_sai_hw_free()
493 clk_disable_unprepare(sai->mclk_clk[sai->mclk_id[tx]]); in fsl_sai_hw_free()
494 sai->mclk_streams &= ~BIT(substream->stream); in fsl_sai_hw_free()
504 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_trigger() local
513 regmap_update_bits(sai->regmap, FSL_SAI_TCR2, FSL_SAI_CR2_SYNC, in fsl_sai_trigger()
514 sai->synchronous[TX] ? FSL_SAI_CR2_SYNC : 0); in fsl_sai_trigger()
515 regmap_update_bits(sai->regmap, FSL_SAI_RCR2, FSL_SAI_CR2_SYNC, in fsl_sai_trigger()
516 sai->synchronous[RX] ? FSL_SAI_CR2_SYNC : 0); in fsl_sai_trigger()
526 regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), in fsl_sai_trigger()
529 regmap_update_bits(sai->regmap, FSL_SAI_RCSR, in fsl_sai_trigger()
531 regmap_update_bits(sai->regmap, FSL_SAI_TCSR, in fsl_sai_trigger()
534 regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), in fsl_sai_trigger()
540 regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), in fsl_sai_trigger()
542 regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), in fsl_sai_trigger()
546 regmap_read(sai->regmap, FSL_SAI_xCSR(!tx), &xcsr); in fsl_sai_trigger()
549 regmap_update_bits(sai->regmap, FSL_SAI_TCSR, in fsl_sai_trigger()
551 regmap_update_bits(sai->regmap, FSL_SAI_RCSR, in fsl_sai_trigger()
557 regmap_read(sai->regmap, FSL_SAI_xCSR(tx), &xcsr); in fsl_sai_trigger()
560 regmap_update_bits(sai->regmap, FSL_SAI_TCSR, in fsl_sai_trigger()
562 regmap_update_bits(sai->regmap, FSL_SAI_RCSR, in fsl_sai_trigger()
572 if (!sai->is_slave_mode) { in fsl_sai_trigger()
574 regmap_write(sai->regmap, in fsl_sai_trigger()
576 regmap_write(sai->regmap, in fsl_sai_trigger()
579 regmap_write(sai->regmap, FSL_SAI_TCSR, 0); in fsl_sai_trigger()
580 regmap_write(sai->regmap, FSL_SAI_RCSR, 0); in fsl_sai_trigger()
594 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_startup() local
596 struct device *dev = &sai->pdev->dev; in fsl_sai_startup()
599 ret = clk_prepare_enable(sai->bus_clk); in fsl_sai_startup()
605 regmap_update_bits(sai->regmap, FSL_SAI_xCR3(tx), FSL_SAI_CR3_TRCE, in fsl_sai_startup()
617 struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); in fsl_sai_shutdown() local
620 regmap_update_bits(sai->regmap, FSL_SAI_xCR3(tx), FSL_SAI_CR3_TRCE, 0); in fsl_sai_shutdown()
622 clk_disable_unprepare(sai->bus_clk); in fsl_sai_shutdown()
638 struct fsl_sai *sai = dev_get_drvdata(cpu_dai->dev); in fsl_sai_dai_probe() local
641 regmap_write(sai->regmap, FSL_SAI_TCSR, FSL_SAI_CSR_SR); in fsl_sai_dai_probe()
642 regmap_write(sai->regmap, FSL_SAI_RCSR, FSL_SAI_CSR_SR); in fsl_sai_dai_probe()
644 regmap_write(sai->regmap, FSL_SAI_TCSR, 0); in fsl_sai_dai_probe()
645 regmap_write(sai->regmap, FSL_SAI_RCSR, 0); in fsl_sai_dai_probe()
647 regmap_update_bits(sai->regmap, FSL_SAI_TCR1, FSL_SAI_CR1_RFW_MASK, in fsl_sai_dai_probe()
649 regmap_update_bits(sai->regmap, FSL_SAI_RCR1, FSL_SAI_CR1_RFW_MASK, in fsl_sai_dai_probe()
652 snd_soc_dai_init_dma_data(cpu_dai, &sai->dma_params_tx, in fsl_sai_dai_probe()
653 &sai->dma_params_rx); in fsl_sai_dai_probe()
655 snd_soc_dai_set_drvdata(cpu_dai, sai); in fsl_sai_dai_probe()
784 struct fsl_sai *sai; in fsl_sai_probe() local
792 sai = devm_kzalloc(&pdev->dev, sizeof(*sai), GFP_KERNEL); in fsl_sai_probe()
793 if (!sai) in fsl_sai_probe()
796 sai->pdev = pdev; in fsl_sai_probe()
800 sai->sai_on_imx = true; in fsl_sai_probe()
802 sai->is_lsb_first = of_property_read_bool(np, "lsb-first"); in fsl_sai_probe()
809 sai->regmap = devm_regmap_init_mmio_clk(&pdev->dev, in fsl_sai_probe()
813 if (IS_ERR(sai->regmap)) in fsl_sai_probe()
814 sai->regmap = devm_regmap_init_mmio_clk(&pdev->dev, in fsl_sai_probe()
816 if (IS_ERR(sai->regmap)) { in fsl_sai_probe()
818 return PTR_ERR(sai->regmap); in fsl_sai_probe()
822 sai->bus_clk = devm_clk_get(&pdev->dev, "bus"); in fsl_sai_probe()
823 if (IS_ERR(sai->bus_clk)) { in fsl_sai_probe()
825 PTR_ERR(sai->bus_clk)); in fsl_sai_probe()
826 sai->bus_clk = NULL; in fsl_sai_probe()
829 sai->mclk_clk[0] = sai->bus_clk; in fsl_sai_probe()
832 sai->mclk_clk[i] = devm_clk_get(&pdev->dev, tmp); in fsl_sai_probe()
833 if (IS_ERR(sai->mclk_clk[i])) { in fsl_sai_probe()
835 i + 1, PTR_ERR(sai->mclk_clk[i])); in fsl_sai_probe()
836 sai->mclk_clk[i] = NULL; in fsl_sai_probe()
846 ret = devm_request_irq(&pdev->dev, irq, fsl_sai_isr, 0, np->name, sai); in fsl_sai_probe()
853 sai->synchronous[RX] = true; in fsl_sai_probe()
854 sai->synchronous[TX] = false; in fsl_sai_probe()
868 sai->synchronous[RX] = false; in fsl_sai_probe()
869 sai->synchronous[TX] = true; in fsl_sai_probe()
872 sai->synchronous[RX] = false; in fsl_sai_probe()
873 sai->synchronous[TX] = false; in fsl_sai_probe()
895 sai->dma_params_rx.addr = res->start + FSL_SAI_RDR; in fsl_sai_probe()
896 sai->dma_params_tx.addr = res->start + FSL_SAI_TDR; in fsl_sai_probe()
897 sai->dma_params_rx.maxburst = FSL_SAI_MAXBURST_RX; in fsl_sai_probe()
898 sai->dma_params_tx.maxburst = FSL_SAI_MAXBURST_TX; in fsl_sai_probe()
900 platform_set_drvdata(pdev, sai); in fsl_sai_probe()
907 if (sai->sai_on_imx) in fsl_sai_probe()
924 struct fsl_sai *sai = dev_get_drvdata(dev); in fsl_sai_suspend() local
926 regcache_cache_only(sai->regmap, true); in fsl_sai_suspend()
927 regcache_mark_dirty(sai->regmap); in fsl_sai_suspend()
934 struct fsl_sai *sai = dev_get_drvdata(dev); in fsl_sai_resume() local
936 regcache_cache_only(sai->regmap, false); in fsl_sai_resume()
937 regmap_write(sai->regmap, FSL_SAI_TCSR, FSL_SAI_CSR_SR); in fsl_sai_resume()
938 regmap_write(sai->regmap, FSL_SAI_RCSR, FSL_SAI_CSR_SR); in fsl_sai_resume()
940 regmap_write(sai->regmap, FSL_SAI_TCSR, 0); in fsl_sai_resume()
941 regmap_write(sai->regmap, FSL_SAI_RCSR, 0); in fsl_sai_resume()
942 return regcache_sync(sai->regmap); in fsl_sai_resume()