Lines Matching defs:spdif

92 	struct img_spdif_in *spdif = dev_get_drvdata(dev);
94 clk_disable_unprepare(spdif->clk_sys);
101 struct img_spdif_in *spdif = dev_get_drvdata(dev);
104 ret = clk_prepare_enable(spdif->clk_sys);
113 static inline void img_spdif_in_writel(struct img_spdif_in *spdif,
116 writel(val, spdif->base + reg);
119 static inline u32 img_spdif_in_readl(struct img_spdif_in *spdif, u32 reg)
121 return readl(spdif->base + reg);
124 static inline void img_spdif_in_aclkgen_writel(struct img_spdif_in *spdif,
127 img_spdif_in_writel(spdif, spdif->aclkgen_regs[index],
131 static int img_spdif_in_check_max_rate(struct img_spdif_in *spdif,
139 freq_t = clk_get_rate(spdif->clk_sys);
178 static int img_spdif_in_do_clkgen_single(struct img_spdif_in *spdif,
186 ret = img_spdif_in_check_max_rate(spdif, rate, &clk_rate);
199 spin_lock_irqsave(&spdif->lock, flags);
201 if (spdif->active) {
202 spin_unlock_irqrestore(&spdif->lock, flags);
206 img_spdif_in_writel(spdif, reg, IMG_SPDIF_IN_CLKGEN);
208 spdif->single_freq = rate;
210 spin_unlock_irqrestore(&spdif->lock, flags);
215 static int img_spdif_in_do_clkgen_multi(struct img_spdif_in *spdif,
227 ret = img_spdif_in_check_max_rate(spdif, max_rate, &clk_rate);
245 spin_lock_irqsave(&spdif->lock, flags);
247 if (spdif->active) {
248 spin_unlock_irqrestore(&spdif->lock, flags);
252 trk_reg = spdif->trk << IMG_SPDIF_IN_ACLKGEN_TRK_SHIFT;
255 spdif->aclkgen_regs[i] = temp_regs[i] | trk_reg;
256 img_spdif_in_aclkgen_writel(spdif, i);
259 spdif->multi_freq = true;
260 spdif->multi_freqs[0] = multi_freqs[0];
261 spdif->multi_freqs[1] = multi_freqs[1];
262 spdif->multi_freqs[2] = multi_freqs[2];
263 spdif->multi_freqs[3] = multi_freqs[3];
265 spin_unlock_irqrestore(&spdif->lock, flags);
295 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
298 reg = img_spdif_in_readl(spdif, IMG_SPDIF_IN_CSL);
303 reg = img_spdif_in_readl(spdif, IMG_SPDIF_IN_CSH);
325 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
328 spin_lock_irqsave(&spdif->lock, flags);
329 if (spdif->multi_freq) {
330 ucontrol->value.integer.value[0] = spdif->multi_freqs[0];
331 ucontrol->value.integer.value[1] = spdif->multi_freqs[1];
332 ucontrol->value.integer.value[2] = spdif->multi_freqs[2];
333 ucontrol->value.integer.value[3] = spdif->multi_freqs[3];
340 spin_unlock_irqrestore(&spdif->lock, flags);
349 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
368 return img_spdif_in_do_clkgen_multi(spdif, multi_freqs);
370 spin_lock_irqsave(&spdif->lock, flags);
372 if (spdif->active) {
373 spin_unlock_irqrestore(&spdif->lock, flags);
377 spdif->multi_freq = false;
379 spin_unlock_irqrestore(&spdif->lock, flags);
399 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
404 spin_lock_irqsave(&spdif->lock, flags);
406 reg = img_spdif_in_readl(spdif, IMG_SPDIF_IN_STATUS);
408 if (spdif->multi_freq) {
411 uc->value.integer.value[0] = spdif->multi_freqs[i];
413 uc->value.integer.value[0] = spdif->single_freq;
419 spin_unlock_irqrestore(&spdif->lock, flags);
439 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
441 ucontrol->value.integer.value[0] = spdif->trk;
450 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
455 spin_lock_irqsave(&spdif->lock, flags);
457 if (spdif->active) {
458 spin_unlock_irqrestore(&spdif->lock, flags);
462 spdif->trk = ucontrol->value.integer.value[0];
464 reg = img_spdif_in_readl(spdif, IMG_SPDIF_IN_CTL);
466 reg |= spdif->trk << IMG_SPDIF_IN_CTL_TRK_SHIFT;
467 img_spdif_in_writel(spdif, reg, IMG_SPDIF_IN_CTL);
470 spdif->aclkgen_regs[i] = (spdif->aclkgen_regs[i] &
472 (spdif->trk << IMG_SPDIF_IN_ACLKGEN_TRK_SHIFT);
474 img_spdif_in_aclkgen_writel(spdif, i);
477 spin_unlock_irqrestore(&spdif->lock, flags);
497 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
499 ucontrol->value.integer.value[0] = spdif->lock_acquire;
508 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
512 spin_lock_irqsave(&spdif->lock, flags);
514 if (spdif->active) {
515 spin_unlock_irqrestore(&spdif->lock, flags);
519 spdif->lock_acquire = ucontrol->value.integer.value[0];
521 reg = img_spdif_in_readl(spdif, IMG_SPDIF_IN_CTL);
523 reg |= (spdif->lock_acquire << IMG_SPDIF_IN_CTL_LOCKHI_SHIFT) &
525 img_spdif_in_writel(spdif, reg, IMG_SPDIF_IN_CTL);
527 spin_unlock_irqrestore(&spdif->lock, flags);
536 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
538 ucontrol->value.integer.value[0] = spdif->lock_release;
547 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(cpu_dai);
551 spin_lock_irqsave(&spdif->lock, flags);
553 if (spdif->active) {
554 spin_unlock_irqrestore(&spdif->lock, flags);
558 spdif->lock_release = ucontrol->value.integer.value[0];
560 reg = img_spdif_in_readl(spdif, IMG_SPDIF_IN_CTL);
562 reg |= (spdif->lock_release << IMG_SPDIF_IN_CTL_LOCKLO_SHIFT) &
564 img_spdif_in_writel(spdif, reg, IMG_SPDIF_IN_CTL);
566 spin_unlock_irqrestore(&spdif->lock, flags);
629 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(dai);
633 spin_lock_irqsave(&spdif->lock, flags);
639 reg = img_spdif_in_readl(spdif, IMG_SPDIF_IN_CTL);
640 if (spdif->multi_freq)
645 img_spdif_in_writel(spdif, reg, IMG_SPDIF_IN_CTL);
646 spdif->active = true;
651 reg = img_spdif_in_readl(spdif, IMG_SPDIF_IN_CTL);
653 img_spdif_in_writel(spdif, reg, IMG_SPDIF_IN_CTL);
654 spdif->active = false;
660 spin_unlock_irqrestore(&spdif->lock, flags);
668 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(dai);
682 return img_spdif_in_do_clkgen_single(spdif, rate);
692 struct img_spdif_in *spdif = snd_soc_dai_get_drvdata(dai);
694 snd_soc_dai_init_dma_data(dai, NULL, &spdif->dma_data);
714 .name = "img-spdif-in"
719 struct img_spdif_in *spdif;
727 spdif = devm_kzalloc(&pdev->dev, sizeof(*spdif), GFP_KERNEL);
728 if (!spdif)
731 platform_set_drvdata(pdev, spdif);
733 spdif->dev = &pdev->dev;
740 spdif->base = base;
742 spdif->clk_sys = devm_clk_get(dev, "sys");
743 if (IS_ERR(spdif->clk_sys)) {
744 if (PTR_ERR(spdif->clk_sys) != -EPROBE_DEFER)
746 return PTR_ERR(spdif->clk_sys);
768 img_spdif_in_writel(spdif, IMG_SPDIF_IN_SOFT_RESET_MASK,
770 img_spdif_in_writel(spdif, 0, IMG_SPDIF_IN_SOFT_RESET);
776 spin_lock_init(&spdif->lock);
778 spdif->dma_data.addr = res->start + IMG_SPDIF_IN_RX_FIFO_OFFSET;
779 spdif->dma_data.addr_width = 4;
780 spdif->dma_data.maxburst = 4;
781 spdif->trk = 0x80;
782 spdif->lock_acquire = 4;
783 spdif->lock_release = -128;
785 reg = (spdif->lock_acquire << IMG_SPDIF_IN_CTL_LOCKHI_SHIFT) &
787 reg |= (spdif->lock_release << IMG_SPDIF_IN_CTL_LOCKLO_SHIFT) &
789 reg |= (spdif->trk << IMG_SPDIF_IN_CTL_TRK_SHIFT) &
791 img_spdif_in_writel(spdif, reg, IMG_SPDIF_IN_CTL);
829 struct img_spdif_in *spdif = dev_get_drvdata(dev);
838 spdif->suspend_clkgen = img_spdif_in_readl(spdif, IMG_SPDIF_IN_CLKGEN);
839 spdif->suspend_ctl = img_spdif_in_readl(spdif, IMG_SPDIF_IN_CTL);
848 struct img_spdif_in *spdif = dev_get_drvdata(dev);
856 img_spdif_in_aclkgen_writel(spdif, i);
858 img_spdif_in_writel(spdif, spdif->suspend_clkgen, IMG_SPDIF_IN_CLKGEN);
859 img_spdif_in_writel(spdif, spdif->suspend_ctl, IMG_SPDIF_IN_CTL);
869 { .compatible = "img,spdif-in" },
882 .name = "img-spdif-in",