Lines Matching refs:esai_priv

71 	struct fsl_esai *esai_priv = (struct fsl_esai *)devid;  in esai_isr()  local
72 struct platform_device *pdev = esai_priv->pdev; in esai_isr()
75 regmap_read(esai_priv->regmap, REG_ESAI_ESR, &esr); in esai_isr()
125 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_divisor_cal() local
184 regmap_update_bits(esai_priv->regmap, REG_ESAI_xCCR(tx), in fsl_esai_divisor_cal()
193 regmap_update_bits(esai_priv->regmap, REG_ESAI_xCCR(tx), in fsl_esai_divisor_cal()
213 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_set_dai_sysclk() local
214 struct clk *clksrc = esai_priv->extalclk; in fsl_esai_set_dai_sysclk()
222 if (freq == esai_priv->hck_rate[tx] && dir == esai_priv->hck_dir[tx]) in fsl_esai_set_dai_sysclk()
226 esai_priv->sck_div[tx] = true; in fsl_esai_set_dai_sysclk()
229 regmap_update_bits(esai_priv->regmap, REG_ESAI_xCCR(tx), in fsl_esai_set_dai_sysclk()
238 clksrc = esai_priv->fsysclk; in fsl_esai_set_dai_sysclk()
272 if (ratio == 1 && clksrc == esai_priv->extalclk) { in fsl_esai_set_dai_sysclk()
287 esai_priv->sck_div[tx] = false; in fsl_esai_set_dai_sysclk()
290 esai_priv->hck_dir[tx] = dir; in fsl_esai_set_dai_sysclk()
291 esai_priv->hck_rate[tx] = freq; in fsl_esai_set_dai_sysclk()
293 regmap_update_bits(esai_priv->regmap, REG_ESAI_ECR, in fsl_esai_set_dai_sysclk()
305 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_set_bclk() local
306 u32 hck_rate = esai_priv->hck_rate[tx]; in fsl_esai_set_bclk()
311 if (esai_priv->slave_mode || esai_priv->sck_rate[tx] == freq) in fsl_esai_set_bclk()
329 if (!esai_priv->sck_div[tx] && (ratio > 16 || ratio == 0)) { in fsl_esai_set_bclk()
335 esai_priv->sck_div[tx] ? 0 : ratio); in fsl_esai_set_bclk()
340 esai_priv->sck_rate[tx] = freq; in fsl_esai_set_bclk()
348 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_set_dai_tdm_slot() local
350 regmap_update_bits(esai_priv->regmap, REG_ESAI_TCCR, in fsl_esai_set_dai_tdm_slot()
353 regmap_update_bits(esai_priv->regmap, REG_ESAI_TSMA, in fsl_esai_set_dai_tdm_slot()
355 regmap_update_bits(esai_priv->regmap, REG_ESAI_TSMB, in fsl_esai_set_dai_tdm_slot()
358 regmap_update_bits(esai_priv->regmap, REG_ESAI_RCCR, in fsl_esai_set_dai_tdm_slot()
361 regmap_update_bits(esai_priv->regmap, REG_ESAI_RSMA, in fsl_esai_set_dai_tdm_slot()
363 regmap_update_bits(esai_priv->regmap, REG_ESAI_RSMB, in fsl_esai_set_dai_tdm_slot()
366 esai_priv->slot_width = slot_width; in fsl_esai_set_dai_tdm_slot()
367 esai_priv->slots = slots; in fsl_esai_set_dai_tdm_slot()
374 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_set_dai_fmt() local
427 esai_priv->slave_mode = false; in fsl_esai_set_dai_fmt()
432 esai_priv->slave_mode = true; in fsl_esai_set_dai_fmt()
448 regmap_update_bits(esai_priv->regmap, REG_ESAI_TCR, mask, xcr); in fsl_esai_set_dai_fmt()
449 regmap_update_bits(esai_priv->regmap, REG_ESAI_RCR, mask, xcr); in fsl_esai_set_dai_fmt()
453 regmap_update_bits(esai_priv->regmap, REG_ESAI_TCCR, mask, xccr); in fsl_esai_set_dai_fmt()
454 regmap_update_bits(esai_priv->regmap, REG_ESAI_RCCR, mask, xccr); in fsl_esai_set_dai_fmt()
462 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_startup() local
469 ret = clk_prepare_enable(esai_priv->coreclk); in fsl_esai_startup()
472 if (!IS_ERR(esai_priv->extalclk)) { in fsl_esai_startup()
473 ret = clk_prepare_enable(esai_priv->extalclk); in fsl_esai_startup()
477 if (!IS_ERR(esai_priv->fsysclk)) { in fsl_esai_startup()
478 ret = clk_prepare_enable(esai_priv->fsysclk); in fsl_esai_startup()
485 regmap_update_bits(esai_priv->regmap, REG_ESAI_SAICR, in fsl_esai_startup()
486 ESAI_SAICR_SYNC, esai_priv->synchronous ? in fsl_esai_startup()
490 regmap_update_bits(esai_priv->regmap, REG_ESAI_TCCR, in fsl_esai_startup()
492 regmap_update_bits(esai_priv->regmap, REG_ESAI_RCCR, in fsl_esai_startup()
499 if (!IS_ERR(esai_priv->extalclk)) in fsl_esai_startup()
500 clk_disable_unprepare(esai_priv->extalclk); in fsl_esai_startup()
502 clk_disable_unprepare(esai_priv->coreclk); in fsl_esai_startup()
511 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_hw_params() local
515 u32 pins = DIV_ROUND_UP(channels, esai_priv->slots); in fsl_esai_hw_params()
521 if (esai_priv->slot_width) in fsl_esai_hw_params()
522 slot_width = esai_priv->slot_width; in fsl_esai_hw_params()
524 bclk = params_rate(params) * slot_width * esai_priv->slots; in fsl_esai_hw_params()
531 regmap_update_bits(esai_priv->regmap, REG_ESAI_xCR(tx), in fsl_esai_hw_params()
535 regmap_update_bits(esai_priv->regmap, REG_ESAI_xFCR(tx), in fsl_esai_hw_params()
540 val = ESAI_xFCR_xWA(width) | ESAI_xFCR_xFWM(esai_priv->fifo_depth) | in fsl_esai_hw_params()
543 regmap_update_bits(esai_priv->regmap, REG_ESAI_xFCR(tx), mask, val); in fsl_esai_hw_params()
548 regmap_update_bits(esai_priv->regmap, REG_ESAI_xCR(tx), mask, val); in fsl_esai_hw_params()
551 regmap_update_bits(esai_priv->regmap, REG_ESAI_PRRC, in fsl_esai_hw_params()
553 regmap_update_bits(esai_priv->regmap, REG_ESAI_PCRC, in fsl_esai_hw_params()
561 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_shutdown() local
563 if (!IS_ERR(esai_priv->fsysclk)) in fsl_esai_shutdown()
564 clk_disable_unprepare(esai_priv->fsysclk); in fsl_esai_shutdown()
565 if (!IS_ERR(esai_priv->extalclk)) in fsl_esai_shutdown()
566 clk_disable_unprepare(esai_priv->extalclk); in fsl_esai_shutdown()
567 clk_disable_unprepare(esai_priv->coreclk); in fsl_esai_shutdown()
573 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_trigger() local
576 u32 pins = DIV_ROUND_UP(channels, esai_priv->slots); in fsl_esai_trigger()
582 regmap_update_bits(esai_priv->regmap, REG_ESAI_xFCR(tx), in fsl_esai_trigger()
587 regmap_write(esai_priv->regmap, REG_ESAI_ETDR, 0x0); in fsl_esai_trigger()
589 regmap_update_bits(esai_priv->regmap, REG_ESAI_xCR(tx), in fsl_esai_trigger()
596 regmap_update_bits(esai_priv->regmap, REG_ESAI_xCR(tx), in fsl_esai_trigger()
600 regmap_update_bits(esai_priv->regmap, REG_ESAI_xFCR(tx), in fsl_esai_trigger()
602 regmap_update_bits(esai_priv->regmap, REG_ESAI_xFCR(tx), in fsl_esai_trigger()
624 struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai); in fsl_esai_dai_probe() local
626 snd_soc_dai_init_dma_data(dai, &esai_priv->dma_params_tx, in fsl_esai_dai_probe()
627 &esai_priv->dma_params_rx); in fsl_esai_dai_probe()
731 struct fsl_esai *esai_priv; in fsl_esai_probe() local
737 esai_priv = devm_kzalloc(&pdev->dev, sizeof(*esai_priv), GFP_KERNEL); in fsl_esai_probe()
738 if (!esai_priv) in fsl_esai_probe()
741 esai_priv->pdev = pdev; in fsl_esai_probe()
742 strncpy(esai_priv->name, np->name, sizeof(esai_priv->name) - 1); in fsl_esai_probe()
750 esai_priv->regmap = devm_regmap_init_mmio_clk(&pdev->dev, in fsl_esai_probe()
752 if (IS_ERR(esai_priv->regmap)) { in fsl_esai_probe()
754 PTR_ERR(esai_priv->regmap)); in fsl_esai_probe()
755 return PTR_ERR(esai_priv->regmap); in fsl_esai_probe()
758 esai_priv->coreclk = devm_clk_get(&pdev->dev, "core"); in fsl_esai_probe()
759 if (IS_ERR(esai_priv->coreclk)) { in fsl_esai_probe()
761 PTR_ERR(esai_priv->coreclk)); in fsl_esai_probe()
762 return PTR_ERR(esai_priv->coreclk); in fsl_esai_probe()
765 esai_priv->extalclk = devm_clk_get(&pdev->dev, "extal"); in fsl_esai_probe()
766 if (IS_ERR(esai_priv->extalclk)) in fsl_esai_probe()
768 PTR_ERR(esai_priv->extalclk)); in fsl_esai_probe()
770 esai_priv->fsysclk = devm_clk_get(&pdev->dev, "fsys"); in fsl_esai_probe()
771 if (IS_ERR(esai_priv->fsysclk)) in fsl_esai_probe()
773 PTR_ERR(esai_priv->fsysclk)); in fsl_esai_probe()
782 esai_priv->name, esai_priv); in fsl_esai_probe()
789 esai_priv->slots = 2; in fsl_esai_probe()
792 esai_priv->slave_mode = true; in fsl_esai_probe()
797 esai_priv->fifo_depth = be32_to_cpup(iprop); in fsl_esai_probe()
799 esai_priv->fifo_depth = 64; in fsl_esai_probe()
801 esai_priv->dma_params_tx.maxburst = 16; in fsl_esai_probe()
802 esai_priv->dma_params_rx.maxburst = 16; in fsl_esai_probe()
803 esai_priv->dma_params_tx.addr = res->start + REG_ESAI_ETDR; in fsl_esai_probe()
804 esai_priv->dma_params_rx.addr = res->start + REG_ESAI_ERDR; in fsl_esai_probe()
806 esai_priv->synchronous = in fsl_esai_probe()
810 if (esai_priv->synchronous) { in fsl_esai_probe()
816 dev_set_drvdata(&pdev->dev, esai_priv); in fsl_esai_probe()
819 ret = regmap_write(esai_priv->regmap, REG_ESAI_ECR, ESAI_ECR_ERST); in fsl_esai_probe()
829 ret = regmap_write(esai_priv->regmap, REG_ESAI_ECR, ESAI_ECR_ESAIEN); in fsl_esai_probe()