Lines Matching refs:ssp

3  * pxa-ssp.c  --  ALSA Soc Audio Layer
33 #include "pxa-ssp.h"
39 struct ssp_device *ssp;
53 static void dump_registers(struct ssp_device *ssp)
55 dev_dbg(ssp->dev, "SSCR0 0x%08x SSCR1 0x%08x SSTO 0x%08x\n",
56 pxa_ssp_read_reg(ssp, SSCR0), pxa_ssp_read_reg(ssp, SSCR1),
57 pxa_ssp_read_reg(ssp, SSTO));
59 dev_dbg(ssp->dev, "SSPSP 0x%08x SSSR 0x%08x SSACD 0x%08x\n",
60 pxa_ssp_read_reg(ssp, SSPSP), pxa_ssp_read_reg(ssp, SSSR),
61 pxa_ssp_read_reg(ssp, SSACD));
64 static void pxa_ssp_set_dma_params(struct ssp_device *ssp, int width4,
70 dma->addr = ssp->phys_base + SSDR;
77 struct ssp_device *ssp = priv->ssp;
82 clk_prepare_enable(ssp->clk);
83 pxa_ssp_disable(ssp);
103 struct ssp_device *ssp = priv->ssp;
106 pxa_ssp_disable(ssp);
107 clk_disable_unprepare(ssp->clk);
121 struct ssp_device *ssp = priv->ssp;
124 clk_prepare_enable(ssp->clk);
126 priv->cr0 = __raw_readl(ssp->mmio_base + SSCR0);
127 priv->cr1 = __raw_readl(ssp->mmio_base + SSCR1);
128 priv->to = __raw_readl(ssp->mmio_base + SSTO);
129 priv->psp = __raw_readl(ssp->mmio_base + SSPSP);
131 pxa_ssp_disable(ssp);
132 clk_disable_unprepare(ssp->clk);
139 struct ssp_device *ssp = priv->ssp;
142 clk_prepare_enable(ssp->clk);
144 __raw_writel(sssr, ssp->mmio_base + SSSR);
145 __raw_writel(priv->cr0 & ~SSCR0_SSE, ssp->mmio_base + SSCR0);
146 __raw_writel(priv->cr1, ssp->mmio_base + SSCR1);
147 __raw_writel(priv->to, ssp->mmio_base + SSTO);
148 __raw_writel(priv->psp, ssp->mmio_base + SSPSP);
151 pxa_ssp_enable(ssp);
153 clk_disable_unprepare(ssp->clk);
167 static void pxa_ssp_set_scr(struct ssp_device *ssp, u32 div)
169 u32 sscr0 = pxa_ssp_read_reg(ssp, SSCR0);
171 if (ssp->type == PXA25x_SSP) {
178 pxa_ssp_write_reg(ssp, SSCR0, sscr0);
188 struct ssp_device *ssp = priv->ssp;
190 u32 sscr0 = pxa_ssp_read_reg(ssp, SSCR0) &
208 dev_dbg(ssp->dev,
218 if (ssp->type == PXA25x_SSP)
233 pxa_ssp_set_scr(ssp, 1);
242 if (ssp->type != PXA3xx_SSP)
243 clk_disable_unprepare(ssp->clk);
244 pxa_ssp_write_reg(ssp, SSCR0, sscr0);
245 if (ssp->type != PXA3xx_SSP)
246 clk_prepare_enable(ssp->clk);
256 struct ssp_device *ssp = priv->ssp;
257 u32 ssacd = pxa_ssp_read_reg(ssp, SSACD) & ~0x70;
259 if (ssp->type == PXA3xx_SSP)
260 pxa_ssp_write_reg(ssp, SSACDD, 0);
288 if (ssp->type == PXA3xx_SSP) {
297 pxa_ssp_write_reg(ssp, SSACDD, val);
301 dev_dbg(ssp->dev,
310 pxa_ssp_write_reg(ssp, SSACD, ssacd);
322 struct ssp_device *ssp = priv->ssp;
325 sscr0 = pxa_ssp_read_reg(ssp, SSCR0);
342 pxa_ssp_write_reg(ssp, SSTSA, tx_mask);
343 pxa_ssp_write_reg(ssp, SSRSA, rx_mask);
345 pxa_ssp_write_reg(ssp, SSCR0, sscr0);
357 struct ssp_device *ssp = priv->ssp;
360 sscr1 = pxa_ssp_read_reg(ssp, SSCR1);
365 pxa_ssp_write_reg(ssp, SSCR1, sscr1);
417 struct ssp_device *ssp = priv->ssp;
425 sscr0 = pxa_ssp_read_reg(ssp, SSCR0) &
427 sscr1 = pxa_ssp_read_reg(ssp, SSCR1) &
430 sspsp = pxa_ssp_read_reg(ssp, SSPSP) &
483 pxa_ssp_write_reg(ssp, SSCR0, sscr0);
484 pxa_ssp_write_reg(ssp, SSCR1, sscr1);
485 pxa_ssp_write_reg(ssp, SSPSP, sspsp);
490 scfr = pxa_ssp_read_reg(ssp, SSCR1) | SSCR1_SCFR;
491 pxa_ssp_write_reg(ssp, SSCR1, scfr);
493 while (pxa_ssp_read_reg(ssp, SSSR) & SSSR_BSY)
498 dump_registers(ssp);
536 struct ssp_device *ssp = priv->ssp;
540 int ttsa = pxa_ssp_read_reg(ssp, SSTSA) & 0xf;
552 pxa_ssp_set_dma_params(ssp,
557 if (pxa_ssp_read_reg(ssp, SSCR0) & SSCR0_SSE)
565 sscr0 = pxa_ssp_read_reg(ssp, SSCR0) & ~(SSCR0_DSS | SSCR0_EDSS);
570 if (ssp->type == PXA3xx_SSP)
581 pxa_ssp_write_reg(ssp, SSCR0, sscr0);
608 ssacd = pxa_ssp_read_reg(ssp, SSACD);
612 pxa_ssp_write_reg(ssp, SSACD, ssacd);
620 pxa_ssp_set_scr(ssp, bclk / rate);
625 sspsp = pxa_ssp_read_reg(ssp, SSPSP);
636 if (ssp->type != PXA3xx_SSP)
656 pxa_ssp_write_reg(ssp, SSPSP, sspsp);
666 dev_err(ssp->dev, "No TDM timeslot configured\n");
670 dump_registers(ssp);
676 struct ssp_device *ssp, int value)
678 uint32_t sscr0 = pxa_ssp_read_reg(ssp, SSCR0);
679 uint32_t sscr1 = pxa_ssp_read_reg(ssp, SSCR1);
680 uint32_t sspsp = pxa_ssp_read_reg(ssp, SSPSP);
681 uint32_t sssr = pxa_ssp_read_reg(ssp, SSSR);
684 pxa_ssp_write_reg(ssp, SSCR0, sscr0 & ~SSCR0_SSE);
698 pxa_ssp_write_reg(ssp, SSCR1, sscr1);
701 pxa_ssp_write_reg(ssp, SSSR, sssr);
702 pxa_ssp_write_reg(ssp, SSPSP, sspsp);
703 pxa_ssp_write_reg(ssp, SSCR0, sscr0 | SSCR0_SSE);
712 struct ssp_device *ssp = priv->ssp;
717 pxa_ssp_enable(ssp);
720 pxa_ssp_set_running_bit(substream, ssp, 1);
721 val = pxa_ssp_read_reg(ssp, SSSR);
722 pxa_ssp_write_reg(ssp, SSSR, val);
725 pxa_ssp_set_running_bit(substream, ssp, 1);
728 pxa_ssp_set_running_bit(substream, ssp, 0);
731 pxa_ssp_disable(ssp);
734 pxa_ssp_set_running_bit(substream, ssp, 0);
741 dump_registers(ssp);
766 priv->ssp = pxa_ssp_request_of(ssp_handle, "SoC audio");
767 if (priv->ssp == NULL) {
781 priv->ssp = pxa_ssp_request(dai->id + 1, "SoC audio");
782 if (priv->ssp == NULL) {
802 pxa_ssp_free(priv->ssp);
845 .name = "pxa-ssp",
860 { .compatible = "mrvl,pxa-ssp-dai" },
874 .name = "pxa-ssp-dai",
887 MODULE_ALIAS("platform:pxa-ssp-dai");