Lines Matching defs:spdif
54 struct img_spdif_out *spdif = dev_get_drvdata(dev);
56 clk_disable_unprepare(spdif->clk_ref);
57 clk_disable_unprepare(spdif->clk_sys);
64 struct img_spdif_out *spdif = dev_get_drvdata(dev);
67 ret = clk_prepare_enable(spdif->clk_sys);
73 ret = clk_prepare_enable(spdif->clk_ref);
76 clk_disable_unprepare(spdif->clk_sys);
83 static inline void img_spdif_out_writel(struct img_spdif_out *spdif, u32 val,
86 writel(val, spdif->base + reg);
89 static inline u32 img_spdif_out_readl(struct img_spdif_out *spdif, u32 reg)
91 return readl(spdif->base + reg);
94 static void img_spdif_out_reset(struct img_spdif_out *spdif)
98 ctl = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CTL) &
100 status_low = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CSL);
101 status_high = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CSH_UV);
103 reset_control_assert(spdif->rst);
104 reset_control_deassert(spdif->rst);
106 img_spdif_out_writel(spdif, ctl, IMG_SPDIF_OUT_CTL);
107 img_spdif_out_writel(spdif, status_low, IMG_SPDIF_OUT_CSL);
108 img_spdif_out_writel(spdif, status_high, IMG_SPDIF_OUT_CSH_UV);
136 struct img_spdif_out *spdif = snd_soc_dai_get_drvdata(cpu_dai);
140 spin_lock_irqsave(&spdif->lock, flags);
142 reg = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CSL);
148 reg = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CSH_UV);
153 spin_unlock_irqrestore(&spdif->lock, flags);
162 struct img_spdif_out *spdif = snd_soc_dai_get_drvdata(cpu_dai);
171 spin_lock_irqsave(&spdif->lock, flags);
173 img_spdif_out_writel(spdif, reg, IMG_SPDIF_OUT_CSL);
175 reg = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CSH_UV);
179 img_spdif_out_writel(spdif, reg, IMG_SPDIF_OUT_CSH_UV);
181 spin_unlock_irqrestore(&spdif->lock, flags);
206 struct img_spdif_out *spdif = snd_soc_dai_get_drvdata(dai);
214 reg = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CTL);
216 img_spdif_out_writel(spdif, reg, IMG_SPDIF_OUT_CTL);
221 spin_lock_irqsave(&spdif->lock, flags);
222 img_spdif_out_reset(spdif);
223 spin_unlock_irqrestore(&spdif->lock, flags);
235 struct img_spdif_out *spdif = snd_soc_dai_get_drvdata(dai);
245 dev_dbg(spdif->dev, "hw_params rate %ld channels %u format %u\n",
254 pre_div_a = clk_round_rate(spdif->clk_ref, rate * 256);
257 pre_div_b = clk_round_rate(spdif->clk_ref, rate * 384);
266 clk_set_rate(spdif->clk_ref, pre_div_b);
268 clk_set_rate(spdif->clk_ref, pre_div_a);
275 clk_rate = clk_get_rate(spdif->clk_ref);
280 reg = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CTL);
285 img_spdif_out_writel(spdif, reg, IMG_SPDIF_OUT_CTL);
297 struct img_spdif_out *spdif = snd_soc_dai_get_drvdata(dai);
299 snd_soc_dai_init_dma_data(dai, &spdif->dma_data, NULL);
319 .name = "img-spdif-out"
324 struct img_spdif_out *spdif;
330 spdif = devm_kzalloc(&pdev->dev, sizeof(*spdif), GFP_KERNEL);
331 if (!spdif)
334 platform_set_drvdata(pdev, spdif);
336 spdif->dev = &pdev->dev;
343 spdif->base = base;
345 spdif->rst = devm_reset_control_get_exclusive(&pdev->dev, "rst");
346 if (IS_ERR(spdif->rst)) {
347 if (PTR_ERR(spdif->rst) != -EPROBE_DEFER)
349 return PTR_ERR(spdif->rst);
352 spdif->clk_sys = devm_clk_get(&pdev->dev, "sys");
353 if (IS_ERR(spdif->clk_sys)) {
354 if (PTR_ERR(spdif->clk_sys) != -EPROBE_DEFER)
356 return PTR_ERR(spdif->clk_sys);
359 spdif->clk_ref = devm_clk_get(&pdev->dev, "ref");
360 if (IS_ERR(spdif->clk_ref)) {
361 if (PTR_ERR(spdif->clk_ref) != -EPROBE_DEFER)
363 return PTR_ERR(spdif->clk_ref);
378 img_spdif_out_writel(spdif, IMG_SPDIF_OUT_CTL_FS_MASK,
381 img_spdif_out_reset(spdif);
384 spin_lock_init(&spdif->lock);
386 spdif->dma_data.addr = res->start + IMG_SPDIF_OUT_TX_FIFO;
387 spdif->dma_data.addr_width = 4;
388 spdif->dma_data.maxburst = 4;
425 struct img_spdif_out *spdif = dev_get_drvdata(dev);
434 spdif->suspend_ctl = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CTL);
435 spdif->suspend_csl = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CSL);
436 spdif->suspend_csh = img_spdif_out_readl(spdif, IMG_SPDIF_OUT_CSH_UV);
445 struct img_spdif_out *spdif = dev_get_drvdata(dev);
452 img_spdif_out_writel(spdif, spdif->suspend_ctl, IMG_SPDIF_OUT_CTL);
453 img_spdif_out_writel(spdif, spdif->suspend_csl, IMG_SPDIF_OUT_CSL);
454 img_spdif_out_writel(spdif, spdif->suspend_csh, IMG_SPDIF_OUT_CSH_UV);
463 { .compatible = "img,spdif-out" },
476 .name = "img-spdif-out",