Lines Matching refs:ssp

44 	struct ssp_device *ssp;  member
55 static void dump_registers(struct ssp_device *ssp) in dump_registers() argument
57 dev_dbg(&ssp->pdev->dev, "SSCR0 0x%08x SSCR1 0x%08x SSTO 0x%08x\n", in dump_registers()
58 pxa_ssp_read_reg(ssp, SSCR0), pxa_ssp_read_reg(ssp, SSCR1), in dump_registers()
59 pxa_ssp_read_reg(ssp, SSTO)); in dump_registers()
61 dev_dbg(&ssp->pdev->dev, "SSPSP 0x%08x SSSR 0x%08x SSACD 0x%08x\n", in dump_registers()
62 pxa_ssp_read_reg(ssp, SSPSP), pxa_ssp_read_reg(ssp, SSSR), in dump_registers()
63 pxa_ssp_read_reg(ssp, SSACD)); in dump_registers()
66 static void pxa_ssp_enable(struct ssp_device *ssp) in pxa_ssp_enable() argument
70 sscr0 = __raw_readl(ssp->mmio_base + SSCR0) | SSCR0_SSE; in pxa_ssp_enable()
71 __raw_writel(sscr0, ssp->mmio_base + SSCR0); in pxa_ssp_enable()
74 static void pxa_ssp_disable(struct ssp_device *ssp) in pxa_ssp_disable() argument
78 sscr0 = __raw_readl(ssp->mmio_base + SSCR0) & ~SSCR0_SSE; in pxa_ssp_disable()
79 __raw_writel(sscr0, ssp->mmio_base + SSCR0); in pxa_ssp_disable()
82 static void pxa_ssp_set_dma_params(struct ssp_device *ssp, int width4, in pxa_ssp_set_dma_params() argument
88 dma->addr = ssp->phys_base + SSDR; in pxa_ssp_set_dma_params()
95 struct ssp_device *ssp = priv->ssp; in pxa_ssp_startup() local
100 clk_prepare_enable(ssp->clk); in pxa_ssp_startup()
101 pxa_ssp_disable(ssp); in pxa_ssp_startup()
109 &ssp->drcmr_tx : &ssp->drcmr_rx; in pxa_ssp_startup()
120 struct ssp_device *ssp = priv->ssp; in pxa_ssp_shutdown() local
123 pxa_ssp_disable(ssp); in pxa_ssp_shutdown()
124 clk_disable_unprepare(ssp->clk); in pxa_ssp_shutdown()
136 struct ssp_device *ssp = priv->ssp; in pxa_ssp_suspend() local
139 clk_prepare_enable(ssp->clk); in pxa_ssp_suspend()
141 priv->cr0 = __raw_readl(ssp->mmio_base + SSCR0); in pxa_ssp_suspend()
142 priv->cr1 = __raw_readl(ssp->mmio_base + SSCR1); in pxa_ssp_suspend()
143 priv->to = __raw_readl(ssp->mmio_base + SSTO); in pxa_ssp_suspend()
144 priv->psp = __raw_readl(ssp->mmio_base + SSPSP); in pxa_ssp_suspend()
146 pxa_ssp_disable(ssp); in pxa_ssp_suspend()
147 clk_disable_unprepare(ssp->clk); in pxa_ssp_suspend()
154 struct ssp_device *ssp = priv->ssp; in pxa_ssp_resume() local
157 clk_prepare_enable(ssp->clk); in pxa_ssp_resume()
159 __raw_writel(sssr, ssp->mmio_base + SSSR); in pxa_ssp_resume()
160 __raw_writel(priv->cr0 & ~SSCR0_SSE, ssp->mmio_base + SSCR0); in pxa_ssp_resume()
161 __raw_writel(priv->cr1, ssp->mmio_base + SSCR1); in pxa_ssp_resume()
162 __raw_writel(priv->to, ssp->mmio_base + SSTO); in pxa_ssp_resume()
163 __raw_writel(priv->psp, ssp->mmio_base + SSPSP); in pxa_ssp_resume()
166 pxa_ssp_enable(ssp); in pxa_ssp_resume()
168 clk_disable_unprepare(ssp->clk); in pxa_ssp_resume()
182 static void pxa_ssp_set_scr(struct ssp_device *ssp, u32 div) in pxa_ssp_set_scr() argument
184 u32 sscr0 = pxa_ssp_read_reg(ssp, SSCR0); in pxa_ssp_set_scr()
186 if (ssp->type == PXA25x_SSP) { in pxa_ssp_set_scr()
193 pxa_ssp_write_reg(ssp, SSCR0, sscr0); in pxa_ssp_set_scr()
199 static u32 pxa_ssp_get_scr(struct ssp_device *ssp) in pxa_ssp_get_scr() argument
201 u32 sscr0 = pxa_ssp_read_reg(ssp, SSCR0); in pxa_ssp_get_scr()
204 if (ssp->type == PXA25x_SSP) in pxa_ssp_get_scr()
218 struct ssp_device *ssp = priv->ssp; in pxa_ssp_set_dai_sysclk() local
221 u32 sscr0 = pxa_ssp_read_reg(ssp, SSCR0) & in pxa_ssp_set_dai_sysclk()
224 dev_dbg(&ssp->pdev->dev, in pxa_ssp_set_dai_sysclk()
234 if (ssp->type == PXA25x_SSP) in pxa_ssp_set_dai_sysclk()
249 pxa_ssp_set_scr(ssp, 1); in pxa_ssp_set_dai_sysclk()
258 if (ssp->type != PXA3xx_SSP) in pxa_ssp_set_dai_sysclk()
259 clk_disable_unprepare(ssp->clk); in pxa_ssp_set_dai_sysclk()
260 val = pxa_ssp_read_reg(ssp, SSCR0) | sscr0; in pxa_ssp_set_dai_sysclk()
261 pxa_ssp_write_reg(ssp, SSCR0, val); in pxa_ssp_set_dai_sysclk()
262 if (ssp->type != PXA3xx_SSP) in pxa_ssp_set_dai_sysclk()
263 clk_prepare_enable(ssp->clk); in pxa_ssp_set_dai_sysclk()
275 struct ssp_device *ssp = priv->ssp; in pxa_ssp_set_dai_clkdiv() local
280 val = (pxa_ssp_read_reg(ssp, SSACD) & ~0x7) | SSACD_ACDS(div); in pxa_ssp_set_dai_clkdiv()
281 pxa_ssp_write_reg(ssp, SSACD, val); in pxa_ssp_set_dai_clkdiv()
284 val = pxa_ssp_read_reg(ssp, SSACD); in pxa_ssp_set_dai_clkdiv()
286 if (ssp->type == PXA3xx_SSP) in pxa_ssp_set_dai_clkdiv()
295 if (ssp->type == PXA3xx_SSP) in pxa_ssp_set_dai_clkdiv()
303 pxa_ssp_write_reg(ssp, SSACD, val); in pxa_ssp_set_dai_clkdiv()
306 pxa_ssp_set_scr(ssp, div); in pxa_ssp_set_dai_clkdiv()
322 struct ssp_device *ssp = priv->ssp; in pxa_ssp_set_dai_pll() local
323 u32 ssacd = pxa_ssp_read_reg(ssp, SSACD) & ~0x70; in pxa_ssp_set_dai_pll()
325 if (ssp->type == PXA3xx_SSP) in pxa_ssp_set_dai_pll()
326 pxa_ssp_write_reg(ssp, SSACDD, 0); in pxa_ssp_set_dai_pll()
354 if (ssp->type == PXA3xx_SSP) { in pxa_ssp_set_dai_pll()
362 pxa_ssp_write_reg(ssp, SSACDD, val); in pxa_ssp_set_dai_pll()
366 dev_dbg(&ssp->pdev->dev, in pxa_ssp_set_dai_pll()
375 pxa_ssp_write_reg(ssp, SSACD, ssacd); in pxa_ssp_set_dai_pll()
387 struct ssp_device *ssp = priv->ssp; in pxa_ssp_set_dai_tdm_slot() local
390 sscr0 = pxa_ssp_read_reg(ssp, SSCR0); in pxa_ssp_set_dai_tdm_slot()
407 pxa_ssp_write_reg(ssp, SSTSA, tx_mask); in pxa_ssp_set_dai_tdm_slot()
408 pxa_ssp_write_reg(ssp, SSRSA, rx_mask); in pxa_ssp_set_dai_tdm_slot()
410 pxa_ssp_write_reg(ssp, SSCR0, sscr0); in pxa_ssp_set_dai_tdm_slot()
422 struct ssp_device *ssp = priv->ssp; in pxa_ssp_set_dai_tristate() local
425 sscr1 = pxa_ssp_read_reg(ssp, SSCR1); in pxa_ssp_set_dai_tristate()
430 pxa_ssp_write_reg(ssp, SSCR1, sscr1); in pxa_ssp_set_dai_tristate()
444 struct ssp_device *ssp = priv->ssp; in pxa_ssp_set_dai_fmt() local
452 if (pxa_ssp_read_reg(ssp, SSCR0) & SSCR0_SSE) { in pxa_ssp_set_dai_fmt()
453 dev_err(&ssp->pdev->dev, in pxa_ssp_set_dai_fmt()
459 sscr0 = pxa_ssp_read_reg(ssp, SSCR0) & in pxa_ssp_set_dai_fmt()
511 pxa_ssp_write_reg(ssp, SSCR0, sscr0); in pxa_ssp_set_dai_fmt()
512 pxa_ssp_write_reg(ssp, SSCR1, sscr1); in pxa_ssp_set_dai_fmt()
513 pxa_ssp_write_reg(ssp, SSPSP, sspsp); in pxa_ssp_set_dai_fmt()
518 scfr = pxa_ssp_read_reg(ssp, SSCR1) | SSCR1_SCFR; in pxa_ssp_set_dai_fmt()
519 pxa_ssp_write_reg(ssp, SSCR1, scfr); in pxa_ssp_set_dai_fmt()
521 while (pxa_ssp_read_reg(ssp, SSSR) & SSSR_BSY) in pxa_ssp_set_dai_fmt()
526 dump_registers(ssp); in pxa_ssp_set_dai_fmt()
546 struct ssp_device *ssp = priv->ssp; in pxa_ssp_hw_params() local
551 int ttsa = pxa_ssp_read_reg(ssp, SSTSA) & 0xf; in pxa_ssp_hw_params()
560 pxa_ssp_set_dma_params(ssp, in pxa_ssp_hw_params()
565 if (pxa_ssp_read_reg(ssp, SSCR0) & SSCR0_SSE) in pxa_ssp_hw_params()
569 sscr0 = pxa_ssp_read_reg(ssp, SSCR0) & ~(SSCR0_DSS | SSCR0_EDSS); in pxa_ssp_hw_params()
574 if (ssp->type == PXA3xx_SSP) in pxa_ssp_hw_params()
585 pxa_ssp_write_reg(ssp, SSCR0, sscr0); in pxa_ssp_hw_params()
589 sspsp = pxa_ssp_read_reg(ssp, SSPSP); in pxa_ssp_hw_params()
591 if ((pxa_ssp_get_scr(ssp) == 4) && (width == 16)) { in pxa_ssp_hw_params()
600 if (ssp->type != PXA3xx_SSP) in pxa_ssp_hw_params()
620 pxa_ssp_write_reg(ssp, SSPSP, sspsp); in pxa_ssp_hw_params()
630 dev_err(&ssp->pdev->dev, "No TDM timeslot configured\n"); in pxa_ssp_hw_params()
634 dump_registers(ssp); in pxa_ssp_hw_params()
640 struct ssp_device *ssp, int value) in pxa_ssp_set_running_bit() argument
642 uint32_t sscr0 = pxa_ssp_read_reg(ssp, SSCR0); in pxa_ssp_set_running_bit()
643 uint32_t sscr1 = pxa_ssp_read_reg(ssp, SSCR1); in pxa_ssp_set_running_bit()
644 uint32_t sspsp = pxa_ssp_read_reg(ssp, SSPSP); in pxa_ssp_set_running_bit()
645 uint32_t sssr = pxa_ssp_read_reg(ssp, SSSR); in pxa_ssp_set_running_bit()
648 pxa_ssp_write_reg(ssp, SSCR0, sscr0 & ~SSCR0_SSE); in pxa_ssp_set_running_bit()
662 pxa_ssp_write_reg(ssp, SSCR1, sscr1); in pxa_ssp_set_running_bit()
665 pxa_ssp_write_reg(ssp, SSSR, sssr); in pxa_ssp_set_running_bit()
666 pxa_ssp_write_reg(ssp, SSPSP, sspsp); in pxa_ssp_set_running_bit()
667 pxa_ssp_write_reg(ssp, SSCR0, sscr0 | SSCR0_SSE); in pxa_ssp_set_running_bit()
676 struct ssp_device *ssp = priv->ssp; in pxa_ssp_trigger() local
681 pxa_ssp_enable(ssp); in pxa_ssp_trigger()
684 pxa_ssp_set_running_bit(substream, ssp, 1); in pxa_ssp_trigger()
685 val = pxa_ssp_read_reg(ssp, SSSR); in pxa_ssp_trigger()
686 pxa_ssp_write_reg(ssp, SSSR, val); in pxa_ssp_trigger()
689 pxa_ssp_set_running_bit(substream, ssp, 1); in pxa_ssp_trigger()
692 pxa_ssp_set_running_bit(substream, ssp, 0); in pxa_ssp_trigger()
695 pxa_ssp_disable(ssp); in pxa_ssp_trigger()
698 pxa_ssp_set_running_bit(substream, ssp, 0); in pxa_ssp_trigger()
705 dump_registers(ssp); in pxa_ssp_trigger()
730 priv->ssp = pxa_ssp_request_of(ssp_handle, "SoC audio"); in pxa_ssp_probe()
731 if (priv->ssp == NULL) { in pxa_ssp_probe()
736 priv->ssp = pxa_ssp_request(dai->id + 1, "SoC audio"); in pxa_ssp_probe()
737 if (priv->ssp == NULL) { in pxa_ssp_probe()
757 pxa_ssp_free(priv->ssp); in pxa_ssp_remove()