Lines Matching full:ssc
2 * Driver for AT73C213 16-bit stereo DAC connected to Atmel SSC
30 #include <linux/atmel-ssc.h>
72 struct ssc_device *ssc; member
78 /* Protect SSC registers against concurrent access. */
134 unsigned long ssc_rate = clk_get_rate(chip->ssc->clk); in snd_at73c213_set_bitrate()
149 /* SSC clock / (bitrate * stereo * 16-bit). */ in snd_at73c213_set_bitrate()
169 /* SSC clock / (ssc divider * 16-bit * stereo). */ in snd_at73c213_set_bitrate()
195 /* Set divider in SSC device. */ in snd_at73c213_set_bitrate()
196 ssc_writel(chip->ssc->regs, CMR, ssc_div/2); in snd_at73c213_set_bitrate()
198 /* SSC clock / (ssc divider * 16-bit * stereo). */ in snd_at73c213_set_bitrate()
224 clk_enable(chip->ssc->clk); in snd_at73c213_pcm_open()
233 clk_disable(chip->ssc->clk); in snd_at73c213_pcm_close()
244 val = ssc_readl(chip->ssc->regs, TFMR); in snd_at73c213_pcm_hw_params()
246 ssc_writel(chip->ssc->regs, TFMR, val); in snd_at73c213_pcm_hw_params()
267 ssc_writel(chip->ssc->regs, PDC_TPR, in snd_at73c213_pcm_prepare()
269 ssc_writel(chip->ssc->regs, PDC_TCR, in snd_at73c213_pcm_prepare()
271 ssc_writel(chip->ssc->regs, PDC_TNPR, in snd_at73c213_pcm_prepare()
273 ssc_writel(chip->ssc->regs, PDC_TNCR, in snd_at73c213_pcm_prepare()
289 ssc_writel(chip->ssc->regs, IER, SSC_BIT(IER_ENDTX)); in snd_at73c213_pcm_trigger()
290 ssc_writel(chip->ssc->regs, PDC_PTCR, SSC_BIT(PDC_PTCR_TXTEN)); in snd_at73c213_pcm_trigger()
293 ssc_writel(chip->ssc->regs, PDC_PTCR, SSC_BIT(PDC_PTCR_TXTDIS)); in snd_at73c213_pcm_trigger()
294 ssc_writel(chip->ssc->regs, IDR, SSC_BIT(IDR_ENDTX)); in snd_at73c213_pcm_trigger()
315 bytes = ssc_readl(chip->ssc->regs, PDC_TPR) in snd_at73c213_pcm_pointer()
354 SNDRV_DMA_TYPE_DEV, &chip->ssc->pdev->dev, in snd_at73c213_pcm_new()
373 status = ssc_readl(chip->ssc->regs, IMR); in snd_at73c213_interrupt()
385 ssc_writel(chip->ssc->regs, PDC_TNPR, in snd_at73c213_interrupt()
387 ssc_writel(chip->ssc->regs, PDC_TNCR, in snd_at73c213_interrupt()
392 ssc_readl(chip->ssc->regs, IMR); in snd_at73c213_interrupt()
758 ssc_writel(chip->ssc->regs, TCMR, in snd_at73c213_ssc_init()
770 ssc_writel(chip->ssc->regs, TFMR, in snd_at73c213_ssc_init()
862 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXEN)); in snd_at73c213_chip_init()
876 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXDIS)); in snd_at73c213_dev_free()
894 irq = chip->ssc->irq; in snd_at73c213_dev_init()
903 clk_enable(chip->ssc->clk); in snd_at73c213_dev_init()
943 clk_disable(chip->ssc->clk); in snd_at73c213_dev_init()
983 chip->ssc = ssc_request(board->ssc_id); in snd_at73c213_probe()
984 if (IS_ERR(chip->ssc)) { in snd_at73c213_probe()
985 dev_dbg(&spi->dev, "could not get ssc%d device\n", in snd_at73c213_probe()
987 retval = PTR_ERR(chip->ssc); in snd_at73c213_probe()
1008 ssc_free(chip->ssc); in snd_at73c213_probe()
1022 clk_enable(chip->ssc->clk); in snd_at73c213_remove()
1023 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXDIS)); in snd_at73c213_remove()
1024 clk_disable(chip->ssc->clk); in snd_at73c213_remove()
1078 ssc_free(chip->ssc); in snd_at73c213_remove()
1091 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXDIS)); in snd_at73c213_suspend()
1092 clk_disable(chip->ssc->clk); in snd_at73c213_suspend()
1104 clk_enable(chip->ssc->clk); in snd_at73c213_resume()
1105 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXEN)); in snd_at73c213_resume()
1130 MODULE_DESCRIPTION("Sound driver for AT73C213 with Atmel SSC");