Lines Matching defs:ssi
3 // imx-ssi.c -- ALSA Soc Audio Layer
43 #include <linux/platform_data/asoc-imx-ssi.h>
45 #include "imx-ssi.h"
57 struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
60 sccr = readl(ssi->base + SSI_STCCR);
63 writel(sccr, ssi->base + SSI_STCCR);
65 sccr = readl(ssi->base + SSI_SRCCR);
68 writel(sccr, ssi->base + SSI_SRCCR);
70 writel(~tx_mask, ssi->base + SSI_STMSK);
71 writel(~rx_mask, ssi->base + SSI_SRMSK);
82 struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
85 scr = readl(ssi->base + SSI_SCR) & ~(SSI_SCR_SYN | SSI_SCR_NET);
94 if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) {
140 if (ssi->flags & IMX_SSI_NET)
142 if (ssi->flags & IMX_SSI_SYN)
145 writel(strcr, ssi->base + SSI_STCR);
146 writel(strcr, ssi->base + SSI_SRCR);
147 writel(scr, ssi->base + SSI_SCR);
159 struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
162 scr = readl(ssi->base + SSI_SCR);
175 writel(scr, ssi->base + SSI_SCR);
187 struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
190 stccr = readl(ssi->base + SSI_STCCR);
191 srccr = readl(ssi->base + SSI_SRCCR);
222 writel(stccr, ssi->base + SSI_STCCR);
223 writel(srccr, ssi->base + SSI_SRCCR);
236 struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
245 if (ssi->flags & IMX_SSI_SYN)
248 sccr = readl(ssi->base + reg) & ~SSI_STCCR_WL_MASK;
263 writel(sccr, ssi->base + reg);
271 struct imx_ssi *ssi = snd_soc_dai_get_drvdata(dai);
275 scr = readl(ssi->base + SSI_SCR);
276 sier = readl(ssi->base + SSI_SIER);
279 if (ssi->flags & IMX_SSI_DMA)
284 if (ssi->flags & IMX_SSI_DMA)
321 if (!(ssi->flags & IMX_SSI_USE_AC97))
323 writel(scr, ssi->base + SSI_SCR);
325 writel(sier, ssi->base + SSI_SIER);
341 struct imx_ssi *ssi = dev_get_drvdata(dai->dev);
344 snd_soc_dai_set_drvdata(dai, ssi);
346 val = SSI_SFCSR_TFWM0(ssi->dma_params_tx.maxburst) |
347 SSI_SFCSR_RFWM0(ssi->dma_params_rx.maxburst);
348 writel(val, ssi->base + SSI_SFCSR);
351 dai->playback_dma_data = &ssi->dma_params_tx;
352 dai->capture_dma_data = &ssi->dma_params_rx;
505 struct imx_ssi *ssi;
510 ssi = devm_kzalloc(&pdev->dev, sizeof(*ssi), GFP_KERNEL);
511 if (!ssi)
513 dev_set_drvdata(&pdev->dev, ssi);
516 ssi->ac97_reset = pdata->ac97_reset;
517 ssi->ac97_warm_reset = pdata->ac97_warm_reset;
518 ssi->flags = pdata->flags;
521 ssi->irq = platform_get_irq(pdev, 0);
522 if (ssi->irq < 0)
523 return ssi->irq;
525 ssi->clk = devm_clk_get(&pdev->dev, NULL);
526 if (IS_ERR(ssi->clk)) {
527 ret = PTR_ERR(ssi->clk);
532 ret = clk_prepare_enable(ssi->clk);
537 ssi->base = devm_ioremap_resource(&pdev->dev, res);
538 if (IS_ERR(ssi->base)) {
539 ret = PTR_ERR(ssi->base);
543 if (ssi->flags & IMX_SSI_USE_AC97) {
549 ac97_ssi = ssi;
550 setup_channel_to_ac97(ssi);
555 writel(0x0, ssi->base + SSI_SIER);
557 ssi->dma_params_rx.addr = res->start + SSI_SRX0;
558 ssi->dma_params_tx.addr = res->start + SSI_STX0;
560 ssi->dma_params_tx.maxburst = 6;
561 ssi->dma_params_rx.maxburst = 4;
563 ssi->dma_params_tx.filter_data = &ssi->filter_data_tx;
564 ssi->dma_params_rx.filter_data = &ssi->filter_data_rx;
568 imx_pcm_dma_params_init_data(&ssi->filter_data_tx, res->start,
574 imx_pcm_dma_params_init_data(&ssi->filter_data_rx, res->start,
578 platform_set_drvdata(pdev, ssi);
593 ssi->fiq_params.irq = ssi->irq;
594 ssi->fiq_params.base = ssi->base;
595 ssi->fiq_params.dma_params_rx = &ssi->dma_params_rx;
596 ssi->fiq_params.dma_params_tx = &ssi->dma_params_tx;
598 ssi->fiq_init = imx_pcm_fiq_init(pdev, &ssi->fiq_params);
599 ssi->dma_init = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
601 if (ssi->fiq_init && ssi->dma_init) {
602 ret = ssi->fiq_init;
611 clk_disable_unprepare(ssi->clk);
620 struct imx_ssi *ssi = platform_get_drvdata(pdev);
622 if (!ssi->fiq_init)
627 if (ssi->flags & IMX_SSI_USE_AC97)
630 clk_disable_unprepare(ssi->clk);
641 .name = "imx-ssi",
651 MODULE_ALIAS("platform:imx-ssi");