Lines Matching refs:pcm
20 #include "pcm.h"
112 * @pclk: the PCLK_PCM (pcm) clock pointer
154 static void s3c_pcm_snd_txctrl(struct s3c_pcm_info *pcm, int on)
156 void __iomem *regs = pcm->regs;
176 if (!pcm->idleclk)
185 static void s3c_pcm_snd_rxctrl(struct s3c_pcm_info *pcm, int on)
187 void __iomem *regs = pcm->regs;
207 if (!pcm->idleclk)
220 struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
223 dev_dbg(pcm->dev, "Entered %s\n", __func__);
229 spin_lock_irqsave(&pcm->lock, flags);
232 s3c_pcm_snd_rxctrl(pcm, 1);
234 s3c_pcm_snd_txctrl(pcm, 1);
236 spin_unlock_irqrestore(&pcm->lock, flags);
242 spin_lock_irqsave(&pcm->lock, flags);
245 s3c_pcm_snd_rxctrl(pcm, 0);
247 s3c_pcm_snd_txctrl(pcm, 0);
249 spin_unlock_irqrestore(&pcm->lock, flags);
264 struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
265 void __iomem *regs = pcm->regs;
271 dev_dbg(pcm->dev, "Entered %s\n", __func__);
281 spin_lock_irqsave(&pcm->lock, flags);
286 clk = pcm->pclk;
288 clk = pcm->cclk;
291 sclk_div = clk_get_rate(clk) / pcm->sclk_per_fs /
300 sync_div = pcm->sclk_per_fs - 1;
309 spin_unlock_irqrestore(&pcm->lock, flags);
311 dev_dbg(pcm->dev, "PCMSOURCE_CLK-%lu SCLK=%ufs SCLK_DIV=%d SYNC_DIV=%d\n",
312 clk_get_rate(clk), pcm->sclk_per_fs,
321 struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(cpu_dai);
322 void __iomem *regs = pcm->regs;
327 dev_dbg(pcm->dev, "Entered %s\n", __func__);
329 spin_lock_irqsave(&pcm->lock, flags);
338 dev_err(pcm->dev, "Unsupported clock inversion!\n");
348 dev_err(pcm->dev, "Unsupported master/slave format!\n");
355 pcm->idleclk = 1;
358 pcm->idleclk = 0;
361 dev_err(pcm->dev, "Invalid Clock gating request!\n");
376 dev_err(pcm->dev, "Unsupported data format!\n");
384 spin_unlock_irqrestore(&pcm->lock, flags);
392 struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(cpu_dai);
396 pcm->sclk_per_fs = div;
409 struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(cpu_dai);
410 void __iomem *regs = pcm->regs;
421 if (clk_get_rate(pcm->cclk) != freq)
422 clk_set_rate(pcm->cclk, freq);
437 struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(dai);
439 snd_soc_dai_init_dma_data(dai, pcm->dma_playback, pcm->dma_capture);
473 .name = "samsung-pcm.0",
477 .name = "samsung-pcm.1",
483 .name = "s3c-pcm",
489 struct s3c_pcm_info *pcm;
508 pcm = &s3c_pcm[pdev->id];
509 pcm->dev = &pdev->dev;
511 spin_lock_init(&pcm->lock);
514 pcm->sclk_per_fs = 128;
516 pcm->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &mem_res);
517 if (IS_ERR(pcm->regs))
518 return PTR_ERR(pcm->regs);
520 pcm->cclk = devm_clk_get(&pdev->dev, "audio-bus");
521 if (IS_ERR(pcm->cclk)) {
523 return PTR_ERR(pcm->cclk);
525 ret = clk_prepare_enable(pcm->cclk);
529 /* record our pcm structure for later use in the callbacks */
530 dev_set_drvdata(&pdev->dev, pcm);
532 pcm->pclk = devm_clk_get(&pdev->dev, "pcm");
533 if (IS_ERR(pcm->pclk)) {
534 dev_err(&pdev->dev, "failed to get pcm clock\n");
535 ret = PTR_ERR(pcm->pclk);
538 ret = clk_prepare_enable(pcm->pclk);
552 pcm->dma_capture = &s3c_pcm_stereo_in[pdev->id];
553 pcm->dma_playback = &s3c_pcm_stereo_out[pdev->id];
576 clk_disable_unprepare(pcm->pclk);
578 clk_disable_unprepare(pcm->cclk);
584 struct s3c_pcm_info *pcm = &s3c_pcm[pdev->id];
587 clk_disable_unprepare(pcm->cclk);
588 clk_disable_unprepare(pcm->pclk);
595 .name = "samsung-pcm",
605 MODULE_ALIAS("platform:samsung-pcm");