Lines Matching refs:spdif
104 static void spdif_snd_txctrl(struct samsung_spdif_info *spdif, int on) in spdif_snd_txctrl() argument
106 void __iomem *regs = spdif->regs; in spdif_snd_txctrl()
109 dev_dbg(spdif->dev, "Entered %s\n", __func__); in spdif_snd_txctrl()
121 struct samsung_spdif_info *spdif = to_info(cpu_dai); in spdif_set_sysclk() local
124 dev_dbg(spdif->dev, "Entered %s\n", __func__); in spdif_set_sysclk()
126 clkcon = readl(spdif->regs + CLKCON); in spdif_set_sysclk()
133 writel(clkcon, spdif->regs + CLKCON); in spdif_set_sysclk()
135 spdif->clk_rate = freq; in spdif_set_sysclk()
144 struct samsung_spdif_info *spdif = to_info(rtd->cpu_dai); in spdif_trigger() local
147 dev_dbg(spdif->dev, "Entered %s\n", __func__); in spdif_trigger()
153 spin_lock_irqsave(&spdif->lock, flags); in spdif_trigger()
154 spdif_snd_txctrl(spdif, 1); in spdif_trigger()
155 spin_unlock_irqrestore(&spdif->lock, flags); in spdif_trigger()
160 spin_lock_irqsave(&spdif->lock, flags); in spdif_trigger()
161 spdif_snd_txctrl(spdif, 0); in spdif_trigger()
162 spin_unlock_irqrestore(&spdif->lock, flags); in spdif_trigger()
180 struct samsung_spdif_info *spdif = to_info(rtd->cpu_dai); in spdif_hw_params() local
181 void __iomem *regs = spdif->regs; in spdif_hw_params()
187 dev_dbg(spdif->dev, "Entered %s\n", __func__); in spdif_hw_params()
190 dma_data = spdif->dma_playback; in spdif_hw_params()
192 dev_err(spdif->dev, "Capture is not supported\n"); in spdif_hw_params()
198 spin_lock_irqsave(&spdif->lock, flags); in spdif_hw_params()
215 dev_err(spdif->dev, "Unsupported data size.\n"); in spdif_hw_params()
219 ratio = spdif->clk_rate / params_rate(params); in spdif_hw_params()
224 dev_err(spdif->dev, "Invalid clock ratio %ld/%d\n", in spdif_hw_params()
225 spdif->clk_rate, params_rate(params)); in spdif_hw_params()
257 dev_err(spdif->dev, "Invalid sampling rate %d\n", in spdif_hw_params()
270 spin_unlock_irqrestore(&spdif->lock, flags); in spdif_hw_params()
274 spin_unlock_irqrestore(&spdif->lock, flags); in spdif_hw_params()
282 struct samsung_spdif_info *spdif = to_info(rtd->cpu_dai); in spdif_shutdown() local
283 void __iomem *regs = spdif->regs; in spdif_shutdown()
286 dev_dbg(spdif->dev, "Entered %s\n", __func__); in spdif_shutdown()
300 struct samsung_spdif_info *spdif = to_info(cpu_dai); in spdif_suspend() local
301 u32 con = spdif->saved_con; in spdif_suspend()
303 dev_dbg(spdif->dev, "Entered %s\n", __func__); in spdif_suspend()
305 spdif->saved_clkcon = readl(spdif->regs + CLKCON) & CLKCTL_MASK; in spdif_suspend()
306 spdif->saved_con = readl(spdif->regs + CON) & CON_MASK; in spdif_suspend()
307 spdif->saved_cstas = readl(spdif->regs + CSTAS) & CSTAS_MASK; in spdif_suspend()
309 writel(con | CON_SW_RESET, spdif->regs + CON); in spdif_suspend()
317 struct samsung_spdif_info *spdif = to_info(cpu_dai); in spdif_resume() local
319 dev_dbg(spdif->dev, "Entered %s\n", __func__); in spdif_resume()
321 writel(spdif->saved_clkcon, spdif->regs + CLKCON); in spdif_resume()
322 writel(spdif->saved_con, spdif->regs + CON); in spdif_resume()
323 writel(spdif->saved_cstas, spdif->regs + CSTAS); in spdif_resume()
363 struct samsung_spdif_info *spdif; in spdif_probe() local
382 spdif = &spdif_info; in spdif_probe()
383 spdif->dev = &pdev->dev; in spdif_probe()
385 spin_lock_init(&spdif->lock); in spdif_probe()
387 spdif->pclk = devm_clk_get(&pdev->dev, "spdif"); in spdif_probe()
388 if (IS_ERR(spdif->pclk)) { in spdif_probe()
393 clk_prepare_enable(spdif->pclk); in spdif_probe()
395 spdif->sclk = devm_clk_get(&pdev->dev, "sclk_spdif"); in spdif_probe()
396 if (IS_ERR(spdif->sclk)) { in spdif_probe()
401 clk_prepare_enable(spdif->sclk); in spdif_probe()
411 spdif->regs = ioremap(mem_res->start, 0x100); in spdif_probe()
412 if (spdif->regs == NULL) { in spdif_probe()
418 dev_set_drvdata(&pdev->dev, spdif); in spdif_probe()
431 spdif->dma_playback = &spdif_stereo_out; in spdif_probe()
441 iounmap(spdif->regs); in spdif_probe()
445 clk_disable_unprepare(spdif->sclk); in spdif_probe()
447 clk_disable_unprepare(spdif->pclk); in spdif_probe()
454 struct samsung_spdif_info *spdif = &spdif_info; in spdif_remove() local
457 iounmap(spdif->regs); in spdif_remove()
463 clk_disable_unprepare(spdif->sclk); in spdif_remove()
464 clk_disable_unprepare(spdif->pclk); in spdif_remove()