Lines Matching refs:spdif_priv
116 static void spdif_irq_dpll_lock(struct fsl_spdif_priv *spdif_priv) in spdif_irq_dpll_lock() argument
118 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_dpll_lock()
119 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_dpll_lock()
128 spdif_priv->dpll_locked = locked ? true : false; in spdif_irq_dpll_lock()
132 static void spdif_irq_sym_error(struct fsl_spdif_priv *spdif_priv) in spdif_irq_sym_error() argument
134 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_sym_error()
135 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_sym_error()
140 if (!spdif_priv->dpll_locked) in spdif_irq_sym_error()
145 static void spdif_irq_uqrx_full(struct fsl_spdif_priv *spdif_priv, char name) in spdif_irq_uqrx_full() argument
147 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_irq_uqrx_full()
148 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_uqrx_full()
149 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_uqrx_full()
184 static void spdif_irq_uq_sync(struct fsl_spdif_priv *spdif_priv) in spdif_irq_uq_sync() argument
186 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_irq_uq_sync()
187 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_uq_sync()
200 static void spdif_irq_uq_err(struct fsl_spdif_priv *spdif_priv) in spdif_irq_uq_err() argument
202 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_irq_uq_err()
203 struct regmap *regmap = spdif_priv->regmap; in spdif_irq_uq_err()
204 struct platform_device *pdev = spdif_priv->pdev; in spdif_irq_uq_err()
220 static u32 spdif_intr_status_clear(struct fsl_spdif_priv *spdif_priv) in spdif_intr_status_clear() argument
222 struct regmap *regmap = spdif_priv->regmap; in spdif_intr_status_clear()
235 struct fsl_spdif_priv *spdif_priv = (struct fsl_spdif_priv *)devid; in spdif_isr() local
236 struct platform_device *pdev = spdif_priv->pdev; in spdif_isr()
239 sis = spdif_intr_status_clear(spdif_priv); in spdif_isr()
242 spdif_irq_dpll_lock(spdif_priv); in spdif_isr()
257 spdif_irq_sym_error(spdif_priv); in spdif_isr()
263 spdif_irq_uqrx_full(spdif_priv, 'U'); in spdif_isr()
269 spdif_irq_uqrx_full(spdif_priv, 'Q'); in spdif_isr()
275 spdif_irq_uq_sync(spdif_priv); in spdif_isr()
278 spdif_irq_uq_err(spdif_priv); in spdif_isr()
287 spdif_irq_dpll_lock(spdif_priv); in spdif_isr()
300 static int spdif_softreset(struct fsl_spdif_priv *spdif_priv) in spdif_softreset() argument
302 struct regmap *regmap = spdif_priv->regmap; in spdif_softreset()
334 static void spdif_write_channel_status(struct fsl_spdif_priv *spdif_priv) in spdif_write_channel_status() argument
336 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_write_channel_status()
337 struct regmap *regmap = spdif_priv->regmap; in spdif_write_channel_status()
338 struct platform_device *pdev = spdif_priv->pdev; in spdif_write_channel_status()
355 static int spdif_set_rx_clksrc(struct fsl_spdif_priv *spdif_priv, in spdif_set_rx_clksrc() argument
358 struct regmap *regmap = spdif_priv->regmap; in spdif_set_rx_clksrc()
359 u8 clksrc = spdif_priv->rxclk_src; in spdif_set_rx_clksrc()
375 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in spdif_set_sample_rate() local
376 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in spdif_set_sample_rate()
377 struct regmap *regmap = spdif_priv->regmap; in spdif_set_sample_rate()
378 struct platform_device *pdev = spdif_priv->pdev; in spdif_set_sample_rate()
410 clk = spdif_priv->txclk_src[rate]; in spdif_set_sample_rate()
416 txclk_df = spdif_priv->txclk_df[rate]; in spdif_set_sample_rate()
422 sysclk_df = spdif_priv->sysclk_df[rate]; in spdif_set_sample_rate()
429 ret = clk_set_rate(spdif_priv->txclk[rate], in spdif_set_sample_rate()
440 clk_get_rate(spdif_priv->txclk[rate])); in spdif_set_sample_rate()
453 spdif_priv->txrate[rate], sample_rate); in spdif_set_sample_rate()
462 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in fsl_spdif_startup() local
463 struct platform_device *pdev = spdif_priv->pdev; in fsl_spdif_startup()
464 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_startup()
471 ret = clk_prepare_enable(spdif_priv->coreclk); in fsl_spdif_startup()
477 ret = spdif_softreset(spdif_priv); in fsl_spdif_startup()
495 ret = clk_prepare_enable(spdif_priv->txclk[i]); in fsl_spdif_startup()
503 ret = clk_prepare_enable(spdif_priv->rxclk); in fsl_spdif_startup()
516 clk_disable_unprepare(spdif_priv->txclk[i]); in fsl_spdif_startup()
518 clk_disable_unprepare(spdif_priv->coreclk); in fsl_spdif_startup()
527 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in fsl_spdif_shutdown() local
528 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_shutdown()
537 clk_disable_unprepare(spdif_priv->txclk[i]); in fsl_spdif_shutdown()
542 clk_disable_unprepare(spdif_priv->rxclk); in fsl_spdif_shutdown()
548 spdif_intr_status_clear(spdif_priv); in fsl_spdif_shutdown()
551 clk_disable_unprepare(spdif_priv->coreclk); in fsl_spdif_shutdown()
560 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in fsl_spdif_hw_params() local
561 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_hw_params()
562 struct platform_device *pdev = spdif_priv->pdev; in fsl_spdif_hw_params()
575 spdif_write_channel_status(spdif_priv); in fsl_spdif_hw_params()
578 ret = spdif_set_rx_clksrc(spdif_priv, SPDIF_DEFAULT_GAINSEL, 1); in fsl_spdif_hw_params()
588 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(rtd->cpu_dai); in fsl_spdif_trigger() local
589 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_trigger()
645 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_pb_get() local
646 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_pb_get()
660 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_pb_put() local
661 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_pb_put()
668 spdif_write_channel_status(spdif_priv); in fsl_spdif_pb_put()
678 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_capture_get() local
679 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_capture_get()
710 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_subcode_get() local
711 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_subcode_get()
742 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_qget() local
743 struct spdif_mixer_control *ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_qget()
776 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_vbit_get() local
777 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_vbit_get()
804 static int spdif_get_rxclk_rate(struct fsl_spdif_priv *spdif_priv, in spdif_get_rxclk_rate() argument
807 struct regmap *regmap = spdif_priv->regmap; in spdif_get_rxclk_rate()
808 struct platform_device *pdev = spdif_priv->pdev; in spdif_get_rxclk_rate()
820 busclk_freq = clk_get_rate(spdif_priv->sysclk); in spdif_get_rxclk_rate()
843 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_rxrate_get() local
846 if (spdif_priv->dpll_locked) in fsl_spdif_rxrate_get()
847 rate = spdif_get_rxclk_rate(spdif_priv, SPDIF_DEFAULT_GAINSEL); in fsl_spdif_rxrate_get()
875 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_usync_get() local
876 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_usync_get()
894 struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai); in fsl_spdif_usync_put() local
895 struct regmap *regmap = spdif_priv->regmap; in fsl_spdif_usync_put()
1094 static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv, in fsl_spdif_txclk_caldiv() argument
1099 bool is_sysclk = clk_is_match(clk, spdif_priv->sysclk); in fsl_spdif_txclk_caldiv()
1122 spdif_priv->txclk_df[index] = txclk_df; in fsl_spdif_txclk_caldiv()
1123 spdif_priv->sysclk_df[index] = sysclk_df; in fsl_spdif_txclk_caldiv()
1124 spdif_priv->txrate[index] = arate; in fsl_spdif_txclk_caldiv()
1133 spdif_priv->txclk_df[index] = txclk_df; in fsl_spdif_txclk_caldiv()
1134 spdif_priv->sysclk_df[index] = sysclk_df; in fsl_spdif_txclk_caldiv()
1135 spdif_priv->txrate[index] = arate; in fsl_spdif_txclk_caldiv()
1143 spdif_priv->txclk_df[index] = txclk_df; in fsl_spdif_txclk_caldiv()
1144 spdif_priv->sysclk_df[index] = sysclk_df; in fsl_spdif_txclk_caldiv()
1145 spdif_priv->txrate[index] = arate; in fsl_spdif_txclk_caldiv()
1154 static int fsl_spdif_probe_txclk(struct fsl_spdif_priv *spdif_priv, in fsl_spdif_probe_txclk() argument
1158 struct platform_device *pdev = spdif_priv->pdev; in fsl_spdif_probe_txclk()
1175 ret = fsl_spdif_txclk_caldiv(spdif_priv, clk, savesub, index, in fsl_spdif_probe_txclk()
1181 spdif_priv->txclk[index] = clk; in fsl_spdif_probe_txclk()
1182 spdif_priv->txclk_src[index] = i; in fsl_spdif_probe_txclk()
1190 spdif_priv->txclk_src[index], rate[index]); in fsl_spdif_probe_txclk()
1192 spdif_priv->txclk_df[index], rate[index]); in fsl_spdif_probe_txclk()
1193 if (clk_is_match(spdif_priv->txclk[index], spdif_priv->sysclk)) in fsl_spdif_probe_txclk()
1195 spdif_priv->sysclk_df[index], rate[index]); in fsl_spdif_probe_txclk()
1197 rate[index], spdif_priv->txrate[index]); in fsl_spdif_probe_txclk()
1205 struct fsl_spdif_priv *spdif_priv; in fsl_spdif_probe() local
1214 spdif_priv = devm_kzalloc(&pdev->dev, sizeof(*spdif_priv), GFP_KERNEL); in fsl_spdif_probe()
1215 if (!spdif_priv) in fsl_spdif_probe()
1218 spdif_priv->pdev = pdev; in fsl_spdif_probe()
1221 memcpy(&spdif_priv->cpu_dai_drv, &fsl_spdif_dai, sizeof(fsl_spdif_dai)); in fsl_spdif_probe()
1222 spdif_priv->cpu_dai_drv.name = dev_name(&pdev->dev); in fsl_spdif_probe()
1230 spdif_priv->regmap = devm_regmap_init_mmio_clk(&pdev->dev, in fsl_spdif_probe()
1232 if (IS_ERR(spdif_priv->regmap)) { in fsl_spdif_probe()
1234 return PTR_ERR(spdif_priv->regmap); in fsl_spdif_probe()
1244 dev_name(&pdev->dev), spdif_priv); in fsl_spdif_probe()
1251 spdif_priv->sysclk = devm_clk_get(&pdev->dev, "rxtx5"); in fsl_spdif_probe()
1252 if (IS_ERR(spdif_priv->sysclk)) { in fsl_spdif_probe()
1254 return PTR_ERR(spdif_priv->sysclk); in fsl_spdif_probe()
1258 spdif_priv->coreclk = devm_clk_get(&pdev->dev, "core"); in fsl_spdif_probe()
1259 if (IS_ERR(spdif_priv->coreclk)) { in fsl_spdif_probe()
1261 return PTR_ERR(spdif_priv->coreclk); in fsl_spdif_probe()
1265 spdif_priv->rxclk = devm_clk_get(&pdev->dev, "rxtx1"); in fsl_spdif_probe()
1266 if (IS_ERR(spdif_priv->rxclk)) { in fsl_spdif_probe()
1268 return PTR_ERR(spdif_priv->rxclk); in fsl_spdif_probe()
1270 spdif_priv->rxclk_src = DEFAULT_RXCLK_SRC; in fsl_spdif_probe()
1273 ret = fsl_spdif_probe_txclk(spdif_priv, i); in fsl_spdif_probe()
1279 ctrl = &spdif_priv->fsl_spdif_control; in fsl_spdif_probe()
1290 spdif_priv->dpll_locked = false; in fsl_spdif_probe()
1292 spdif_priv->dma_params_tx.maxburst = FSL_SPDIF_TXFIFO_WML; in fsl_spdif_probe()
1293 spdif_priv->dma_params_rx.maxburst = FSL_SPDIF_RXFIFO_WML; in fsl_spdif_probe()
1294 spdif_priv->dma_params_tx.addr = res->start + REG_SPDIF_STL; in fsl_spdif_probe()
1295 spdif_priv->dma_params_rx.addr = res->start + REG_SPDIF_SRL; in fsl_spdif_probe()
1298 dev_set_drvdata(&pdev->dev, spdif_priv); in fsl_spdif_probe()
1301 &spdif_priv->cpu_dai_drv, 1); in fsl_spdif_probe()
1317 struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev); in fsl_spdif_suspend() local
1319 regmap_read(spdif_priv->regmap, REG_SPDIF_SRPC, in fsl_spdif_suspend()
1320 &spdif_priv->regcache_srpc); in fsl_spdif_suspend()
1322 regcache_cache_only(spdif_priv->regmap, true); in fsl_spdif_suspend()
1323 regcache_mark_dirty(spdif_priv->regmap); in fsl_spdif_suspend()
1330 struct fsl_spdif_priv *spdif_priv = dev_get_drvdata(dev); in fsl_spdif_resume() local
1332 regcache_cache_only(spdif_priv->regmap, false); in fsl_spdif_resume()
1334 regmap_update_bits(spdif_priv->regmap, REG_SPDIF_SRPC, in fsl_spdif_resume()
1336 spdif_priv->regcache_srpc); in fsl_spdif_resume()
1338 return regcache_sync(spdif_priv->regmap); in fsl_spdif_resume()